Объединение файлов AVI с несколькими дорожками

2

У меня есть каталог файлов AVI, который я хотел бы объединить в один файл AVI. Эти файлы AVI поступают с видеорегистратора и содержат две видеодорожки - переднюю камеру и заднюю камеру.

Я пытался использовать предложение Вот объединить видео. В частности:

ffmpeg -f concat -i <(for f in $PWD/*.avi;do echo "file '$f'";done) -c copy output.avi

Это прекрасно работает для первой (передней) видео дорожки, но полностью удаляет вторую (заднюю) видео дорожку.

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

Erik
источник

Ответы:

1

По сути, вам нужно демультиплексировать каждый файл, а затем объединить полученные файлы. Есть способ сделать это с Конкат фильтр , но это требует перекодировки все, как оно идет.

Так что вам нужно сделать две операции. Во-первых, демультиплекс. (Обратите внимание, что это не проверялось с ffmpeg, так как у меня нет видео файлов для тестирования, но теоретически должно работать.)

I=0;J=1;for f in $PWD/*.avi;do ffmpeg -i "$f" -map 0:v:0 -codec copy output$I.avi -map 0:v:1 -codec copy output$J.avi && I=$(($I+1)) && J=$(($J+1));done

Затем вы можете использовать демоверсию concat как обычно:

ffmpeg -f concat -i <(for f in $PWD/*.avi;do echo "file '$f'";done) -c copy output.avi
tubedogg
источник
Это сработало отлично. Единственное изменение, которое я сделал: I = 0; J = 1; для f в $ PWD / *. Avi; выполните ffmpeg -i "$ f" -map 0: v: 0 -codec copy front $ I.avi -map 0: v: 1 -кодек копировать обратно $ J.avi & amp; & amp; I = $ (($ I + 1)) & amp; J = $ (($ J + 1)); выполняется, а затем соответствующее изменение имени файла в команде конкатенации. Я бы отредактировал, но у меня нет необходимой репутации. Спасибо!
Erik
1
Если вы сделаете это, вы можете потерять J=1; а также J=$(($J+1)); и изменить back$J.avi в back$I.avi - с разными именами выходных файлов число может быть одинаковым для обоих.
tubedogg
Правильно. Хорошее упрощение.
Erik