web-dev-qa-db-fra.com

Vidéo et audio FFMPEG mux (d'une autre vidéo) - problème de cartographie

Je voudrais placer l'audio d'une vidéo à une autre vidéo sans audio (dans une commande):

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

Je suppose que "-map" est la bonne façon de le faire mais je me suis confondu avec elle.

Pouvez-vous suggérer comment le résoudre?

58
Mark

Vue d'ensemble des entrées

input_0.mp4 A le flux vidéo souhaité et input_1.mp4 A le flux audio souhaité:

mapping diagram

Dans ffmpeg, les flux ressemblent à ceci:

$ 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)

Numéros d'identification

ffmpeg fait référence aux fichiers d'entrée et aux flux avec des numéros d'index. Le format est input_file_id:input_stream_id. Puisque ffmpeg commence à compter à partir de 0, le flux 1:1 Fait référence à l'audio de input_1.mp4.

Spécificateurs de flux

Cela peut être amélioré avec spécificateurs de flux . Par exemple, vous pouvez indiquer à ffmpeg que vous souhaitez que le premier flux vidéo de la première entrée (0:v:0) Et le premier flux audio de la deuxième entrée (1:a:0). Je préfère cette méthode car elle est plus efficace. En outre, il est moins sujet à un mappage accidentel car 1:1 Peut faire référence à tout type de flux, alors que 2:v:3 Ne fait référence qu'au quatrième flux vidéo du troisième fichier d'entrée.

Exemples

L'option -map indique à ffmpeg les flux que vous souhaitez. Pour copier la vidéo à partir de input_0.mp4 Et l’audio à partir de input_1.mp4:

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

Cet exemple suivant fera la même chose:

$ 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 Peut être traduit de la manière suivante: à partir de la première entrée (0), Sélectionnez le type de flux vidéo (v), le premier flux vidéo (0)

  • -map 1:a:0 Peut être traduit comme suit: à partir de la deuxième entrée (1), Sélectionnez le type de flux audio (a), le premier flux audio (0)

Notes complémentaires

164
llogan

J'ai une nouvelle commande pour la fusion de l'audio à la vidéo

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

- qscale est la qualité définie pour la vidéo de ffmpeg

- acodec copy est l'option de copie de la qualité audio par défaut pour la sortie vidéo

- - vcodec mpeg4 est l'option de copie de la qualité par défaut de la vidéo vers la vidéo en sortie

1
HoangHieu