Wie kann ich einen Bruchteil einer Sekunde vom Anfang einer bereits verschlüsselten MP3-Datei abschneiden, ohne die MP3 erneut zu transcodieren?

471
JakeGould

Ich verwende macOS 10.3.6 (High Sierra) und während ich vor einiger Zeit eine 4-CD-Box mit Musik hatte, die Titel in MP3 rippte und die Dateien einfach auf meinem System ablegte. Ich musste manuell Metadaten hinzufügen und zu jedem der über 100 Tracks hinzufügen (nicht fragen), und ich habe auch die Original-CDs vor einiger Zeit (auch nicht fragen) losgelassen, sodass ich sie nicht leicht rippen kann Sie.

Hier ist also das Problem : Anscheinend fügte das MP3-Tool, das ich damals verwendete, einen Bruchteil eines zweiten "Pop" am Anfang jedes Tracks hinzu. Ich war mir damals nicht bewusst - oder nicht aufgepasst -, aber jeder der über 100 Tracks hat diesen nervigen Pop direkt am Anfang des Tracks.

Ich habe diesen Thread zu Stack Overflow gelesen: „ Klicken Sie auf Sound, wenn Sie LAME verwenden “ und wenn der Ratschlag solide ist, erkläre ich, wie manchmal LAME versehentlich den Header einer Audiodatei als reines Audio kodiert. Die Realität ist, dass die vorgestellten Lösungen mich dazu zwingen würden streamen Sie die bereits verschlüsselte MP3-Datei über etwas Ähnliches fseekund kodieren Sie die MP3-Datei (aka: transcode it) erneut, was alles andere als ideal ist.

Gibt es eine Möglichkeit, etwa 1/8 einer Sekunde dieser bereits codierten MP3s zu trimmen, um den „Pop“ zu beseitigen und die MP3s nicht zu transcodieren?

Ich suche speziell nach einer relativ einfachen MacOS-basierten Lösung, für die höchstens ein neues Tool (falls erforderlich) über Homebrew installiert werden muss. Nicht nach einem vollständigen Skript fragen, sondern mindestens einen Tool- und Konfigurations-Tipp, der mich in die richtige Richtung weist.

1

1 Antwort auf die Frage

2
JakeGould

Okay, ich habe es mit dem Zauber von FFmpeg (den ich bereits über Homebrew auf macOS installiert habe) gelöst. Insbesondere der -ss(aka: seek) -Parameter, gekoppelt mit der copyauf den Audiostream angewendeten Option, wirkt wie ein Zauber! Der Befehl lässt sich in diese hinein destillieren:

ffmpeg -ss 0.125 -i "input.mp3" -acodec copy "output.mp3" 

Das Einstellen von -ssbis 0.125und das einfache Festlegen von Ein- und Ausgaben mit einem copySatz auf das -acodecist alles, was getan werden muss.

Und da, wie in der Frage erläutert, in meinem Fall mehr als 100 Dateien vorliegen, habe ich ein einfaches Bash-Skript erstellt, das alle MP3s mit einem Achtel des Eröffnungsaudios enthält und in einem mp3/Unterverzeichnis ablegt . Hoffe das hilft jemand in einer ähnlichen Situation!

find -E "path/to/audio/files" -type f -iregex ".*\.(MP3)$" |\ while read full_audio_filepath do  # Break up the full audio filepath stuff into different directory and filename components. audio_dirname=$(dirname "$"); audio_basename=$(basename "$"); audio_filename="$";  # Set the MP3 directory. mp3_dirpath="$/mp3"; mp3_filepath="$/$.mp3";  # Create the child MP3 directory. mkdir -p "$";  # And here is where the magic happens. ffmpeg -y -v quiet -ss 0.125 -i "$full_audio_filepath" -acodec copy "$mp3_filepath" < /dev/null;  done 
Sie können dies vereinfachen (und es erheblich beschleunigen!), Indem Sie GNU `parallel` und rekursives Globbing mit Bash verwenden, dh,` shopt -s globstar` und dann `parallel 'ffmpeg -i {}… {//} / mp3 / ausführen. {/} "::: ** / *. mp3". Im [[parallel] -Tutorial] (https://www.gnu.org/software/parallel/parallel_tutorial.html) erfahren Sie, was diese Ersetzungszeichenfolgen (z. B. `{//}`) bedeuten. Verwenden Sie die Option "--dry-run" für "parallel", um anzuzeigen, was ausgeführt werden soll. slhck vor 5 Jahren 0
@slhck Guter Tipp! Um ehrlich zu sein, dieser Prozess war sehr schnell für meine Bedürfnisse. Das heißt, ich werde klarstellen, dass ich mich auf macOS 10.33.6 (High Sierra) befinde, aber ich möchte Sie dazu ermutigen, Ihre eigene Variante einer Antwort mit "parallel" zu posten. JakeGould vor 5 Jahren 0
Der Prozess ist zwar E / A-gebunden, da er eigentlich nichts kodiert. Ich wollte keine separate Antwort posten, da sich der Kern der Frage auf ffmpeg und nicht so sehr auf die Stapelverarbeitung bezieht. PS: Unter macOS können Sie GNU einfach über Homebrew parallel installieren ('brew install parallel'). slhck vor 5 Jahren 1
@slhck Danke für den Tipp! Werde untersuchen. JakeGould vor 5 Jahren 0