web-dev-qa-db-fra.com

ajout d'audio silencieux dans ffmpeg

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?

35
jon

anullsrc filtre audio

Vous 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.

Ignorer l'audio existant

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

Remarques

  • 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.

89
llogan

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

14
PAStheLoD

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

3
Rahul Chauhan

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
1
av501