
Итак, мне нужно сэкономить много места на моем жестком диске, поэтому я кодирую PNG-файлы в видео без потерь, чтобы я мог удалить PNG-файлы. Я кодирую один на 72 кадра в секунду, а другой немного замедляю до 60 кадров в секунду.
Допустим, я использую эту команду для кодирования до 72 кадров в секунду:
ffmpeg -framerate 72 -i png/%%06d.PNG -i audio/72.m4a^
-c:v libx265 -c:a copy -pix_fmt yuv444p -crf:v 0^
video/72.mkv
Это команда 60 кадров в секунду:
ffmpeg -framerate 60 -i png/%%06d.PNG -i audio/60.m4a^
-c:v libx265 -c:a copy -pix_fmt yuv444p -crf:v 0^
video/60.mkv
Что будет эквивалентом команды 60fps, если я хочу закодировать его из видеофайла 72fps, а не из файлов PNG, поскольку они были удалены, но замедлить видео до 60fps без потери кадров? Если возможно, я хочу указать ему кодировать точно на 60fps без использования видеофильтра setpts
и/или копировать видеопоток с другой частотой кадров (не уверен, возможно ли это вообще).
решение1
Основная команда:
ffmpeg -itsscale 1.2 -i video/72.mkv -i audio/60.m4a^
-map 0:v -map 1 -c copy video/60.mp4
Это использует опцию ввода itsscale
для изменения масштаба временных меток, где 1.2
— десятичное представление 72/60
. Обратите внимание, что это не предоставляет новое значение частоты кадров для выходного писателя, поэтому для форматов, таких как MKV, он покажет старую частоту с ffprobe, но будет воспроизводиться с новой частотой. С MP4 вы должны увидеть новую частоту.