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 ramka 0
ma PTS, 0
a ramka 30
ma PTS 15360
. Byłby to strumień 45 fps, gdybyśmy mogli zmienić skalę czasu na 23040
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.
Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 1171 kb/s,
30 fps, 30 tbr, 15360 tbn (default)
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.
ffmpeg -i in.mp4 -c copy -an -video_track_timescale 30 in-v30.mp4
To nas dopada
Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 1171 kb/s, \
30 fps, 30 tbr, 30 tbn (default
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 nr x
w źródle miał taką samą wartość jak nowy tbn
. 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.
ffmpeg -f lavfi -i color=s=1280x720:r=45:d=1 -profile:v main -video_track_timescale 45 0.mp4
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
file '0.mp4'
file 'in-v30.mp4'
Następnie konkat
ffmpeg -f concat -i list.txt -c copy -video_track_timescale 45 45fps.mp4
Plik wyjściowy będzie odtwarzany 2. wideo przy 45 fps.
5 . Teraz odetnij manekin
ffmpeg -ss 1.1 -i 45fps.mp4 -c copy -avoid_negative_ts make_zero in45.mp4
i Ty masz
Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 1757 kb/s, \
45 fps, 45 tbr, 11520 tbn (default)
Powiedziałem, że to było zawiłe!
-r
nie jest zgodny z funkcją kopiowania strumienia i nie ma filtrów strumienia bitów, które zmieniłyby szybkość klatek.