У меня есть каталог, содержащий файлы PNG 2001 года. Я могу преобразовать все кадры к mp4 видео с помощью FFmpeg и следующей командой:vframes опция игнорируется в ffmpeg?
ffmpeg -framerate 60 -start_number 0 \
-i pic.comp2.%07d.png -c:v libx264 -r 30 \
-pix_fmt yuv420p input1ia.mp4
Это прекрасно работает. Однако я создаю более сложное приложение, которое должно читать только первые 1020 файлов в каталоге (в частности, от 0 до 1019). Некоторые поисковые запросы привели меня к опции -vframes
. Моя проблема в том, что она проигнорирована или, по крайней мере, интерпретируется иначе, чем я ожидаю.
Моя модифицированная команда выглядит следующим образом:
ffmpeg -framerate 60 -start_number 0 \
-i pic.comp2.%07d.png -vframes 1020 -c:v libx264
-r 30 -pix_fmt yuv420p input1.mp4
Похоже, что многие другие люди делают то же самое, как и я не столкнуться с этой проблемой. Поэтому я сделал еще несколько копаний. Я попытался изменить vframes от 1020
до -vframes 20
, и это, казалось, работало правильно. Итак, теперь я думаю, что это может быть какое-то несоответствие между -framerate
и -r
?
полный результирующий видеоролик длится 33 секунды ... что имеет смысл математически.
1 sec
--------- x 2001 frames = 33.35 seconds
60 frames
Вот почему я думал, что определение ~ 1/2 в формате PNG в качестве «конечной точки» приведет к видео первых ~ 16-17 секунд. Но я всегда получаю полноразмерное видео с помощью опции -vframes
.
Я предполагаю, что мой ввод -vframes
должен быть ошибочным математически, так как работает небольшое количество кадров. Однако я не понимаю, почему.
Самое образованное предположение, которое я могу сделать, это то, что он читает PNG как 60fps (-framerate
), но -r
делает выходное видео 30fps или еще что-то? Однако, я бы предположил, что полное выходное видео не будет длиться 33 секунды.
Отлично! Я очень ценю вашу помощь! Это работало именно так, как я хотел. Кроме того, спасибо за подробное объяснение. Я бы не понял, откуда пришли 17. >. < – cooper