FFMPEG fügt beim Konvertieren von Videoformaten eine Audiospur hinzu

FFMPEG fügt beim Konvertieren von Videoformaten eine Audiospur hinzu

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 -anBefehl 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, -shortestda 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 -mapBefehl zu verwenden, aber ohne Erfolg.

Antwort1

Ok, hier ist der Befehl, der bei mir funktioniert. Ich habe festgestellt, dass ich ihn libfaacin meinem ffmpeg-Build nicht hatte, also habe ich gewechselt. Ich brauchte die -mapOptionen 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 ersetztlibfaac
  • -shortestwird hinzugefügt, um mit kürzeren Audiodaten als Videodaten umgehen zu können
  • -iwird 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 demaevalsrcAudio 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.

verwandte Informationen