Erste Sekunden von MP3s wegschneiden

Bei vielen meiner Hörspiele wird in den ersten Sekunden auf den Youtube Kanal hingewiesen. Erst danach startet das eigentliche Hörspiel. Um nun nicht jede einzelne Datei manuell schneiden zu müssen, habe ich mir ein kleines Python Skript dafür erstellt:
(Voraussetzung ist ffmpeg)

#!/usr/bin/env python3
import os, subprocess

fileDir = "C:/temp/Bibi/"
fileExt = ".mp3"
cuttime = "13"

for file in os.listdir(fileDir):
  if file.endswith(fileExt):
    inputFile = fileDir + file
    outputFile = fileDir + "CUT_" + file
    subprocess.call([ 'ffmpeg', '-ss', cuttime, '-i', inputFile, '-map', '0', '-c', 'copy', outputFile])

Ich habe noch kein Skript dazu im Forum gefunden. Vielleicht kanns ja der ein oder andere gebrauchen.

4 Like

Ich nutze für soetwas die freie Software Audacity, mit der geht aber noch viel mehr. Die ist für viel Betriebssysteme kostenfrei erhältlich und einfach gut.

Ich denke @Begbie ging es hier mehr um die Batchfunktion… du willst ja nicht dutzende Dateien manuell in Audacity öffnen.

Du hast doch für jede Datei eine andere Vorlaufzeit , die du ermitteln mußt. Das mache ich ja mit der Software und schneide das Stück direkt weg. Kann dann sogar wie bei 1000 gleich anfangenden Connis auch einen Titel einsprechen und vorne vorhängen.
Ich weiß auch dafür gibt es Batchfunktionen.
Und ich finde es gut wenn @Begbie das hier teilt.

Nicht unbedingt. Wenn man 50 Folgen Bibi Blocksberg von dem YouTube Kanal geladen hat, dann haben die eigentlich immer den selben Hinweis auf den Kanal am Anfang… darum ging es hier ja.
Kann Audacity das auch, also bei 50 Dateien auf einmal 10s am Anfang abschneiden? Wäre ja eigentlich super.

Es soll auch einen Stapelverarbeitungsmodus geben, Macros und Scipting in python oder Perl auch, habe aber noch nie in der Richtung gesucht, da ich die Hörbücher immer einzeln bearbeitet habe.

Ich habe genau für den gleichen Zweck ein Bash Skript geschrieben. Damit kann man von vorne und hinten die angegebenen Sekunden abschneiden.

#!/bin/bash

output_dir=output
mkdir -p "$output_dir"
for f in *.mp3; do
    cut_duration_start=6.5
    cut_duration_end=28
    input_duration=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$f")
    output_duration=$(bc <<< "$input_duration"-"$cut_duration_end")
    ffmpeg -i "$f" -map 0 -c copy -ss $cut_duration_start -t "$output_duration" "$output_dir/$f"
done