Verketten von AVI-Dateien mit mehreren Spuren

2

Ich habe ein Verzeichnis mit AVI-Dateien, die ich zu einer einzigen AVI-Datei zusammenfassen möchte. Diese AVI-Dateien stammen von einer Dashcam und haben zwei Videospuren - eine Frontkamera und eine Rückkamera.

Ich habe versucht, den Vorschlag hier zu verwenden, um die Videos zu kombinieren. Speziell:

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

Dies funktioniert hervorragend für die erste (vordere) Videospur, entfernt jedoch die zweite (hintere) Videospur vollständig.

Wie kann ich diese Dateien verketten und beide Videospuren beibehalten? Gibt es eine Möglichkeit, die zu verkettende Videospur anzugeben?

Erik
quelle

Antworten:

1

Grundsätzlich müssen Sie jede Datei demultiplexen und dann die resultierenden Dateien verketten. Es gibt eine Möglichkeit, dies mit dem Concat-Filter zu tun , aber es muss alles neu codiert werden.

Sie müssen also zwei Operationen ausführen. Erstens, Demultiplex. (Beachten Sie, dass dies mit ffmpeg nicht getestet wurde, da ich keine Videodateien zum Testen habe, aber theoretisch funktionieren sollte.)

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

Dann können Sie den concat-Demuxer wie gewohnt verwenden:

ffmpeg -f concat -i <(for f in $PWD/*.avi;do echo "file '$f'";done) -c copy output.avi
tubedogg
quelle
Das hat super geklappt. Die einzige Änderung, die ich vorgenommen habe, ist: I = 0; J = 1; für f in $ PWD / * .avi; mache ffmpeg -i "$ f" -map 0: v: 0 -codec kopiere front $ I.avi -map 0: v: 1 -codec kopiere zurück $ J.avi && I = $ (($ I + 1)) && J = $ (($ J + 1)); fertig und ändere dann einen entsprechenden Dateinamen zum Verkettungsbefehl. Ich würde bearbeiten, aber ich habe nicht den nötigen Ruf. Vielen Dank!
Erik
1
Wenn Sie das tun, können Sie verlieren J=1;und J=$(($J+1));und ändern back$J.avizu back$I.avi- mit verschiedenen Ausgabedateinamen kann die Anzahl der für beide gleich sein.
Tubedogg
Richtig. Schöne Vereinfachung.
Erik