GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux-Befehl zum Verketten von Audiodateien und deren Ausgabe an ogg

SoX kann eine große Anzahl von Audioformaten verarbeiten, je nachdem, mit welchen Bibliotheken es kompiliert wurde, und Dateien mit einer einfachen Befehlszeile verketten

sox file1.wav file2.mp3 file3.flac outfile.ogg

Ich glaube, das funktioniert nur, wenn die Quell-Audiodateien alle die gleiche Anzahl von Kanälen haben, aber ich habe das nicht getestet.

Soweit ich weiß, hat SoX keine Unterstützung für .wma-Dateien, daher ist es wahrscheinlich unvermeidlich, zumindest diese Dateien zuerst mit etwas wie ffmpeg zu konvertieren.

ffmpeg -i infile.wma outfile.wav

Hier ist mein Vorschlag:Verwenden Sie mplayer und oggenc verbunden mit einer Named Pipe.

  • Verwenden Sie mplayer um das Audio zu dekodieren. Es kann eine Vielzahl von Audio- (und Video-) Formaten wiedergeben, und es kann auch mehrere Dateien wiedergeben.

  • Verwenden Sie oggenc um das Audio in Ogg Vorbis zu kodieren.

  • Um die Notwendigkeit einer temporären Datei zu eliminieren, verwenden Sie eine Namedpipe, um die Daten zwischen Encoder und Decoder zu übertragen.

Das in ein Skript einbauen:

#!/bin/sh
# Usage: ./combine2ogg destination.ogg source1.wma source2.wma ...
# Requires: mplayer, oggenc
destination="$1"
shift
readpipe="$destination.tmpr"
writepipe="$destination.tmpw"
mkfifo "$readpipe"
mkfifo "$writepipe"
cat "$writepipe" > "$readpipe" &
mplayer -really-quiet -slave -nolirc -vc null -vo null -ao "pcm:fast:file=$writepipe" "[email protected]" &
oggenc --quiet -o "$destination" "$readpipe"
rm -f "$readpipe"
rm -f "$writepipe"

Erklärt:

  1. Nehmen Sie den Namen der Zieldatei aus dem ersten Befehlszeilenparameter.
  2. Entfernen Sie den ersten Befehlszeilenparameter und lassen Sie nur die Quelldateinamen übrig.
  3. Erstellen Sie einen Namen für eine Pipe, aus der oggenc lesen kann.
  4. Erstelle einen Namen für eine Pipe, in die mplayer schreiben kann
  5. Erstellen Sie die Rohre.
  6. Verwenden Sie cat, um die Writepipe kontinuierlich in die Readpipe zu verschieben (dies hilft, Probleme zu vermeiden, bei denen mplayer möglicherweise beendet wird, verhindert aber, dass oggenc denkt, dass es fertig ist, wenn dies passiert)
  7. Decodieren Sie das Audio aus den Quelldateien mit mplayer. Optionen -really-quiet -slave -nolirc sind da, um Nachrichten zu deaktivieren und es nicht von der Tastatur oder der Fernbedienung lesen zu lassen. Optionen -vc null -vo null sind da, um die Videocodierung und -ausgabe zu deaktivieren. Die -ao -Option weist es an, das Audio im WAV-Format an die benannte Write-Pipe auszugeben.
  8. Während der vorherige Befehl ausgeführt wird, kodieren Sie gleichzeitig von der benannten Lesepipe in Ogg mit oggenc.
  9. Entfernen Sie die benannten Pipes.

Was noch zu verbessern ist:Frühzeitiges Beenden des Skripts, wenn einer der Befehle fehlschlägt (verwenden Sie set -e ), aber das Fifo immer noch richtig aufräumen (die notwendigen Signale abfangen).


Ich würde ffmpeg verwenden. Um wma in ogg vorbis zu konvertieren, versuchen Sie:

ffmpeg -i sample.wma -acodec vorbis -aq 100 sample.ogg

oder mp3:

ffmpeg -i input.wma -acodec libmp3lame output.mp3

für die mp3-konvertierung muss lame installiert sein. sudo apt-get install lame libmp3lame0

Cat, then convert scheint nicht gut zu funktionieren, obwohl Sie viele Referenzen im Web finden können, die besagen, dass Sie so etwas wie cat *.wma | ffmpeg -i - -acodec ... tun können - das funktioniert auf meinem Rechner nicht - nur die erste Datei wird verarbeitet. Es gibt einen 'Copy'-Codec für ffmpeg, der aber keinen großen Unterschied macht.

Die Konvertierung zuerst mit ffmpeg durchzuführen, dann hat cat *.ogg> output.ogg für mich funktioniert.


Linux
  1. Finden Sie Dateien und Verzeichnisse unter Linux mit dem Befehl find

  2. Konvertieren Sie Audiodateien mit diesem vielseitigen Linux-Befehl

  3. Linux – In /dev/pts Dateien gespeichert und können wir sie öffnen?

  4. 10 Beispiele für DU-Befehle unter Linux (Festplattennutzungsgröße für Dateien und Ordner)

  5. mcopy-Befehl unter Linux

40 Einfacher und effektiver „lsof-Befehl“ im Linux-System

Cat-Befehl in Linux:Wesentliche und erweiterte Beispiele

Erklärt:Eingabe-, Ausgabe- und Fehlerumleitung in Linux

ls-Befehl unter Linux/UNIX

Linux-tar-Befehl zum Komprimieren und Extrahieren von Dateien

Linux SCP-Befehl zum sicheren Übertragen von Dateien