Ось метод з використанням поточних версій FFmpeg. Він спирається на concat demuxer не змінюючи масштаб PTS входів після першого файлу, а просто застосовуючи фіксований зміщення. Скажімо, у вас потік 30 кадрів в секунду з часовим шкалом 15360
(типовий для виходу FFmpeg). Це означає, що кадр 0
має PTS, 0
а кадр 30
- PTS 15360
. Це може стати потоком в 45 кадрів в секунду, якби ми могли змінити масштаб часу, 23040
не впливаючи на значення PTS.
По суті, це робить метод нижче.
1 . Визначте властивості джерела.
Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 1171 kb/s,
30 fps, 30 tbr, 15360 tbn (default)
Ви хочете відзначити властивості джерела, особливо роздільну здатність та tbn
.
2а . (Необов’язково) Змініть масштаб часу на щось зручне, щоб зробити обчислення простішими.
ffmpeg -i in.mp4 -c copy -an -video_track_timescale 30 in-v30.mp4
Це отримує нас
Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 1171 kb/s, \
30 fps, 30 tbr, 30 tbn (default
Якщо ви зробите цей крок, новий часовий діапазон повинен бути рівним або невід'ємним кратним початкового частоти кадрів.
2б . Обчисліть необхідний часовий масштаб, так що для цільової частоти кадрів x
PTS кадру № x
у джерелі повинен мати те саме значення, що і новий tbn
. Якщо ви здійснили крок 2а, це дуже легко, і це просто новий кадр. Отже, для цільових кадрів в секунду має бути 45
нове .tbn
45
3 . Створення фіктивного відео.
ffmpeg -f lavfi -i color=s=1280x720:r=45:d=1 -profile:v main -video_track_timescale 45 0.mp4
Усі властивості повинні бути такими ж, як роздільна здатність, профіль H.264, формат пікселів, кількість посилань і т.д. для найкращих результатів.
4 Підведіть відео.
Спочатку зробіть текстовий файл
file '0.mp4'
file 'in-v30.mp4'
Потім, конмат
ffmpeg -f concat -i list.txt -c copy -video_track_timescale 45 45fps.mp4
Вихідний файл матиме 2-е відео, яке відтворюється зі швидкістю 45 кадрів в секунду.
5 . Тепер відколюйте манекенний преролл
ffmpeg -ss 1.1 -i 45fps.mp4 -c copy -avoid_negative_ts make_zero in45.mp4
і у вас є
Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 1757 kb/s, \
45 fps, 45 tbr, 11520 tbn (default)
Я сказав, що це суперечка!
-r
не сумісний з потоковою копією, і немає біткойн-фільтрів для зміни частоти кадрів.