Website-Suche

So konvertieren Sie Musikdateien stapelweise mit FFMpeg


FFMpeg ist der Kern einer Vielzahl von Multimedia-Dienstprogrammen, aber das Dienstprogramm selbst ist nicht in der Lage, mehrere Dateien gleichzeitig zu konvertieren. Glücklicherweise ist FFMpeg skriptfähig, und Sie können mit Bash schnell etwas einrichten.

In diesem Tutorial lernen Sie:

  • So richten Sie Ihre Variablen ein
  • So konstruieren Sie die Schleife
  • So entfernen Sie die Dateinamen
  • Wie man alles zusammenfügt und ausführt

Batch-Konvertierung von Audiodateien mit FFMPEG.

Verwendete Softwareanforderungen und Konventionen

KategorieAnforderungen, Konventionen oder verwendete Softwareversion
SystemBeliebige Distribution mit FFMpeg
SoftwareFFMpeg
AnderePrivilegierter Zugriff auf Ihr Linux-System als root oder über den Befehl sudo.
  1. Einrichten Ihrer Variablen

    Die einzige wirkliche Möglichkeit, Batch-Dateikonvertierungen mit FFMpeg zu handhaben, ist über ein Bash-Skript. Es muss nicht super komplex oder detailliert sein, aber Sie können, wenn Sie dieses Ding mögen, wirklich detailliert damit werden. Dieser Leitfaden wird mit etwas viel Einfacherem arbeiten, das die Arbeit erledigt.

    Erstellen Sie zunächst eine Datei für Ihr Skript.

    touch ffmpeg-batch.sh

    Öffnen Sie es als Nächstes mit Ihrem bevorzugten Texteditor und richten Sie es als Bash-Skript ein.

    #! /bin/bash

    Dieses Skript verwendet eine Reihe von Variablen für Dateipfade, Erweiterungen und FFMpeg-Optionen. Auf diese Weise ist es flexibel genug, dass Sie es an verschiedene Orte übergeben und Ihre Dateiformate nach und nach auswählen können.

    Es gibt fünf Variablen, die Sie benötigen. Sie benötigen jeweils einen für das Eingabeverzeichnis und das Ausgabeverzeichnis. Dann benötigen Sie einen Satz für die Eingabedateierweiterung und einen weiteren für die Ausgabeerweiterung. Schließlich können Sie eine erstellen, die ein allgemeiner Auffangpunkt für Ihre Conversion-Optionen ist. Insgesamt sollte es in etwa so aussehen:

    srcExt=$1
    destExt=$2
    
    srcDir=$3
    destDir=$4
    
    opts=$5

    Wenn Sie es ändern möchten, machen Sie weiter. Die Erweiterungen sind notwendig, anstatt sie einfach aus der Datei zu ziehen, da ein Ordner mehr als einen Dateityp enthalten kann. Wenn Sie lieber davon ausgehen möchten, dass es nur einen Dateityp in einem Ordner gibt, können Sie das Skript so ändern, dass es auf diese Weise funktioniert.

  2. Konstruieren der Schleife

    Alles in diesem Skript geschieht durch eine einfache fore-Schleife. Es wird über jede Datei mit der angegebenen Erweiterung im angegebenen Verzeichnis iteriert.

    for filename in "$srcDir"/*.$srcExt; do
    
    done
  3. Entfernen Sie die Dateinamen

    Um das Skript wirklich anpassungsfähig zu machen, müssen Sie die Pfade und Erweiterungen jeder Datei entfernen, um den Dateinamen so zu erhalten, wie er ist. Auf diese Weise ist das Skript in der Lage, die neu konvertierten Dateien mit identischen Namen zu exportieren, sodass Sie Dateien nicht einzeln angeben oder umbenennen müssen.

    Entfernen Sie zunächst die Erweiterung, und weisen Sie sie einer neuen Variablen zu.

    for filename in "$srcDir"/*.$srcExt; do

    Entfernen Sie dann den Pfad aus dem Dateinamen.

    baseName=${basePath##*/}

    Sie können versuchen, das Ergebnis zu wiederholen, um zu sehen, was Sie erhalten. Es sollte nur der Dateiname selbst sein.

    echo $baseName
  4. Alles zusammenfügen und loslegen

    Sie sind endlich bereit, die echte Arbeit von FFmpeg hinzuzufügen. Dieser Teil ist im Wesentlichen nur ein einfacher Aufruf von FFMpeg, arbeitet jedoch mit Ihren Variablen anstelle von literalen Dateinamen. Geben Sie FFMpeg den vollständigen Dateinamen mit dem Pfad als Eingabe. Erstellen Sie dann die Ausgabe mit dem Zielverzeichnis, dem abgespeckten Dateinamen und der Zieldateierweiterung. Fügen Sie Ihre Optionen dazwischen hinzu. Die Anführungszeichen sind notwendig, damit Bash jede Variable als Zeichenfolge behandelt.

    ffmpeg -i "$filename" $opts "$destDir"/"$baseName"."$destExt"

    Sie können nach der Schleife eine Meldung hinzufügen, die bestätigt, dass die Dateien erfolgreich konvertiert wurden. Insgesamt sollte Ihr Skript in etwa so aussehen:

    #! /bin/bash
    
    srcExt=$1
    destExt=$2
    
    srcDir=$3
    destDir=$4
    
    opts=$5
    
    for filename in "$srcDir"/*.$srcExt; do
    
            basePath=${filename%.*}
            baseName=${basePath##*/}
    
            ffmpeg -i "$filename" $opts "$destDir"/"$baseName"."$destExt"
    
    done
    
    echo "Conversion from ${srcExt} to ${destExt} complete!"

    Es ist nicht viel dran, aber das Skript reicht aus, um die meisten Situationen zu bewältigen. Wenn Sie es nun ausführen, würde es in etwa so aussehen:

    ./ffmpeg-batch.sh flac mp3 /home/username/Music/'Led Zeppelin'/'Led Zeppelin'/ /home/username/Music/'Led Zeppelin MP3'/ "-ab 320k"

Schlussfolgerung

Sobald Sie sich daran gewöhnt haben, kann selbst so etwas eine äußerst nützliche Möglichkeit sein, Ihre Audio- und sogar Videodateien zu verwalten. FFMpeg ist ein hervorragendes Werkzeug, und wenn Sie Minimalismus bevorzugen, können Sie mit einem einzigen Zeilenbefehl das gleiche Ergebnis wie ein aufgeblähtes grafisches Programm erzielen.

Verwandte Artikel: