688 Stimmen

Wie kann ich mit ffmpeg Audio aus Videos extrahieren?

Ich habe den folgenden Befehl ausprobiert, um Audio aus Video zu extrahieren:

ffmpeg -i Sample.avi -vn -ar 44100 -ac 2 -ab 192k -f mp3 Sample.mp3

aber ich erhalte die folgende Ausgabe

libavutil     50.15. 1 / 50.15. 1
libavcodec    52.72. 2 / 52.72. 2
libavformat   52.64. 2 / 52.64. 2
libavdevice   52. 2. 0 / 52. 2. 0
libavfilter    1.19. 0 /  1.19. 0
libswscale     0.11. 0 /  0.11. 0
libpostproc   51. 2. 0 / 51. 2. 0
SamplE.avi: Invalid data found when processing input

Kann mir jemand helfen, bitte?

931voto

Paul Irish Punkte 44793

Zum Extrahieren des Audiostroms ohne erneute Codierung:

ffmpeg -i input-video.avi -vn -acodec copy output-audio.aac
  • -vn ist kein Video.
  • -acodec copy sagt, dass derselbe Audiostream verwendet wird, der bereits dort vorhanden ist.

Lesen Sie die Ausgabe, um zu sehen, um welchen Codec es sich handelt, um die richtige Dateinamenerweiterung einzustellen.

447voto

Jeremy Thompson Punkte 56282

Um eine qualitativ hochwertige MP3- oder MP4-Audiodatei aus einer Filmdatei (z. B. AVI, MP4, MOV usw.) oder Audiodatei (z. B. WAV) zu kodieren, ist es am besten, Folgendes zu verwenden -q:a 0 für variable Bitraten und es ist eine gute Praxis, die -map a um Video/Untertitel auszuschließen und nur Audio zu erfassen:

ffmpeg -i sample.avi -q:a 0 -map a sample.mp3

Wenn Sie möchten, dass einen Teil des Tons aus einem Video extrahieren verwenden Sie die -ss um den Anfangszeitstempel anzugeben, und die Option -t um die Kodierungsdauer festzulegen, z. B. von 3 Minuten und 5 Sekunden auf 45 Sekunden:

ffmpeg -i sample.avi -ss 00:03:05 -t 00:00:45.0 -q:a 0 -map a sample.mp3
  • Die Zeitstempel müssen im Format HH:MM:SS.xxx oder in Sekunden angegeben werden.

  • Wenn Sie nicht die -t Option wird es bis zum Ende gehen.

  • Sie können die -an statt der Option -t wenn Sie den Bereich angeben wollen, z. B. 45 Sekunden: 00:03:05 + 45 = 00:03:50

Arbeitsbeispiel:

  1. Herunterladen ffmpeg
  2. Öffnen Sie eine Eingabeaufforderung (Start > Ausführen > CMD) oder auf einem Mac/Linux ein Terminal
  3. cd (der Befehl zum Wechseln des Verzeichnisses) in das Verzeichnis mit der ffmeg.exe, wie abgebildet.
  4. Geben Sie Ihren Befehl aus und warten Sie auf die Ausgabedatei (oder beheben Sie eventuelle Fehler)

Windows enter image description here

Mac/Linux enter image description here enter image description here

149voto

llogan Punkte 103505

Alle Audiospuren / Streams extrahieren

Damit werden alle Audiodaten in einer Datei zusammengefasst:

ffmpeg -i input.mov -map 0:a -c copy output.mov
  • -map 0:a wählt alle nur Audioströme. Video und Untertitel werden nicht berücksichtigt.
  • -c copy ermöglicht Stream-Kopie Modus. Dabei wird der Ton kopiert und nicht neu kodiert. entfernen -c copy wenn Sie möchten, dass der Ton neu kodiert wird.
  • Wählen Sie ein Ausgabeformat, das Ihr Audioformat unterstützt. Siehe Vergleich der Containerformate .

Extrahieren einer bestimmten Tonspur/eines bestimmten Streams

Beispiel für die Extraktion des Audiostroms Nr. 4:

ffmpeg -i input.mkv -map 0:a:3 -c copy output.m4a
  • -map 0:a:3 wählt nur den Audiostrom #4 aus ( ffmpeg beginnt mit der Zählung von 0).
  • -c copy ermöglicht Stream-Kopie Modus. Dabei wird der Ton kopiert und nicht neu kodiert. entfernen -c copy wenn Sie möchten, dass der Ton neu kodiert wird.
  • Wählen Sie ein Ausgabeformat, das Ihr Audioformat unterstützt. Siehe Vergleich der Containerformate .

Audio extrahieren und neu kodieren / Format ändern

Ähnlich wie bei den obigen Beispielen, aber ohne -c copy . Verschiedene Beispiele:

ffmpeg -i input.mp4 -map 0:a output.mp3
ffmpeg -i input.mkv -map 0:a output.m4a
ffmpeg -i input.avi -map 0:a -c:a aac output.mka
ffmpeg -i input.mp4 output.wav

Alle Audioströme einzeln extrahieren

Dieser Eingang hat in diesem Beispiel 4 Audioströme. Jeder Audiostrom wird als einzelne Datei ausgegeben.

ffmpeg -i input.mov -map 0:a:0 output0.wav -map 0:a:1 output1.wav -map 0:a:2 output2.wav -map 0:a:3 output3.wav

Optional hinzufügen -c copy vor jedem Ausgabedateinamen, um die Stream-Kopie Modus.


Einen bestimmten Kanal extrahieren

Verwenden Sie die Kanalspaltfilter . Beispiel für das Abrufen des rechten Frontkanals (FR) von einem Stereoeingang:

ffmpeg -i stereo.wav -filter_complex "[0:a]channelsplit=channel_layout=stereo:channels=FR[right]" -map "[right]" front_right.wav
  • channel_layout ist die Kanalbelegung des Eingangs. Es wird nicht automatisch erkannt, daher müssen Sie den Namen des Layouts angeben.
  • channels listet den/die Kanal/Kanäle auf, den/die Sie extrahieren möchten.
  • Siehe ffmpeg -layouts für Audiokanal-Layoutnamen (für channel_layout ) und Kanalnamen (für channels ).
  • Verwendung von Stream-Kopie Modus ( -c copy ) kann beim Filtern nicht verwendet werden, so dass das Audio neu kodiert werden muss.
  • Siehe FFmpeg-Wiki: Audio-Kanäle für weitere Beispiele.

Was ist der Unterschied zwischen -map y -vn ?

ffmpeg hat einen Standard Stromauswahl Verhalten, das 1 Stream pro Streamtyp auswählt (1 Video, 1 Audio, 1 Untertitel, 1 Daten).

-vn ist eine alte, veraltete Option. Sie schließt Video vom Standardverhalten bei der Streamauswahl aus. Audio, Untertitel und Daten werden also weiterhin automatisch ausgewählt, es sei denn, dies wird mit -an , -sn o -dn .

-map ist komplizierter, aber flexibler und nützlicher. -map deaktiviert das Standardverhalten der Streamauswahl und ffmpeg wird nur das aufnehmen, was Sie ihm mit -map Option(en). -map kann auch verwendet werden, um bestimmte Streams oder Stream-Typen auszuschließen. Zum Beispiel, -map 0 -map -0:v würde alle Ströme umfassen außer alle Videos.

Siehe FFmpeg-Wiki: Karte für weitere Beispiele.


Fehler

Ungültiger Audiostrom. Es ist genau ein MP3-Audiostream erforderlich.

MP3 unterstützt nur 1 Audiostrom. Der Fehler bedeutet, dass Sie versuchen, mehr als einen Audiostrom in MP3 zu übertragen. Es kann auch bedeuten, dass Sie versuchen, Nicht-MP3-Audio in MP3 zu übertragen.

WAVE-Dateien haben genau einen Stream

Ähnlich wie oben.

Tag für Codec in Stream #0 nicht gefunden, Codec wird derzeit im Container nicht unterstützt

Sie versuchen, ein Audioformat in eine Ausgabe zu übertragen, die es nicht unterstützt, z. B. PCM (WAV) in MP4.

entfernen -c copy , wählen Sie ein anderes Ausgabeformat (ändern Sie die Dateinamenerweiterung) oder wählen Sie manuell den Encoder (z. B. -c:a aac ).

Siehe Vergleich der Containerformate .

Header für Ausgabedatei #0 konnte nicht geschrieben werden (falsche Codec-Parameter ?): Ungültiges Argument

Dies ist ein nutzloser, allgemeiner Fehler. Der eigentliche, informative Fehler sollte unmittelbar vor dieser allgemeinen Fehlermeldung stehen.

81voto

Zimba Punkte 1969

Es sieht so aus, als würden Sie Audio aus einer Videodatei extrahieren und auf einen Stereokanal heruntermischen.
Um nur Audio zu extrahieren (ohne Neukodierung):

ffmpeg.exe -i in.mp4 -vn -c:a copy out.m4a

Zum Extrahieren von Audio & Downmix auf Stereo (ohne erneute Kodierung):

ffmpeg.exe -i in.mp4 -vn -c:a copy -ac 2 out.m4a

Um eine mp3-Datei zu erzeugen, müssen Sie die Audiodaten neu kodieren:

ffmpeg.exe -i in.mp4 -vn -ac 2 out.mp3

-c ( Codecs auswählen ) & -map ( Ströme auswählen ) Optionen:

-c:a -> Wählen Sie das am besten unterstützte Audio (transkodiert)
-c:a copy -> bestes unterstütztes Audio (kopiert)
-map 0:a -> alle Audiodaten der 1. (Audio-)Eingabedatei (transkodiert)
-map 0:0 -> 1. Stream aus 1. Eingabedatei (transkodiert)
-map 1:a:0 -> 1. Audiostrom aus 2. (Audio-)Eingabedatei (transkodiert)
-map 1:a:1 -c:a copy -> 2. Audiostrom aus 2. (Audio-)Eingabedatei (kopiert)

12voto

smp Punkte 975

ffmpeg -i sample.avi gibt Ihnen die Informationen zum Audio-/Videoformat für Ihre Datei. Vergewissern Sie sich, dass Sie die richtigen Bibliotheken konfiguriert haben, um die Eingabeströme zu parsen. Stellen Sie außerdem sicher, dass die Datei nicht beschädigt ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X