Wie kann ich ein Audio in zwei Teile zerlegen und mit ffmpeg zusammenführen?

449
Henry

Entschuldigen Sie die lange Frage, ich weiß nicht, wie ich Ihnen meinen Weg erklären kann.

Ich möchte ffmpeg verwenden, um zu bearbeiten (Fadeout usw.), eine Audiodatei zu teilen und sie danach wieder zusammenzufügen. (Ich kann -c nicht verwenden, da ich Filter verwende.)

Bei Verwendung von MP3 bricht die Split-Position beim Zusammenfügen offensichtlich zusammen. Also habe ich versucht, ein einfaches, lineares Format zu verwenden, das aber auch am Split-Punkt Artefakte erzeugt.

Gibt es einen Audiocodec, der für meine Zwecke verwendet werden kann, oder haben Sie eine andere Idee, die mein Problem lösen könnte? Danke im Voraus!

Als Ausgangspunkt hier meine Befehle jetzt:

ffmpeg -t 20 -i song.mp3 -filter_complex afade=t=in:ss=0:d=2 -vn -f u16le part1.raw ffmpeg -ss 20 -i song.mp3 -filter_complex afade=t=out:ss=60:d=2 -vn -f u16le part2.raw 

^ Ich weiß, dass dies ohne Aufteilung möglich ist, aber ich werde die Ausgabe später in einer Live-Umgebung weiterleiten, also muss ich aufteilen / zusammenführen ...

ffmpeg -f u16le -i "concat:part1.raw|part2.raw" -vn output.mp3

1
MP3s haben keine Zeitstempel, daher ist die Suche nach Demuxern ungenau. Wechseln Sie zum Decodersuchlauf, dh setzen Sie ss / t nach dem Namen der Eingabe. Gyan vor 6 Jahren 0
Ich werde das versuchen, danke! Aber ich bin nicht zu optimistisch, weil ich vorher versucht hatte, die MP3-Dateien in Raws umzuwandeln, und das hat auch nicht funktioniert. Henry vor 6 Jahren 0
Ich konnte Ihr Problem mit Befehlen Ihres Formulars reproduzieren und durch Umschalten auf Decodersuche umgehen. Gyan vor 6 Jahren 0
Danke, Kumpel! Werde das jetzt gleich versuchen. Eine andere Sache, warum hast du deinen ersten Kommentar nicht als Antwort gepostet? Ich bin neu auf dieser Plattform. Henry vor 6 Jahren 0
Das funktioniert bei mir nicht. Ich benutze am Ende einen kontinuierlichen Strom. Was ich in eine Pipe schreibe: Song1, Crossfade, erste 10 Sekunden Song2 -> Song2 -ss 10, Crossfade, erste 10 Sekunden Song3 ... - das geht in eine Instanz, die dann einen Icecast-Stream + eine MP3-Datei codiert. Diese Instanz wirft Fehler bei der Verwendung von MP3: "Header fehlt / Ungültige Daten bei der Verarbeitung von Eingabe / Audiopaket sind ungültig" usw. - Bei Verwendung von Raw werden keine Fehler ausgegeben, es treten jedoch bei jedem Schnitt Artefakte auf. Irgendeine Idee, wie ich das erreichen kann? Kann ich den Instanzen mitteilen, dass sie mit dem letzten Teil des Streams zusammengeführt werden sollen? Henry vor 6 Jahren 0
Was ist also genau die Reihe von Befehlen, die Sie verwenden? Gyan vor 6 Jahren 0
Beispiel: ffmpeg -t 20 -i song1.mp3 -i song2.mp3 -filter_complex acrossfade = d = 2 -vn -f mp3 -ss 10 -t 20 pipe: 1; Stream: ffmpeg -f mp3 -i pipe: 0 -y -vn icecast: // source: pw@example.com: 8000 / stream.mp3 stream.mp3 (-t 20 bei Eingabe für Crossfade-Platzierung - jetzt auch mit MP3 die Pipe macht da keinen Unterschied + mp3 zeigt Fehler in der Stream-Instanz) Henry vor 6 Jahren 0
Das benutzt noch Demuxer-Suchlauf, um song1 zu begrenzen. Die Decoderverzögerung kann auch ins Spiel kommen. Wickeln Sie Ihre MP3s in einen Container wie MKV ein und prüfen Sie sie. Gyan vor 6 Jahren 0
Ich habe noch ein paar Tests gemacht und denke jetzt, dass das Problem die Verzögerung ist, bevor der nächste Song beginnt. Weißt du, ob es möglich ist, einen Puffer in einer Pipe zu haben (die Songgenerierung ist also voraus)? Eine andere Möglichkeit wäre, die Eingänge der Stream-Instanz während der Ausführung zu ändern, aber ich denke, das ist nicht möglich ... Henry vor 6 Jahren 0
Nach langem Experimentieren mit nodejs-Streams (ich integriere das über fluent-ffmpeg), konnte ich die Stream-Puffergröße erhöhen und habe nun einen fließenden Stream - vielen Dank für Ihre Hilfe! Henry vor 6 Jahren 0
Wenn Sie das Problem erfolgreich gelöst haben, sollten Sie eine Zusammenfassung schreiben und die Schritte als Antwort auf Ihre Frage veröffentlichen. JonathanDavidArndt vor 6 Jahren 0

0 Antworten auf die Frage