ffmpeg объединяет большое количество видео с разными кодеками и разрешениями - PullRequest
1 голос
/ 09 января 2020

Видео, которые я пытаюсь объединить, может иметь разные технические метаданные, например, код c, разрешение и т. Д. c. Поэтому я написал фильтр-граф, который работает для моих целей. Моя полная команда может выглядеть так:

ffmpeg -i "vid1.mp4" -i "vid2.mp4" -i "vid3.mp4" -filter_complex_script "filtergraph.txt" -map "[outv]" -map "[outa]" -c:v libx264 -r 60 -preset medium -crf 24 -c:a aac -b:a 160k "output.mp4"

И «filtergraph.txt» выглядит так (автоматически генерируется моим собственным сценарием ранее). У меня есть фильтры, чтобы изменить все входные разрешения на Full HD. (Новые строки в следующем фрагменте просто представлены для удобства чтения, они не содержатся в моем файле filtergraph.txt)

[0:v]scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,setsar=1[v0];
[1:v]scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,setsar=1[v1];
[2:v]scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,setsar=1[v2];
[v0][0:a][v1][1:a][v2][2:a]concat=n=3:v=1:a=1[outv][outa]

Теперь в этом случае все работает, у меня есть три исходных видео, они могут иметь разные разрешения, кодеки или даже разные частоты кадров - все они объединены в одно выходное видео Full HD 60 FPS.

Проблема в том, что я хочу объединить большое количество видеофайлов и получить ошибку, что команда содержит слишком много символов для cmd. Вот почему я уже поместил граф фильтра в отдельный файл и прочитал его, используя -filter_complex_script, который работает.

Но он все равно может быть слишком длинным, если у меня есть несколько сотен исходных файлов, которые я хочу объединить.

Насколько я тестировал, я не могу использовать -f concat -i listOfFiles.txt, потому что каждый исходный файл должен быть в том же коде c, тогда разрешение et c, и я не мог использовать фильтр графа для масштабирования из-за того, что ffmpeg попытается выполнить конкататацию до того, как демодулированный вывод войдет в фильтр.

Итак, как мне объединить сотни видео при изменении их размера в Full HD и применении других фильтров, но сохранить короткая строка cmd?

Есть ли что-то похожее на -filter_complex_script, но для входных файлов? Или мне придется сначала закодировать каждое исходное видео в нужный формат, а затем объединить его с потоковой копией?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...