Держите FFmpeg работающим

335
Vincent Bavaro

Доброе утро, у меня есть скрипт, который генерирует 2 изображения в секунду в папке, и я хочу, чтобы ffmpeg преобразовал их в серию видео mpeg-4 продолжительностью 5 секунд и показывающих 2 изображения в секунду (всего 10 кадров). Проблема в том, что после того, как я запустил скрипт и после запуска ffmpeg, он обрабатывает видео с изображениями, которые он ловит, сразу после того, как я только запускаю команду, а затем закрывается. Я попытался с помощью команды -re, и ничего не происходит. Как мне продолжать работать с ffmpeg и конвертировать изображения в процессе их создания? Вот код, который я использую:

ffmpeg -re -framerate 2 -s 1920x1200 -i C:\Desktop\input\%05d.bmp -vcodec libx264 -pix_fmt yuv420p -map 0 -segment_time 5 -g 5 -sc_threshold 0 -force_key_frames "expr:gte(t,n_forced*5)" -f segment C:\Desktop\output\%05d.mp4 

Все, что я хочу, это выполнить ffmpeg один раз и позволить ему работать и закрываться только после завершения генерации.

0

2 ответа на вопрос

1
Gyan

Труба изображения. При чтении изображений из файлов ffmpeg идентифицирует последнее изображение в последовательности во время инициализации и считывает до этого изображения.

cat images | ffmpeg -f image2pipe -re -framerate 2 -i - -vcodec libx264 ... 

Изменить : Не удивительно, что кошка также устанавливает входной список при инициализации. Тем не менее, метод ниже работает для меня.

Пусть скрипт добавит новые изображения в файл BLOB-объектов

т.е. cat new-image >> all-images

пока вызов ffmpeg

ffmpeg -f image2pipe -re -framerate 2 -i all-images -vcodec libx264 ... 

Очень важно, чтобы скорость создания и добавления нового изображения была равна или превышала скорость чтения ffmpeg.

У меня есть Windows, кот не будет работать. Я пробовал с типом, но он тоже не работает. Vincent Bavaro 5 лет назад 0
Получите [gow] (https://github.com/bmatzelle/gow/wiki) и у вас будет кошка. Gyan 5 лет назад 0
получил gow, это дает мне эту ошибку: C: \ Desktop \ input \% 05d.bmp: нет такого файла или каталога Vincent Bavaro 5 лет назад 0
`cat * .bmp` работает здесь. Gyan 5 лет назад 0
это дает мне ту же ошибку. Может быть, я изменил свою команду неправильно? В основном теперь это выглядит так: cat * .bmp | ffmpeg -f image2pipe -re -framerate 2 -s 1920x1200 -i C: \ Рабочий стол \ input \% 05d.bmp ... Vincent Bavaro 5 лет назад 0
Команда ffmpeg должна быть такой, как показано в моем ответе. Gyan 5 лет назад 0
Это то, что происходит, когда я запускаю это `C: \ WINDOWS \ system32> cat * bmp | ffmpeg -f image2pipe -re -framerate 2 -i - -vcodec libx264 -vf fps = 2 -pix_fmt yuv420p -map 0 -segment_time 5 -g 5 -sc_threshold 0 -force_key_frames "expr: gte (t, n_forced * 5)" - f сегмент C: \ Desktop \ output \% 05d.mp4 cat: * bmp: неверный аргумент` и `pipe :: End of file` в конце. Vincent Bavaro 5 лет назад 0
Это `кошка * .bmp` Запомни точку. Gyan 5 лет назад 0
то же сообщение об ошибке, cat: * .bmp: неверный аргумент. Нужно ли мне устанавливать новую папку? Как мог FFmpeg знать исходный путь без моего указания? Vincent Bavaro 5 лет назад 0
Подождите минуту. Почему вы используете cat из C: \ Windows \ system32? Gyan 5 лет назад 0
Потому что руководство по gow подсказало мне нормально запускать командную строку, и команды должны были быть добавлены в нее ... Vincent Bavaro 5 лет назад 0
перейдите к C: \ Desktop \ input \ и запустите его там. Gyan 5 лет назад 0
Я попробовал это там, это не дает мне ошибки, но это ведет себя как без трубы. FFmpeg перестает работать, пока скрипты генерируют изображения. Кроме того, теперь в сгенерированных видео будут не мои изображения, а только сгенерированные неправильно серые изображения со случайными черными рамками. Vincent Bavaro 5 лет назад 0
0
harrymc

Чтобы ffmpeg получал добавленные новые изображения, он должен получать их из stdin. Вам нужно будет написать программу или сценарий, который будет снабжать его новыми изображениями по мере их поступления.

Для примеров см .:

Этим программам потребуются некоторые изменения, чтобы они соответствовали вашим потребностям, но они являются хорошей отправной точкой.

Я попробую их, но мне бы понравилось встроенное решение ffmpeg, потому что добавление файлов в stdin замедлит процесс. Я думал, что команда -re должна была работать так? Vincent Bavaro 5 лет назад 0

Похожие вопросы