J'essaie d'utiliser ffmpeg pour ajouter une piste audio silencieuse à un fichier MOV.
J'ai créé une piste audio silencieuse plus longue que la vidéo et j'ai l'intention d'utiliser l'option -shortest avec ffmpeg.
En utilisant SoX v14.3.1, je lance ceci pour générer un fichier wav:
sox -n -r 44100 -b 16 -c 2 -L silence.wav trim 0.0 60.000
# -n = Sox's null file
# -r = sample rate
# -b = bits per sample
# -c = num of channels
# -L = little endian
# filename
# trim - is an effect, args start and length.
Ma commande ffmpeg de base ressemble à ceci:
ffmpeg -shortest \
-i silence.wav -acodec pcm_s16le \
-i vid_no_sound.mov -vcodec copy vid_with_sound.mov
Le résultat de ceci est:
ffmpeg version 0.11.1 Copyright (c) 2000-2012 the FFmpeg developers
built on Aug 27 2012 13:11:25 with gcc 4.4.5
configuration: --extra-cflags=-static --prefix=/root/ffmpeg_build/src/ffmpeg-0.11.1 --enable-bzlib --enable-gnutls --enable-libfreetype --enable-libmp3lame --enable-libdc1394 --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-openssl --enable-zlib --enable-gpl --enable-nonfree --enable-version3
libavutil 51. 54.100 / 51. 54.100
libavcodec 54. 23.100 / 54. 23.100
libavformat 54. 6.100 / 54. 6.100
libavdevice 54. 0.100 / 54. 0.100
libavfilter 2. 77.100 / 2. 77.100
libswscale 2. 1.100 / 2. 1.100
libswresample 0. 15.100 / 0. 15.100
libpostproc 52. 0.100 / 52. 0.100
[wav @ 0x29ab2e0] max_analyze_duration 5000000 reached at 5015510
Guessed Channel Layout for Input Stream #0.0 : stereo
Input #0, wav, from 'silence.wav':
Duration: 00:01:00.00, bitrate: 1411 kb/s
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16, 1411 kb/s
Input #1, mov,mp4,m4a,3gp,3g2,mj2, from 'vid_no_sound.mov':
Metadata:
major_brand : qt
minor_version : 537199360
compatible_brands: qt
creation_time : 2012-07-25 13:41:44
Duration: 00:00:14.50, start: 0.000000, bitrate: 27457 kb/s
Stream #1:0(eng): Video: qtrle (rle / 0x20656C72), rgb24, 1920x1080, 27450 kb/s, SAR 1920:1920 DAR 16:9, 24 fps, 24 tbr, 24 tbn, 24 tbc
Metadata:
creation_time : 2012-07-25 13:41:44
handler_name : Apple Alias Data Handler
Stream #1:1(eng): Data: none (tmcd / 0x64636D74)
Metadata:
creation_time : 2012-07-25 13:42:06
handler_name : Apple Alias Data Handler
timecode : 00:00:00:00
File 'vid_with_sound.mov' already exists. Overwrite ? [y/N] y
auto-inserting filter 'auto-inserted resampler 0' between the filter 'src' and the filter 'aformat'
[aresample @ 0x2ab3b00] chl:stereo fmt:s16 r:44100Hz -> chl:stereo fmt:flt r:44100Hz
[NULL @ 0x2994320] Codec is experimental but experimental codecs are not enabled, try -strict -2
Output #0, mov, to 'vid_with_sound.mov':
Stream #0:0(eng): Video: qtrle (rle / 0x20656C72), rgb24, 1920x1080 [SAR 1920:1920 DAR 16:9], q=2-31, 27450 kb/s, 24 fps, 90k tbn, 24 tbc
Metadata:
creation_time : 2012-07-25 13:41:44
handler_name : Apple Alias Data Handler
Stream #0:1: Audio: none, 44100 Hz, stereo, flt, 128 kb/s
Stream mapping:
Stream #1:0 -> #0:0 (copy)
Stream #0:0 -> #0:1 (pcm_s16le -> aac)
Error while opening encoder for output stream #0:1 - maybe incorrect parameters such as bit_rate, rate, width or height
J'ai essayé d'ajouter le -strict -2
comme suggéré, mais je ne sais pas où le mettre dans la ligne de commande.
J'ai passé deux heures à essayer différentes choses et à lire la documentation de ffmpeg, mais je suis toujours bloqué.
Comment ajouter une piste audio silencieuse à un fichier mov?
anullsrc
filtre audioVous pouvez utiliser ffmpeg
pour créer l'audio silencieux et le combiner avec une vidéo en une seule étape. Cet exemple utilise le filtre audio anullsrc
pour générer un son stéréo silencieux avec une fréquence d'échantillonnage de 44100:
ffmpeg -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=44100 -i video.mov \
-shortest -c:v copy -c:a aac output.mov
channel_layout=stereo:sample_rate=44100
est la valeur par défaut, mais je l'ai inclus juste comme exemple d'utilisation de ces options.Si votre fichier d'entrée vidéo contient de l'audio que vous souhaitez ignorer, utilisez le -map
option pour remplacer le comportement par défaut sélection de flux :
ffmpeg -f lavfi -i anullsrc -i video.mov -shortest -c:v copy -c:a aac \
-map 0:a -map 1:v output.mov
-map 0:a -map 1:v
peut être traduit par: à partir de la première entrée (0
) utilise l'audio (a
), et à partir de la deuxième entrée (1
) utilisez la vidéo (v
).Ces exemples vont copier en flux la vidéo afin qu'elle ne soit pas ré-encodée (comme un "copier-coller").
Il est toujours recommandé d'utiliser un ffmpeg
récent. Les liens vers les versions récentes se trouvent sur la page Téléchargement FFmpeg ou vous pouvez vous référer à une étape par étape guide pour compiler ffmpeg
.
Si votre ffmpeg
est ancienne, vous devrez utiliser -strict experimental
utiliser -c:a aac
.
Dans le cas où quelqu'un d'autre se retrouverait ici via "un moteur de recherche", voici une commande pour le dernier ffmpeg , fonctionne avec MP4 (H264/AVC):
ffmpeg -f lavfi -i aevalsrc = 0 -i input.mp4 -vcodec copy -acodec aac -map 0: 0 -map 1: 0 -shortest -strict experimental -y out.mp4
Créez une vidéo à partir d'une image ou convertissez une image en vidéo, puis ajoutez un son slient en utilisant ffmpeg.
Vous pouvez utiliser le filtre de source audio anullsrc dans ffmpeg. Exemple de création d'un fichier 5.1 canaux, 48000 Hz, 10 secondes de fichier vidéo silencieux à partir de l'image:
ffmpeg -loop 1 -i img002.jpg -f lavfi -i anullsrc=channel_layout=5.1:sample_rate=48000 -t 10 -c:v libx264 -t 10 -pix_fmt yuv420p -vf scale=480:320 -y output.mp4
img002.jpg: fichier image d'entrée
-i anullsrc: Ajouter un son silencieux
-t 10: nombre de secondes
échelle = 480: 320: résolution vidéo largeur = 420 et hauteur = 320
-y: remplacer le fichier de sortie existant
output.mp4: fichier de sortie
L'ordre est important. J'ai essayé la commande sox ci-dessus et la commande ffmpeg ci-dessous et cela fonctionne
ffmpeg -shortest -i silence.wav -acodec pcm_s16le -i out.mov -vcodec copy -strict -2 vid_with_sound.mov