Я долгое время использовал скрипт, который выполняет конкатенацию для разных кодеков, используя сложные фильтры, как описано здесь.

Эта вики дает следующую примерную команду:

ffmpeg -i input1.mp4 -i input2.webm -i input3.mov \
-filter_complex "[0:v:0][0:a:0][1:v:0][1:a:0][2:v:0][2:a:0]concat=n=3:v=1:a=1[outv][outa]" \
-map "[outv]" -map "[outa]" output.mkv

Моя проблема в том, что если у вас есть много небольших клипов, которые нужно комбинировать таким образом, это масштабируется катастрофически.

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

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

Так что я ищу (примерно) что-то вроде скрипта входного файла. Я видел упоминания о демультиплексоре concat, который имеет нечто подобное, но я не могу понять, как это будет работать. Насколько я могу судить, это все бросит в один файл и сделает невозможным выполнение сложной комбинации сценариев фильтра. Не упоминать: ссылка на вики выше упоминает, что для всех файлов должен быть одинаковый кодек, временная база и т.д., Что не относится к моей ситуации.

Как мне избавиться от моих забот о длине командной строки и навсегда забыть о вещи, известной как ограничения символов командной строки?

1 ответ1

0

Один из подходов - снять ограничение. Это может работать в определенной степени.

Этот ответ говорит:

POSIX обозначает этот предел ARG_MAX и в системах, соответствующих POSIX, вы можете запросить его с помощью

$ getconf ARG_MAX    # Get argument limit in bytes

Например, на Cygwin это 32000, а на разных BSD и Linux-системах я использую его в диапазоне от 131072 до 2621440.

Значение в Cygwin относительно низкое (я подозреваю, что причиной могут быть некоторые ограничения Windows), но оно все равно в четыре раза выше, чем вы упомянули в 8000. Я не знаю значение ARG_MAX в подсистеме Windows для Linux.

Следующим шагом будет запуск ffmpeg на (возможно, виртуальном) Linux.

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