1

Я запускаю веб-приложение, которое использует ffmpeg для преобразования изображения + аудио в видео, и иногда кто-то загружает что-то, что заставит ffmpeg работать вечно на 100% ЦП, пока весь диск не будет заполнен.

Это происходит, когда кто-то загружает какой-то поврежденный или странный файл, или недавно мне удалось поймать, что это также происходит, когда вместо аудио есть изображение (нужно что-то сделать с -loop)

ffmpeg -loop 1 -r 1 -i image.jpg -i image2.jpg -vcodec libx264 -acodec copy -xerror -preset ultrafast -r 1 -shortest out.mp4

Я знаю, что могу подтвердить ввод пользователя, но этого не должно быть. Какой запрос ffmpeg предотвратит это, но также предоставит идентичный файл?

Я попытался добавить -stimeout или -timeout, но это не сработало.

1 ответ1

1

В данной команде

ffmpeg -loop 1 -r 1 -i image.jpg -i image2.jpg -vcodec libx264 -acodec copy -xerror -preset ultrafast -r 1 -shortest out.mp4

поскольку назначения карт не выполняются, ffmpeg отображает первый видеовход на выход. Так как опция цикла была установлена, это бесконечный поток. -shortest имеет никакого эффекта, поскольку 2-е изображение не отображается автоматически, поэтому его продолжительность (0,04 с) не имеет значения.

Обходной путь - добавить конечный фиктивный аудиопоток, созданный так: - ffmpeg -f lavfi -t 1 -i anullsrc=cl=mono dummy.m4a

ffmpeg -loop 1 -r 1 -i image.jpg -i image2.jpg -i dummy.m4a -vcodec libx264 -acodec copy -xerror -preset ultrafast -r 1 -shortest out.mp4

Это не решит проблему «странных» файлов.


Также есть -timelimit seconds например -timelimit 600 чтобы выйти из ffmpeg через 10 минут. Тем не менее, здесь используются системные вызовы setrlimit и AFAICT, которые изначально недоступны в Windows, поэтому я не могу сейчас их протестировать.

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