Extrahieren von Audioausschnitten aus einer MP3-Datei – unerwartete Ergebnisse

Extrahieren von Audioausschnitten aus einer MP3-Datei – unerwartete Ergebnisse

Ich versuche, Audioschnipsel mithilfe von Befehlszeilentools zu extrahieren. Ich erhalte konsistente, unerwartete Ergebnisse und glaube, dass dies an der Art und Weise liegt, wie die Audiodateien erstellt/codiert wurden.

Hinweis: Mir ist bewusst, dass es auch andere Ansätze zum Teilen der Inhalte gibt. Ich verwende diese Methode, um die Inhalte mit Benutzern zu teilen, die entweder nicht besonders computerkundig sind oder aufgrund einer geografischen Sperre keinen Zugriff auf die Rohinhalte haben.

Problembeschreibung/Reproduktionsschritte:

  • Ich beginne mit der Verwendungyt-dlpzum Herunterladen eines Podcasts, wieDieses hiermit diesem Befehl:
    yt-dlp -x --audio-format mp3 -o GQT_2012-10-14.mp3 https://www.bbc.co.uk/programmes/b01n6vnh

  • Die Datei wird heruntergeladen und korrekt abgespielt. Ich möchte einen Ausschnitt extrahieren, der bei 20:48 beginnt und 03:58 dauert, sodass er bei 24:46 endet.

  • Ich habe es zunächst versucht mitFFmpeg(Version 4.2.7-0ubuntu0.1 unter Ubuntu 20.04), mit diesem Befehl:
    ffmpeg -i "/home/user/GQT_2012-10-14.mp3" -ss 00:20:48 -t 00:03:58 GQT_2012-10-12_Snippet1.mp3
    Dadurch wird eine Datei generiert, die 3 Minuten und 58 Sekunden lang ist, die Startzeit entspricht jedoch 20:28 in der Originaldatei.

  • Dann habe ich versucht,Mp3Splt(Version 2.6.2 auf demselben Betriebssystem. Mir ist bewusst, dass dies eine alte Version ist), mit diesem Befehl:
    mp3splt "/home/user/GQT_2012-10-14.mp3" -o GQT_2012-10-12_Snippet1 20.48.00 24.46.00
    Dies generiert dieselbe Ausgabe, eine Datei mit der richtigen Länge, aber 20 Sekunden zu früh gegenüber der erwarteten Startzeit.

Da beide Befehlszeilentools dieselben Ergebnisse liefern, deutet dies darauf hin, dass das Problem an der Eingabedatei liegt. Ich habe versucht, sie mit zu überprüfen ffprobe. In der Ausgabe habe ich Folgendes gesehen: Duration: 00:43:00.09, start: 0.025057, bitrate: 141 kb/sIch interpretiere dies so, dass die Datei „markiert“ ist und 25 Millisekunden später beginnt. Sicherlich nicht 20 Sekunden.

Ich habe trotzdem versucht, dies auf Null zurückzusetzen, indem ich Variationen vondiese Antwort, ich war nicht erfolgreich.

Ich versuche, die Grundursache des Fehlers in den extrahierten Snippets zu verstehen und zu korrigieren.

Antwort1

Ich habe einige Tests mit der von Ihnen bereitgestellten Datei durchgeführt und bin davon überzeugt, dass Ihr ffmpeg-Befehl die Datei tatsächlich genau an der von Ihnen gewünschten Stelle schneidet.

Ich glaube, das eigentliche Problem ist hier dieSpielerzeigt beim Suchen den falschen Zeitstempel an (ich habe sowohl vlcals auch versucht mplayer, und sie scheinen sich ähnlich zu verhalten): Wenn ich vlcdie Datei von Anfang an abspielen lasse, ohne vorwärts zu suchen (ich habe es tatsächlich 20 Minuten lang im Hintergrund laufen lassen!), ist sie bei 20:48 genau an der gleichen Stelle, an der die von ffmpeg erzeugte Datei startet! Wenn ich stattdessen in die Wiedergabe starte vlcund vorwärts springe, wird diese Stelle stattdessen als 20:28 angezeigt! Ich vermute, dass die Suche auf diesen Playern einfach zum nächsten Keyframe springt (oder etwas Ähnliches? Ich bin mit den Interna des MP3-Formats nicht sehr vertraut) und die vergangene Zeit einfach anhand der Bitrate (die variabel ist) schätzt. Sie können diesen Effekt sehr gut vorführen, indem Sie VLC ausführen und gegen Ende suchen und sehen, wie VLC nach 43 Minuten weiterspielt (ich habe versucht, bei 42:42 zu suchen, und es wurde bis 43:08 gespielt).

Zusammenfassend lässt sich sagen, dass die Verwendung der von einem Player wie vlcoder angezeigten Zeitstempel mplayerkeine gute Option zu sein scheint, um das genaue Timing in einer MP3-Datei zu erhalten. Stattdessen können Sie ein Audiobearbeitungsprogramm wieaudacity, das die gesamte Datei am Anfang dekodiert, sodass die Zeitangaben hier genau sein sollten. Natürlich können Sie es auch für den Schnittteil verwenden, sodass Sie ffmpegin diesem Fall zunächst gar nichts benötigen.

verwandte Informationen