
Bei mir sind es ca. 100 Videos (Folgen einer Serie) zweimal.
- [avi] 720p Videoauflösung mit meinen bevorzugten Audiospuren
- [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 Sie1: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.