Skip to content

Instantly share code, notes, and snippets.

@TalusUnheil
Last active September 16, 2021 13:23
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save TalusUnheil/b0257191035c6d822ebba2aa1e4319aa to your computer and use it in GitHub Desktop.
Save TalusUnheil/b0257191035c6d822ebba2aa1e4319aa to your computer and use it in GitHub Desktop.
Podcasts von MP3 und Vorbis in OPUS transkodieren

Podcasts von MP3 und Vorbis in OPUS transkodieren

Podcasts werden derzeit häufig im MP3-Format in Stereo mit 128-192 kbit/s ausgeliefert (etwas seltener findet man auch das datensparsamere OGG/Vorbis Format).

Bei Podcasts kann(!) jedoch ein datensparsameres Mono-Signal ausreichen

  • und Opus ist (als Nachfolger von OGG/Vorbis) zur Zeit der effizienteste Codec in Bezug die Bandbreite und Speicherbedarf bei gleichbleibender Qualität. Da jedoch kaum Podcasts mit (zusätzlichen) Opus-Feeds angeboten werden (obwohl dies mit Auphonic sehr einfach möglich wäre), befasst sich dieser Beitrag mit der Transkodierung von MP3/Vorbis zu Opus (mono) unter Linux. Insbesondere jene Podcasts, welche man nicht nur einmalig hören (sondern dauerhaft archivieren) möchte, können auf diese Art Speicherplatz-schonend gesichert werden.

Podcatcher

Als Podcatcher werden in diesem Beispiel die Podcatcher "Rhythmbox" und "gPodder" behandelt; andere Podcatcher können aber ähnlich angepasst werden. Über Empfehlungen zu einem CLI-Podcatcher wäre ich sehr dankbar! ;-)

Werkzeuge (Tools)

Zum Transkodieren von MP3 und Vorbis zu Opus benötigt man MP3- und Vorbis-Dekoder, sowie den Opus-ENkoder.

sudo apt update && sudo apt install --yes lame vorbis-tools opus-tools # Falls noch nicht installiert: "rhythmbox" oder "gpodder" als Podcatcher ergänzen

Verzeichnisse und Dateien

In diesem Beispiel wird zunächst ein Verzeichnis für neue Podcasts angelegt:

mkdir -p ~/Audio/Podcasts

Der Podcatcher wird anschließend so konfiguriert, dass eben dieses Verzeichnis für den Download neuer Episoden genutzt wird. Der Podcatcher erstellt dabei für jeden Podcast-Feed einen eigenen Unterordner.

Downloadpfad in Rhythmbox ändern

Menüleiste -> Bearbeiten -> Einstellungen -> Reiter "Podcasts" -> Speicherort

Downloadpfad in gPodder ändern

Das Ändern des Speicherorts für heruntergeladene Episoden in gPodder erfolgt (leider etwas umständlich) über die Umgebungsvariable "GPODDER_DOWNLOAD_DIR" (Quelle)

In einer laufenden Sitzung kann gPodder direkt mit der entsprechenden Umgebungsvariable aufgerufen werden:

GPODDER_DOWNLOAD_DIR=$HOME/Audio/Podcasts gpodder

Für dauerhafte Verwendung der Umgebungsvariable nach jeder Anmeldung kann die ~/.profile-Datei entsprechend ergänzt werden:

echo "export GPODDER_DOWNLOAD_DIR=$HOME/Audio/Podcasts" >> ~/.profile

Hinweis: Die zweite Methode greift erst nach der nächste Anmeldung - also NICHT in der laufenden Sitzung!

Dateinamen in gPodder ändern

Das Umbenennen der Originaldateien (Dateinamen = Episodentitel) kann in gPodder wie folgt eingerichtet werden: Menüleiste -> gPodder -> Einstellungen -> Erweiterungen -> "Episoden nach dem Download umbenennen" -> aktivieren

Skripte

Die Umwandlung selbst erfolgt durch Bash-Skripte, welche zunächst erstellt werden müssen:

HINWEIS: Wenn man auf das Stereo-Signal nicht verzichten möchte, lässt man in den nachfolgenden Beispielen das --downmix-mono weg und erhöht die Bitrate auf 36 kbit/s (--bitrate 36). Weitere empfohlene Einstellungen findet man hier: https://wiki.xiph.org/index.php?title=Opus_Recommended_Settings

Skript für MP3-Dateien:

cat <<-"EOF" > ~/transcode_mp3_podcast.sh
#! /usr/bin/env bash
lame --decode "$1" - | opusenc --downmix-mono --bitrate 24 - "${1%.[Mm][Pp]3}".opus && rm "$1"
EOF

Skript für OGG/Vorbis-Dateien:

cat <<-"EOF" > ~/transcode_vorbis_podcast.sh
#! /usr/bin/env bash
oggdec "$1" --output - | opusenc --downmix-mono --bitrate 24 - "${1%.[Oo][Gg][GgAa]}".opus && rm "$1"
EOF

Anschließend müssen die Skripte noch ausführbar gemacht werden:

chmod +x ~/transcode_*_podcast.sh

rekursives Umwandeln

Um nun rekursiv alle Podcast-Episoden zu transkodieren, eignet sich find:

find ~/Audio/Podcasts -type f -name *.[Mm][Pp]3 -exec ~/transcode_mp3_podcast.sh {} \;
find ~/Audio/Podcasts -type f -name *.[Oo][Gg][GgAa] -exec ~/transcode_vorbis_podcast.sh {} \;

Das war's! Die Umwandlung benötigt zwar etwas Zeit, dafür ist das eingesparte Datenvolumen aber (prozentual) enorm. Würden doch nur alle Podcasterinnen und Podcaster direkt in Opus, mono, 24kbit kodierte Dateien ausliefern... ;)

Video-Podcasts

Mit dem CLI-Tool youtube-dl lassen sich auch Audiodateien im Opus-Format aus Video-Podcasts extrahieren:

youtube-dl --quiet --extract-audio --audio-format opus --audio-quality 0 --output "%(title)s.%(ext)s" $download_url

ToDos

  1. Die Übernahme der Metadaten aus dem RSS-Feed in die Opus-Dateien. Hierbei könnte ich Unterstützung gebrauchen!
  2. Das (optionale) verschieben der fertigen Dateien auf einen Netzwerkspeicher (NAS/Cloud) nach der Umwandlung (z.B. mittels rsync oder SFTP).
  3. Das Umwandeln von MP4/M4A-Dateien in Opus

Quellen

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment