Mam wideo mkv (h264), które ma 23,976 fps (24000/1001), ale chcę przekonwertować je na 25 fps bez ponownego kodowania i utraty jakości. Wiem, że mkvmerge może to zrobić (z opcją --default-duration '0: 25fps'), ale chciałbym to zrobić bezpośrednio z ffmpeg, jeśli to możliwe. Według dokumentów to powinno działać:
ffmpeg -i input.mkv -r 25 -vcodec copy output.mkv
ale kiedy go wykonuję, dostaję tylko te same fps wideo. Jaka jest poprawna metoda, aby to zrobić (jeśli istnieje) w ffmpeg?
-r
nie jest zgodny z funkcją kopiowania strumienia i nie ma filtrów strumienia bitów, które zmieniłyby szybkość klatek.Odpowiedzi:
Oto metoda wykorzystująca bieżące wersje FFmpeg. Polega on na tym, że demultiplekser konkat nie przeskalowuje PTS danych wejściowych po pierwszym pliku, ale po prostu stosuje stałe przesunięcie. Załóżmy, że masz strumień 30 fps ze skalą czasu
15360
(typową dla wyjścia FFmpeg). Oznacza to, że ramka0
ma PTS,0
a ramka30
ma PTS15360
. Byłby to strumień 45 fps, gdybyśmy mogli zmienić skalę czasu na23040
bez wpływu na wartości PTS.Zasadniczo właśnie to robi poniższa metoda.
1 . Zidentyfikuj właściwości źródła.
Chcesz zwrócić uwagę na właściwości źródła, zwłaszcza rozdzielczość i
tbn
.2a . (Opcjonalnie) Zmień skalę czasową na wygodną, aby ułatwić obliczenia.
To nas dopada
Jeśli wykonasz ten krok, nowa skala czasu powinna być równa lub stanowić całkowitą wielokrotność pierwotnej liczby klatek na sekundę.
2b . Oblicz potrzebną skalę czasu, aby dla docelowej prędkości klatek
x
PTS ramki nrx
w źródle miał taką samą wartość jak nowytbn
. Jeśli wykonałeś krok 2a, jest to bardzo łatwe i jest to po prostu nowa liczba klatek na sekundę. Tak więc dla docelowego fps powinno być45
nowe .tbn
45
3 . Wygeneruj atrapę wideo.
Wszystkie właściwości powinny być takie same jak rozdzielczość, profil H.264, format pikseli, liczba odwołań .. etc dla uzyskania najlepszych wyników.
4 Połącz filmy.
Najpierw utwórz plik tekstowy
Następnie konkat
Plik wyjściowy będzie odtwarzany 2. wideo przy 45 fps.
5 . Teraz odetnij manekin
i Ty masz
Powiedziałem, że to było zawiłe!
źródło