Wie entferne ich eine Audiospur aus einer mp4-Videodatei?


Antworten:


110

Führen Sie zunächst aus, ffmpeg -i file.mp4um festzustellen, welche Streams in Ihrer Datei vorhanden sind. Sie sollten so etwas sehen:

Stream #0.0: Video: mpeg4, yuv420p, 720x304 [PAR 1:1 DAR 45:19], 23.98 tbr, 23.98 tbn, 23.98 tbc
Stream #0.1: Audio: ac3, 48000 Hz, 5.1, s16, 384 kb/s
Stream #0.2: Audio: ac3, 48000 Hz, 5.1, s16, 384 kb/s

Führen Sie dann ffmpeg -i file.mp4 -map 0:0 -map 0:2 -acodec copy -vcodec copy new_file.mp4den Befehl aus, um den Videostream und den zweiten Audiostream zu kopieren new_file.mp4.


3
Unter Windows gab dieser Befehl den Fehler aus Option map (set input stream mapping) cannot be applied to input file file.mp4 new_file.mp4 -- you are trying to apply an input option to an output file or vice versa. Move this option before the file it belongs to.: Um ihn zu beheben, ändern Sie einfach die Reihenfolge der Argumente wie folgt:ffmpeg -i file.mp4 -map 0:0 -map 0:2 -acodec copy -vcodec copy new_file.mp4
MrLore

Gleicher Fehler wie @MrLore unter OS X.
Oskar Persson

1
Auf Ubuntu ist es genauso!
Tommaso

Funktioniert auch für das MKV-Format
user3405291

1
Sie können die allgemeinere Option verwenden , -c copyum identischen Streams für Audio, Video, sondern auch Untertitel: ffmpeg -i input.mp4 -map 0:0 -map 0:2 -c copy output.mp4.
Futal

97

Verwandte Probleme: So können Sie alle Audiotracks aus einer MP3-Datei entfernen :

ffmpeg -i input_file.mp4 -vcodec copy -an output_file.mp4

1
Das gibt mir den Fehler The encoder 'aac' is experimental but experimental codecs are not enabled, add '-strict -2' if you want to use it.Aber ich habe diese Flags hinzugefügt und es ist immer noch dasselbe ...?
Poshaughnessy


Re poshaughnessys Kommentar: Hier scheint es einige Informationen zu geben: stackoverflow.com/questions/32931685/… Die Diskussion deutet darauf hin, dass in neueren Versionen von ffmpeg das Problem "aac experimental" nicht auftritt . In der Regel hilft es, das Problem zu diagnostizieren, wenn Sie die Version der von Ihnen verwendeten Software und die genaue Syntax des Befehls (nachdem Sie die Flags hinzugefügt haben) angeben, der den Fehler verursacht hat (vgl. Freeseeks Antwort loc. Cit.). ). In diesem speziellen Fall können auch Videoinformationen aus der Eingabedatei hilfreich sein.
Greg Marks

8

Identifizieren Sie die Stream-Nummern:

$ ffmpeg -i in.mp4
   ...
   Stream #0:0: Video: ...
   Stream #0:1: Audio: ...
   Stream #0:2: Audio: ...

Verwenden -map _file_:_stream_Sie diese Option, um auszuwählen, welche Streams verarbeitet und ausgegeben werden sollen

$ ffmpeg -i in.mp4 -map 0:0 -map 0:2 -vcodec copy -acodec copy out.mp4

Siehe: https://ffmpeg.org/ffmpeg.html#Advanced-options


4

Sie können versuchen, avidemuxwelche Audiodatei nur intern verarbeitet (und Sie daher zwingen, eine bestimmte Spur auszuwählen). Ich habe es noch nie mit .mp4 versucht, aber es funktioniert mit anderen Formaten.


Funktioniert nicht so gut Vielleicht ist es ein Fehler, aber das Audio kommt verstümmelt zurück, obwohl es den Job macht (entfernen Sie den Rest der Audiospuren).
Tshepang

3

Ich habe mehrmals Avidemux (GUI) und ffmpeg (Konsole) verwendet.

In Avidemux wählen Sie im Hauptmenü "Audio" -> "Titel auswählen". Speichern Sie dann Ihr Video als neue Datei.

Interessanterweise lieferte Avidemux in einigen Fällen eine "bessere" Ausgabe als ffmpeg.

Für alle Fälle befinden sich Avidemux und ffmpeg im Standard-Fedora-Linux-Repository. (Ich bin sicher, dass sie auch in anderen Linux-Versionen Standard sind.)


1

-vnoder -anentfernt alle Video- oder Audiospuren. Durch die Bereitstellung -vn -acodec copywird das Video entfernt. -an -vcodec copyAlle Audiodaten werden entfernt.

-vcodec copyGibt an, dass ffmpeg eine direkte Kopie der vorhandenen Videospur erstellen soll (und keine Verarbeitung / Codierung vornehmen soll). Wenn Sie es nicht angeben, funktioniert es weiterhin, aber ffmpeg kann die vorhandene Videospur neu codieren und der Vorgang beansprucht mehr CPU und kann erheblich länger dauern.


0

Verwendung von Avidemux in der Befehlszeile.

(In der Avidemux-Benutzeroberfläche, wie oben unter https://unix.stackexchange.com/a/85834/4319 beschrieben , wählen Sie einfach die Audiospuren aus bzw. entfernen die Auswahl und speichern die Datei. (Alles wird in die neue AVI kopiert.)

Ich habe mir angesehen, welche Projekte für meine Aktionen als SpiderMonkey- oder TinyPy-Projekte gespeichert wurden, und es stellte sich heraus, dass das SpiderMonkey-Projekt (JavaScript) nicht über die erforderlichen Audiospurauswahlaktionen verfügt, das TinyPy-Projekt (Python) jedoch Sie.

Ich habe alles entfernt, was nichts damit zu tun hat (ein Dutzend nicht benötigter Zeilen), und dies habe ich in meinem some_series.py:

#PY  <- Needed to identify #
#--automatically built--

adm = Avidemux()

adm.audioClearTracks()
adm.audioAddTrack(1)

Es verlässt Spur 1, lässt aber Spur 0 fallen.

Dann habe ich eine Stapelkonvertierung vieler Dateien mit einem Befehl wie diesem ausgeführt:

for f in *.avi; do avidemux3_cli --nogui --load "$f" --run ../some_series.py --save ../some_series/"${f%%.rus.eng.avi}".eng.avi --quit; done

Es kopiert alles, löscht aber alle bis auf die benötigte Audiospur.

Die Möglichkeit, Avidemux von der Kommandozeile aus auszuführen, habe ich von https://www.avidemux.org/admWiki/doku.php?id=tutorial:batch_processing gelernt , obwohl dort nicht die Python-Skripte erwähnt werden, sondern nur die JS-Skripte ( was bei mir nicht funktioniert hat).


-1

Wenn Sie nichts dagegen haben, dass das Programm eine grafische Benutzeroberfläche ist , können Sie dies und vieles mehr mit dem Video-Editor von Blender tun.


-2

Das ffmpegProgramm wurde durch ersetzt avconv. avconvhat eine sehr ähnliche Verwendung wie ffmpeg, daher können alle Befehle in diesem Beitrag ungefähr so ​​lauten:

avconv <old ffpmeg command line options>

Folgen Sie diesem Link , um avconvUbuntu zu installieren .


-3

FFMPEG könnte eine hilfreiche Lösung für Sie sein.

$ man ffmpeg

Ich habe einen kurzen Blick darauf geworfen, und es ist ziemlich dicht. Ich suchte nach "Audio" und "Audiospur" und nichts schien offensichtlich.
Tshepang

@Tshepang, "track" ist mehrdeutig, weshalb das FFmpeg wahrscheinlich eine genauere Terminologie bevorzugt. FFmpeg betrachtet Audio als "Streams", die jeweils einen oder mehrere "Kanäle" umfassen. AFAICT, jeder Kanal ist mono, wobei der Stream beschreibt, an welche Ausgänge er standardmäßig gesendet (verschoben) werden soll. Beispielsweise besteht ein Stereostream aus zwei Kanälen, von denen einer standardmäßig an den linken Ausgang der Soundkarte und der andere standardmäßig an den rechten Ausgang der Soundkarte gesendet wird.
sampablokuper
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.