Audiospuren effizient von AVI zu MP4 zusammenfügen

Audiospuren effizient von AVI zu MP4 zusammenfügen

Bei mir sind es ca. 100 Videos (Folgen einer Serie) zweimal.

  1. [avi] 720p Videoauflösung mit meinen bevorzugten Audiospuren
  2. [mp4] 1080p, aber die falsche Sprache

Natürlich hätte ich gernegutes Video mit meiner bevorzugten Sprache. Aber wenn es möglich ist, würde ich gerne beide Audiooptionen beibehalten.

Ich habe versucht, sie manuell mit einem MP4-Joiner (GUI für mp4box) zusammenzufügen, aber das dauert ewig. Ich würde mich über Vorschläge zur Automatisierung und Optimierung dieses Vorgangs freuen.

Antwort1

Das geht ganz einfach mitffmpeg(Laden Sie einen statischen Build herunter) wie folgt:

ffmpeg -i input.mp4 -i input.avi -c copy -map 0:v:0 -map 1:a output.mp4

Dieser WilleKartedie folgenden Streams in die Ausgabedatei:

  • der erste Videokanal des ersten Eingangs ( 0:v:0)
  • die Audiokanäle des zweiten Eingangs ( 1:a) – wenn Sie nur den ersten möchten, verwenden Sie 1:a:0, usw.

Die Video- und Audio-Streams werden kopiert, daher ist dieser Vorgang schnell.

Inkompatibles Audio

Falls die AVI-Datei MP3 für Audiostreams verwendet, können diese nicht in eine MP4-Datei umgewandelt werden. Verwenden Sie in diesem Fall:

ffmpeg -i input.mp4 -i input.avi -c:v copy -c:a aac -b:a 192k -map 0:v:0 -map 1:a output.mp4

Dadurch werden die Audiostreams mit AAC bei 192 kBit/s neu kodiert. Die Qualität sollte hoch genug sein, damit Sie keine Artefakte durch die Neukodierung bemerken.

Oder Sie können MKV als Ausgabecontainer verwenden, das praktisch jeden Codec unterstützt:

ffmpeg -i input.mp4 -i input.avi -c copy -map 0:v:0 -map 1:a output.mkv

So führen Sie eine Batchausführung aus

Sie können diesen Befehl natürlich in einer Schleife verwenden, um ihn auf alle Dateien anzuwenden, z. B. unter Linux mit Bash, vorausgesetzt, dass die MP4- und AVI-Dateien denselben Basisnamen haben und dass Sie ihn nur einmal ausführen (sonst versucht er, auch seine Ausgabedateien zu konvertieren):

for f in *.mp4; do
    aviFile="${f%%.mp4}.avi" # replace the extension
    outputFile="${f%%.mp4}-output.mp4" # create output filename
    ffmpeg -i "$f" -i "$aviFile" -c copy -map 0:v:0 -map 1:a "$outputFile"
done

Sie finden online zahlreiche Beispiele zum Ausführen eines Befehls in einer Windows-Batchdatei-Schleife.

verwandte Informationen