Hintergrund
Ich muss AVI-Dateien in H264 (MP4) konvertieren. Ich mache das erfolgreich mit Folgendem:
-i mymovie.avi -c:v libx264 -crf 19 -preset slow -c:a libfaac -pix_fmt yuv420p -f mp4 -b:a 192k -y -an output.mp4
Ich rufe den Befehl über eine C# .Net Winforms-Anwendung auf, obwohl ich vermute, dass dies kaum Einfluss auf die Antwort haben wird.
Die Frage
Wie füge ich eine Audiospur hinzu? Ich muss eine hinzufügen, da ich die Videos auf Instagram hochladen muss, wo es anscheinend Dateien ohne Audiospur ablehnt (zu meinem Ärger). In Wirklichkeit brauche ich keine sehr lange Audiospur. Ich dachte an ein paar Sekunden „Stille“ im MP3-Format.
Ich glaube, ich brauche AAC-Audio als Ausgabe.
Der Vollständigkeit halber sei erwähnt, dass mir auch klar ist, dass der -an
Befehl keinen Ton erzeugt, und ich habe dies bei meinen späteren Versuchen entfernt.
Bisherige Versuche
Ich habe mir gedacht, dass ich den Befehl verwenden muss, -shortest
da der Ton kürzer als das Video sein wird. In Wirklichkeit werde ich eine leere MP3-Datei (oder ähnliches) hinzufügen, damit ich beim Kodieren einen Audiostream in das Video einbetten kann.
Ich habe auch versucht, den -map
Befehl zu verwenden, aber ohne Erfolg.
Antwort1
Ok, hier ist der Befehl, der bei mir funktioniert. Ich habe festgestellt, dass ich ihn libfaac
in meinem ffmpeg-Build nicht hatte, also habe ich gewechselt. Ich brauchte die -map
Optionen auch nicht, da FFMPEG mit 2 Eingängen ohne zusätzliche Konfiguration gut umgehen kann.
-i test.avi -i music.mp3 -c:v libx264 -crf 19 -preset slow -c:a libvo_aacenc -pix_fmt yuv420p -f mp4 -b:a 192k -y -shortest output.mp4
Die Unterschiede zwischen meinem Original und dem, was funktioniert, sind:
- libvo_aacenc ersetzt
libfaac
-shortest
wird hinzugefügt, um mit kürzeren Audiodaten als Videodaten umgehen zu können-i
wird verwendet, um den Audioeingang bereitzustellen
Aktualisieren
Der Befehl lautet nach einigen tollen Beiträgen in den Kommentaren jetzt
-i test.avi -i music.mp3 -c:v libx264 -crf 19 -preset slow -c:a aac -strict experimental -pix_fmt yuv420p -f mp4 -b:a 192k -y -shortest output.mp4
Antwort2
Einen stummen Audiostream können Sie erzeugen mit demaevalsrc
Audio quelle:
ffmpeg -y -i test.avi -f lavfi -i aevalsrc=0 -c:v libx264 -crf 19 -preset slow \
-pix_fmt yuv420p -shortest output.mp4
Dies ist einfacher, als eine leere Audiodatei als Eingabe zu verwenden.