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?
input_0.mp4
A le flux vidéo souhaité et input_1.mp4
A le flux audio souhaité:
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)
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
.
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.
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
)
Avec -c copy
, Les flux seront flux copié , pas ré-encodés, il n'y aura donc aucune perte de qualité. Si vous voulez ré-encoder, voir FFmpeg Wiki: Guide de codage H.264 .
L'option -shortest
Fera en sorte que la durée de sortie corresponde à la durée du flux d'entrée le plus court.
Voir la documentation de l'option -map
pour plus d'informations.
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