![ffmpeg Дублирование кадров](https://rvso.com/image/1542506/ffmpeg%20%D0%94%D1%83%D0%B1%D0%BB%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%BA%D0%B0%D0%B4%D1%80%D0%BE%D0%B2.png)
Очень досадная ситуация...
У меня есть видео MPG2 с частотой кадров 29,97, но при конвертации в MP4 кадры дублируются.
Эта команда (прямое преобразование, без опций):
ffmpeg -i ~/Desktop/file.mpg ~/Desktop/file.mp4
вызывает дублирование кадров...
При установке частоты кадров с помощью:
ffmpeg -i ~/Desktop/file.mpg -framerate 29.97 ~/Desktop/file.mp4
Тоже не работает!
Приводит меня к попытке:
ffmpeg -i ~/Desktop/file.mpg -r 29.97 ~/Desktop/file.mp4
Все еще с дублированием кадров!
Наконец я попробовал ffmpeg3-йопция частоты кадров!:
ffmpeg -i ~/Desktop/file.mpg -vf fps=fps=29.97 ~/Desktop/file.mp4
За исключением того, что при выводе аудио/видео были рассинхронизированы!
Какой вариант FPS мне следует использовать?
решение1
Использовать
ffmpeg -i ~/Desktop/file.mpg -vsync 0 ~/Desktop/file.mp4
Это позволяет избежать дублирования.
-vsync passthrough
является синонимом -vsync 0
.
решение2
-vsync
в настоящее время не рекомендуется, поэтому вместо него следует использовать -fps_mode
.
По умолчанию это fps_mode
, auto
поэтому он может автоматически изменить ваш fps. Например, исходный источник имеет переменную частоту кадров, но ffmpeg может решить автоматически изменить ее на постоянную частоту кадров, что может привести к дублированию и пропуску кадров.
Чтобы предотвратить изменение частоты кадров, установите -fps_mode passthrough
. (Это то же самое, что -vsync 0
и или -vsync passthrough
).
Для получения более подробной информации см.документация ffmpeg.
ffmpeg -i ~/Desktop/file.mpg -fps_mode passthrough ~/Desktop/file.mp4