it-swarm.com.de

FFMPEG Mux Video und Audio (von einem anderen Video) - Mapping-Problem

Ich möchte das Audio eines Videos in ein anderes Video ohne Audio einfügen (in einem Befehl):

ffmpeg.exe -i video1_noAudio.mov -i video2_wAudio.mov -vcodec copy -acodec copy video1_audioFromVideo2.mov

Ich denke, "-map" ist der richtige Weg, um es zu tun, aber ich wurde damit verwechselt.

Können Sie vorschlagen, wie Sie das Problem beheben können?

58
Mark

Übersicht der Eingänge

input_0.mp4 Hat den gewünschten Videostream und input_1.mp4 Hat den gewünschten Audiostream:

mapping diagram

In ffmpeg sehen die Streams folgendermaßen aus:

$ ffmpeg -i input_0.mp4 -i input_1.mp4

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input_0.mp4':
  Duration: 00:01:48.50, start: 0.000000, bitrate: 4144 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720, 4014 kb/s, SAR 115:87 DAR 1840:783, 23.98 fps, 23.98 tbr, 16k tbn, 47.95 tbc (default)
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 124 kb/s (default)

Input #1, mov,mp4,m4a,3gp,3g2,mj2, from 'input_1.mp4':
  Duration: 00:00:30.05, start: 0.000000, bitrate: 1754 kb/s
    Stream #1:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 720x480 [SAR 8:9 DAR 4:3], 1687 kb/s, 59.94 fps, 59.94 tbr, 60k tbn, 119.88 tbc (default)
    Stream #1:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 55 kb/s (default)

ID-Nummern

ffmpeg bezieht sich auf Eingabedateien und Streams mit Indexnummern. Das Format ist input_file_id:input_stream_id. Da ffmpeg ab 0 zählt, bezieht sich Stream 1:1 Auf das Audio von input_1.mp4.

Stream-Spezifizierer

Dies kann mit Stream-Spezifizierer erweitert werden. Beispielsweise können Sie ffmpeg mitteilen, dass der erste Videostream vom ersten Eingang (0:v:0) Und der erste Audiostream vom zweiten Eingang (1:a:0) Stammen soll. Ich bevorzuge diese Methode, weil sie effizienter ist. Außerdem ist es weniger anfällig für versehentliches Mapping, da 1:1 Auf jeden Stream-Typ verweisen kann, während 2:v:3 Sich nur auf den vierten Video-Stream der dritten Eingabedatei bezieht.

Beispiele

Die Option -map weist ffmpeg an, welche Streams Sie möchten. So kopieren Sie das Video von input_0.mp4 Und das Audio von input_1.mp4:

$ ffmpeg -i input_0.mp4 -i input_1.mp4 -c copy -map 0:0 -map 1:1 -shortest out.mp4

Das nächste Beispiel wird dasselbe tun:

$ ffmpeg -i input_0.mp4 -i input_1.mp4 -c copy -map 0:v:0 -map 1:a:0 -shortest out.mp4
  • -map 0:v:0 Kann übersetzt werden als: Wählen Sie vom ersten Eingang (0) Den Videostream-Typ (v), den ersten Videostream (0)

  • -map 1:a:0 Kann übersetzt werden als: Wählen Sie vom zweiten Eingang (1) Den Audiostream-Typ (a), den ersten Audiostream (0)

Zusätzliche Bemerkungen

  • Mit -c copy Werden die Streams Stream kopiert , nicht neu codiert, so dass es zu keinen Qualitätsverlusten kommt. Wenn Sie neu codieren möchten, lesen Sie FFmpeg Wiki: H.264 Encoding Guide .

  • Die Option -shortest Bewirkt, dass die Ausgabedauer mit der Dauer des kürzesten Eingabestreams übereinstimmt.

  • Weitere Informationen finden Sie in der Dokumentation der Option -map .

164
llogan

Ich habe einen neuen Befehl zum Zusammenführen von Audio zu Video

ffmpeg -i video.mp4 -i audio.mp4 -map 0.0 -map 1.0 -acodec copy -qscale 4 -vcodec mpeg4 outvideo.mp4

- qscale ist die Option, mit der die Qualität für das Video von ffmpeg festgelegt wird

- acodec copy ist die Option zum Kopieren der Standardqualität von Audio für die Videoausgabe

- vcodec mpeg4 ist die Option zum Kopieren der Standardqualität des Videos für die Videoausgabe

1
HoangHieu