ffmpeg - Zuordnung mehrerer Audios zu einem Kanal


0

Ich möchte eine Videodatei mit mehreren Sounds ausgeben, diese jedoch in einem Kanal speichern.
Ich habe einige Möglichkeiten ausprobiert, aber ich bekomme immer ein Video mit mehreren Sound-Streams.
So was

Mein Befehl ist

ffmpeg -r 30 -i test_%03d.png 
-itsoffset 10 -ss 5 -t 20 -i s01.wav
-itsoffset 15 -ss 10 -t 30 -i s02.wav 
-map 0:v -map 1:a:0 -map 2:a:0 -c:v libopenh264 -c:a mp3 test.mp4

Neuer Befehlstest

-framerate 30 -i test_%03d.png -ss 0.2 -t 1 -i sound01.wav -ss 1 -t 2 -i sound02.wav
-filter_complex
"[1] aformat=sample_fmts=s16p:sample_rates=44100:channel_layouts=mono [a1];
 [2] aformat=sample_fmts=s16p:sample_rates=44100:channel_layouts=mono [a2]; 
 [a1]adelay=400|400,apad[b1]; 
 [a2]adelay=900|900[b2]; 
 [b1][b2]amerge=2[a]" 
 -map 0:v -map "[a]" -c:v libopenh264 -c:a mp3 -ac 2 output.mp4

Da Filter ihre Formate nicht auswählen konnten, trat ein Fehler auf, und ich fügte dem Befehl ein Format hinzu. Aber jetzt tritt ein anderer Fehler auf. Kein Kanallayout für Eingang 1 und Ausgang Video fehlt Sound01, bitte helfen Sie mir!


Es funktioniert, nachdem channel_layouts = ** mono ** in stereo geändert wurde , aber ich habe immer noch kein Kanallayout für den Fehler von Eingang 1 erhalten .
Ives

Antworten:


0

Um mehrere Audio-Streams zu einem zu kombinieren, müssen Sie Filter verwenden, um die Streams zusammenzuführen:

ffmpeg -framerate 30 -i test_%03d.png -i s01.wav -i s02.wav \
       -filter_complex "[1][2]amerge=2[a]" \
       -map 0:v -map "[a]"   
       -c:v libopenh264 -c:a mp3 -ac 2 test.mp4

Dies framerateist die richtige Option für Bild- und RAW-Streams.

Das -ac 2Downmixen des zusammengeführten Audios auf 2 Kanäle, da dies die Obergrenze für den MP3-Encoder ist.


Für den aktualisierten Befehl

ffmpeg -framerate 30 -i test_%03d.png 
       -ss 5 -t 20 -i s01.wav
       -ss 10 -t 30 -i s02.wav
       -filter_complex "[1]adelay=10000|10000,apad[a1];
                        [2]adelay=15000|15000[a2];
                        [a1][a2]amerge=2[a]" \
       -map 0:v -map "[a]" -c:v libopenh264 -c:a mp3 test.mp4

Das adelayPad füllt das Audio vor und nimmt den Wert in Millisekunden pro Kanal an. Die apadPads klingen am Ende und werden benötigt, da Amerge mit dem kürzesten Stream endet.


danke, es führt die Streams zusammen, wenn ich mehr Audios zusammenführen möchte, kann ich einfach -filter_complex "[1] [2] [3] [4] amerge = 4 [a] ?
Ives

Und ich habe festgestellt, dass beim Zusammenführen der Streams die einzelnen Einstellungen wie -itsoffset -ss -t ignoriert werden.
Ives

Kann ich einfach -filter_complex ändern? "[1] [2] [3] [4] amerge = 4 [a]? -> yes.
Gyan

Ja, diese werden ignoriert und enden mit dem kürzesten Stream. Daher sollten Sie sie vorher kürzen.
Gyan

Ich kann das also nicht in einer Zeile ausführen. Ich muss sie zuschneiden und die Dauer der Audiodateien der Videodauer angleichen und sie dann zum Video zusammenführen.
Ives
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.