Мне нужно объединить несколько видеофайлов с разной частотой кадров, чтобы воспроизвести их с OMXPlayer на Raspberry PI (объединение также выполняется на PI).

И оригиналы, и конкатенация являются mp4/h264, и оригиналы также создаются некоторыми моими программами.

Использование ffmpegs copy muxer не работает, когда файлы имеют разные временные базы.

Так что я думал, что я создаю оригинальные видео с явной временной базой 120 (120 делится на 25 и 30, единственные частоты кадров, которые меня интересуют).

Тест

ffmpeg.exe -i .\ballon.mp4 -enc_time_base 1:120 .\ballon-120.mp4

кажется многообещающим: ffmpeg говорит, что он производит видео 30 кадров в секунду (оригинал был 30 кадров в секунду) с временным интервалом 120 на выходе.

Тем не менее, он также говорит, что он многократно дублирует кадры, и следующая команда говорит мне, что у меня в 4 раза больше кадров, чем на самом деле должно быть:

ffprobe -v error -count_frames -select_streams v:0 -show_entries stream=nb_frames -of default=nokey=1:noprint_wrappers=1 .\ballon.mp4

ffprobe также считает, что частота кадров теперь равна 120, и, действительно, OMXPlayer жалуется на слишком высокую частоту кадров и проигрывает видео несколько медленно.

Я хочу изменить временную базу, а не частоту кадров или количество кадров. Как я могу это сделать?

2 ответа2

1

Используйте частную опцию MP4 muxer

ffmpeg.exe -i .\ballon.mp4 -c copy -video_track_timescale 120 .\ballon-120.mp4

С помощью вашей команды вы перекодировали видео и указали временную базу для кодировщика, которую ffmpeg использует для определения дублирования / отбрасывания кадров.

0

Ключ использовал параметр vsync :

ffmpeg.exe -i.\ballon.mp4 -enc_time_base 1:120 -vsync vfr.\ballon-120.mp4

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .