Wiederholen Sie die Audiodatei auf eine bestimmte Länge

5962
Tomcatus

Ich stehe derzeit vor einem Problem, bei dem ich einige mp3-Dateien nehmen und eine andere mp3-Datei erstellen muss, bei der die erste eine bestimmte Zeit lang abgespielt wird, wenn nötig in einer Schleife. Ich suche vorzugsweise nach einer Befehlszeilenlösung. Versuchte ffmpeg und sox, konnte aber keine Lösung mit ihnen finden. Nun suche ich nach Optionen.

Eine weitere Erklärung: Nehmen wir an, ich habe eine Datei foo.mp3, ich muss eine bar.mp3-Datei erstellen, die eine bestimmte Länge hat, sagen wir 30 Sekunden und die Datei foo.mp3 enthält, und wenn foo.mp3 kürzer als 30 ist Sekunden wird es so oft geschlungen, dass es die gesamten 30 Sekunden ausfüllt. Ich hoffe jetzt ist klar was ich verlange.

2
Können Sie Ihre Frage klären? Mir ist nicht klar, was Sie fragen. Sun vor 9 Jahren 0
Beachten Sie, dass die Option `ffmpeg` nur mit Bildern funktioniert. Das Schleifen von Audio / Video ist eine Anforderung zum Öffnen von Features (https://trac.ffmpeg.org/ticket/2584). slhck vor 9 Jahren 0
Die Option -stream_loop für ffmpeg existiert seit dbb03b8e, wie oben unter https://trac.ffmpeg.org/ticket/2584 angegeben. jamadagni vor 5 Jahren 0

1 Antwort auf die Frage

4
Eugen Rieck

ffmpeg kann das für Sie tun, aber Sie benötigen möglicherweise zwei Schritte

Optional Schritt 1: Länge der Originaldatei ermitteln

ffmpeg -i '/path/to/original.mp3' 2>&1 | grep 'Duration :' 

Nun können Sie die Anzahl der erforderlichen Wiederholungen berechnen. Als Alternative können Sie einfach eine "sichere" Anzahl von Wiederholungen verwenden, da zu viele nicht schaden.

Schritt 2: Schleifen Sie die Datei und schneiden Sie sie auf die benötigte Länge

Erstellen Sie "concat.txt" mit diesem Inhalt

file '/path/to/original.mp3' file '/path/to/original.mp3' ... file '/path/to/original.mp3' file '/path/to/original.mp3' file '/path/to/original.mp3' 

Es muss mindestens so viele Zeilen haben, wie Wiederholungen erforderlich sind, aber es wird auch nicht mehr weh tun, sodass Sie eine sichere (zu hohe) Zeilenanzahl verwenden können

Und führe ffmpeg aus (vorausgesetzt du willst 123.456 Sekunden):

ffmpeg -t 123.456 -f concat -i concat.txt -c copy -t 123.456 output.mp3 
Die Lösung ist vielleicht nicht elegant, aber sie macht was ich brauche. Vielleicht sollte ich eine Funktionsanforderung an die Entwickler von ffmpeg stellen, um die Option -t mit der Option loop oder vielleicht nur eine Option mit einem Parameter von Sekunden für die Schleife zu setzen. Trotzdem danke für deine Hilfe, Eugen! Das löst mein Problem, Prost! Tomcatus vor 9 Jahren 0
@Tomcatus Wie bereits erwähnt, gibt es bereits eine Funktionsanfrage. Das Durchsuchen und dann Verwenden von "-t" würde das erreichen, was Sie möchten, wenn es implementiert würde ... slhck vor 9 Jahren 0
Ich verwende das routinemäßig mit einer "sicheren" Anzahl von Zeilen - das erste "-t" sorgt dafür, dass Sie nicht all das unnötige Zeug lesen Eugen Rieck vor 9 Jahren 0