Ich stand vor dem Problem, eine bearbeitete Audiodatei mit der ursprünglichen Audiospur einer Videodatei (mp4) auszutauschen. Da ich nur die Audiodatei verändert hatte, wollte ich nicht das Video neu kodieren und so Gefahr laufen, die Qualität zu verändern, oder unnötig die Videodatei zu vergrößern.
Im Prinzip ist es ganz einfach (unter Linux): ffmpeg
Update: Es gibt eine einfachere Variante die Audiodateien auszutauschen mit dem Tool LossLessCut https://github.com/mifi/lossless-cut das noch wesentlich mehr Optionen bietet.
Was ist drin
Um den Inhalt einer Videodatei zu verändern, sollte erst geschaut werden, was da überhaupt drin ist. Das erledigt der Befehl:
ffprobe INPUTVIDEO.mp4
ffprobe ist ein Analyseproramm und bei ffmpeg standardmäßig mit dabei.
Entfernen
Das Entfernen einer oder mehrerer Audiospuren funktioniert mit folgendem Befehl
ffmpeg -i InputVideo.mp4 -map 0 -map -0:a:0 -codec copy OutputVideo_EINS.mp4
-map 0
wählt alle (Video/Audio) Spuren aus
-0:a:0
wählt aus allen Spuren die Audiospur Nummer 1 (Zählweise ab 0) aus
-codec copy
definiert, dass keine Neukodierung stattfindet
Will man alle Audiospuren aus dem Video entfernen, so gilt abgekürzt
-0:a
wählt alle Audiospuren aus
Zur Auswahl stehen nicht nur a (Audiospuren), sondern auch v (Videospuren), s (Sub-/Untertitel), d (Datenspuren).
Hinzufügen
Das Hinzufügen einer oder mehrerer Audiospuren (zum vorherigen Beispiel) funktioniert mit folgendem Befehl
ffmpeg -i OutputVideo_EINS.mp4 -i Audiospur.m4a -codec copy -shortest OutputVideo_ZWEI.mp4
-i
steuert, was in die Datei aufgenommen werden soll. Hier 1 Video- und 1 Audiospur
-codec copy
definiert, dass keine Neukodierung stattfindet
-shortest
kürzt alles auf die Länge der Datei mit der kürzesten Dauer
Zweite Spur hinzufügen
Wenn eine zweite Spur hinzugefügt werden muss, dann sollte darauf geachtet werden, dass die zweite Spur genau gleich lang ist, wie die erste Spur!
ffmpeg -i INPUTVIDEO.mp4 -i INPUTAUDIO.aac -map 0 -map 1 -metadata:s:a:1 title="MEIN TITEL DER AUDIOSPUR" -codec copy OUTPUTVIDEO.mp4
Extrahieren
Das Extrahieren einer Audiospur im Originalformat funktioniert folgendermaßen
ffprobe Name_der_Video_Datei
Als Ausgabe erhält man eine lange Ausgabe und zum Schluss findet man so etwas in dieser Art
Input #0, matroska,webm, from 'MeinVideo.webm':
Metadata:
ENCODER : Lavf58.20.100
Duration: 03:59:10.04, start: -0.007000, bitrate: 2285 kb/s
Stream #0:0(eng): Video: vp9 (Profile 0), yuv420p(tv, bt709), 3840x2160, SAR 1:1 DAR 16:9, 59.94 fps, 59.94 tbr, 1k tbn, 1k tbc (default)
Metadata:
DURATION : 03:59:10.019000000
Stream #0:1(eng): Audio: opus, 48000 Hz, stereo, fltp (default)
Metadata:
DURATION : 03:59:10.041000000
In diesem Falle handelt es sich bei Stream #0:1 Audio: opus um ein Ogg Vorbis Audio, das man in ein .ogg oder .oga abspeichern kann mit folgendem Befehl
ffmpeg -i MeinVideo.webm -map 0:a:0 -c copy MeinAudio.oga
In diesem Fall wird einfach die Audiodatei ohne ein neues konvertieren aus der Videodatei herauskopiert und liegt dann als MeinAudio.oga im Dateisystem.
Extrahieren und Konvertieren
Das Extrahieren und Konvertieren einer Audiospur in ein anderes Audioformat z.B. WAV geht sogar noch einfacher
ffmpeg -i MeinVideo.webm MeinAudio.wav
Bei komprimierten Audioformaten müssen natürlich noch ein paar mehr Parameter zur Steuerung der Qualität angegeben werden.
Views: 35