Ich habe etwas für Videos gefunden, das so aussieht.
ffmpeg -i * -c:v libx264 -crf 22 -map 0 -segment_time 1 -g 1 -sc_threshold 0 -force_key_frames "expr:gte(t,n_forced*9)" -f segment output%03d.mp4
Ich habe versucht, das für eine Audiodatei zu verwenden, aber nur die erste Audiodatei enthielt das eigentliche Audio, die anderen waren still, abgesehen davon, dass es gut war, es wurde jede Sekunde eine neue Audiodatei erstellt. Weiß jemand, was zu ändern ist, damit dies mit Audiodateien oder einem anderen Befehl funktioniert, der dasselbe tun kann?
Antworten:
Das hat bei mir funktioniert, als ich es mit einer MP3-Datei ausprobiert habe.
Wo
-segment_time
ist die gewünschte Zeit pro Datei (in Sekunden)?Verweise
quelle
mp3
durchm4a
Mit dem folgenden Befehl können Sie eine große Audiodatei in mehrere Spuren unterschiedlicher Länge aufteilen:
Ich habe beispielsweise eine einzelne .opus-Datei des Inception Original-Soundtracks mit der folgenden Textdatei in Unterdateien aufgeteilt, die Start, Ende und Namen enthält:
Ich habe dieses kurze
awk
Programm geschrieben, um die Textdatei zu lesen undffmpeg
Befehle aus jeder Zeile zu erstellen :Hier ist eine detailliertere
python
Version des aufgerufenen Programmssplit.py
, in der nun sowohl die ursprüngliche Spurdatei als auch die Textdatei, die die Unterspuren angibt, von der Befehlszeile aus gelesen werden:Sie können auf einfache Weise immer kompliziertere
ffmpeg
Aufrufe erstellen, indem Sie die Befehlsvorlage ändern und / oder jeder Zeile der Datei track_list weitere Felder hinzufügen.quelle
subprocess.call(command)
ist daspython
Analogon zusystem(command)
inawk
. In beiden Fällen können Sieffmpeg
Befehle an die Shell senden . Ich habe meinen Beitrag so bearbeitet, dass er eine flexiblepython
Implementierung enthält, die zeigt, wie Sie dies tun können.echo
, um die Befehle tatsächlich auszuführen.source="source audio file.m4a"; i=0; t1=0:00; for end_time in 1:24 5:40 14:48 19:33 35:11 40:00 46:08 51:58 ''; do i=$((i+1)); t0=$t1 t1=$end_time; echo ffmpeg -i "$source" -acodec copy -ss $t0 ${t1:+-to} $t1 $(printf "track%02d.%s" $i ${source##*.}); done
In der folgenden Zeile wird eine Audiodatei in mehrere Dateien mit einer Dauer von jeweils 30 Sekunden aufgeteilt.
Ändern Sie 30 (das ist die Anzahl der Sekunden) in eine beliebige Zahl.
quelle
slms antwort :
würde nicht für mich arbeiten, ohne die
-map 0
hinzugefügt:quelle
Die angegebene Lösung hat bei mir nicht funktioniert. Ich glaube, dass dies auf eine ältere Version von
ffmpeg
auf meinem System zurückzuführen ist.Auf jeden Fall wollte ich eine Lösung anbieten , die für mich funktioniert. Sie können die Timer auch so anpassen, dass sich die Audiodaten bei Bedarf überlappen.
Output file #0 does not contain any stream
ffmpeg -i your_audio_file.mp3 -acodec copy -t 00:00:30 -ss 00:00:00 split_audio_file.mp3
Teilen Sie Ihre Audiodateien in 30-Sekunden-Schritten auf
quelle