Antworten:
Führen Sie zunächst aus, ffmpeg -i file.mp4
um 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.mp4
den Befehl aus, um den Videostream und den zweiten Audiostream zu kopieren new_file.mp4
.
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
-c copy
um identischen Streams für Audio, Video, sondern auch Untertitel: ffmpeg -i input.mp4 -map 0:0 -map 0:2 -c copy output.mp4
.
Verwandte Probleme: So können Sie alle Audiotracks aus einer MP3-Datei entfernen :
ffmpeg -i input_file.mp4 -vcodec copy -an output_file.mp4
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 ...?
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
Sie können versuchen, avidemux
welche 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.
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.)
-vn
oder -an
entfernt alle Video- oder Audiospuren. Durch die Bereitstellung -vn -acodec copy
wird das Video entfernt. -an -vcodec copy
Alle Audiodaten werden entfernt.
-vcodec copy
Gibt 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.
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).
Das ffmpeg
Programm wurde durch ersetzt avconv
. avconv
hat 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 avconv
Ubuntu zu installieren .
FFMPEG könnte eine hilfreiche Lösung für Sie sein.
$ man ffmpeg