Ich habe ungefähr 70 mp4-Dateien und möchte die Audiodateien direkt extrahieren, ohne sie weiter zu transkodieren. Alle mp4-Dateien haben AAC-Audiodateien.
Ich verstehe, dass ich den folgenden Befehl verwenden kann, um die Audiodatei aus einer der mp4-Dateien zu extrahieren:
avconv -i "INPUT FILE" -map 0:1 -c:a copy "OUTPUT FILE"
Wie extrahiere ich alle Audiodateien aus allen 70 MP4-Dateien, sodass ich am Ende 70 AAC-Dateien habe?
bash /path/to/the/script %F
-map
kann dazu führen, dass das Video weiterhin betrachtet wird, wenn Sie in ein anderes Ausgabeformat wechseln (wenn dieses Format sowohl Audio als auch Video enthalten kann). Es ist sicherer, es so zu halten, wie es ist.Die Antwort von Xiao ist im Allgemeinen am nützlichsten, wenn Sie alle Dateien in einem Verzeichnis haben. Wenn sich jedoch MP4-Dateien in verschiedenen Verzeichnissen befinden, können Sie sie mit diesem
find
Befehl alle konvertieren.Dabei wird eine etwas andere Form der Bash-Zeichenfolgensubstitution am Ende verwendet: "$ {0 /% mp4 / m4a}" weist bash an, mp4 durch m4a zu ersetzen, jedoch nur, wenn sich mp4 am Ende der Zeichenfolge befindet.
quelle
%
erste Instanz der gefundenen Zeichenfolge ersetzt. Sie können auch festlegen#
, dass die Zeichenfolge nur ersetzt wird, wenn sie am Anfang einer Variablen steht. also würde $ {0 / mp4 / m4a} die erste Instanz von mp4 durch m4a ersetzen (was ein Problem sein könnte, wenn Sie wirklich seltsame Dateinamen haben); und $ {0 / # mp4 / m4a} ersetzt m4a durch mp4, jedoch nur dann, wenn der Zeichenfolgenwert der Variablen mit mp4 beginnt (hier wird er offensichtlich nicht verwendet, kann aber an anderer Stelle nützlich sein).Um zu vermeiden, dass mehrere Dateien gleichzeitig verarbeitet werden (was möglicherweise zu viele Ressourcen beansprucht), verwenden Sie
parallel
. Standardmäßig wird jeweils nur ein Job ausgeführt. Wenn Sie mehrere CPU-Kerne gleichzeitig verwenden möchten, versuchen Sie,parallel -j 4 ...
4 Jobs gleichzeitig auszuführen. Schau auch mal reinman parallel
.Diese Zeile extrahiert
aac
Audiodateien aus ausgewählten Videos und legt sie inm4a
Containern ab.Wenn Sie direkt in der CLI arbeiten, ersetzen Sie diese
%F
durch die Liste Ihrer Eingabedateien. Eg*.mp4
.Inspiriert von dieser Antwort, von einer früheren Antwort auf diese Frage und von Evilsoups Kommentar zu dieser Frage (mit den Worten: " RAW - AAC - Dateien dürfen keine Metadaten enthalten. Wenn Sie Metadaten aus den Originaldateien behalten möchten, verwenden Sie m4a (which ist nur ein anderer Name für mp4, wird aber von Audioplayern (anstelle von aac als Dateierweiterung ) ziemlich häufig erkannt .
Ich benutze solche Befehle in Thunar benutzerdefinierten Aktionen,
Beschränkung der Anwendung auf Videos, die
aac
Audio enthalten .Um während der Verarbeitung ein Terminalfenster zu öffnen, das am Ende geschlossen wird, kann der Befehl wie folgt geändert werden:
quelle
Ich habe die Antwort von @ Xiao-Long Chen erweitert und in ein Skript umgewandelt, das Dateien überspringt, wenn die Ausgabedatei neuer ist:
quelle