Copier de l'audio à partir d'un quicktime avec ffmpeg

0

J'essaie de copier uniquement l'audio d'un quicktime.

>"C:\Program Files\ffmpeg\bin\ffmpeg.exe" -y -i a.mov -vn -acodec pcm_s16le a.wav

Voici ma sortie. Désolé pour le formatage.

ffmpeg version N-66673-gf0d1b3a Copyright (c) 2000-2014 the FFmpeg developers
  built on Oct  6 2014 22:10:42 with gcc 4.9.1 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis
 --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-zlib
  libavutil      54.  9.100 / 54.  9.100
  libavcodec     56.  3.101 / 56.  3.101
  libavformat    56.  7.104 / 56.  7.104
  libavdevice    56.  1.100 / 56.  1.100
  libavfilter     5.  1.102 /  5.  1.102
  libswscale      3.  1.100 /  3.  1.100
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  1.100 / 53.  1.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'a.mov':
  Metadata:
    major_brand     : qt
    minor_version   : 512
    compatible_brands: qt
    encoder         : Lavf56.7.104
  Duration: 00:00:02.44, start: 0.021333, bitrate: 761 kb/s
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720,
 628 kb/s, 24 fps, 24 tbr, 12288 tbn, 48 tbc (default)
    Metadata:
      handler_name    : DataHandler
      encoder         : Lavc56.3.101 libx264
    Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 129 kb/s (default)
    Metadata:
      handler_name    : DataHandler
Output #0, wav, to 'a.wav':
  Metadata:
    major_brand     : qt
    minor_version   : 512
    compatible_brands: qt
    ISFT            : Lavf56.7.104
    Stream #0:0(eng): Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, stereo
, s16, 1536 kb/s (default)
    Metadata:
      handler_name    : DataHandler
      encoder         : Lavc56.3.101 pcm_s16le
Stream mapping:
  Stream #0:1 -> #0:0 (aac (native) -> pcm_s16le (native))
Press [q] to stop, [?] for help
size=     460kB time=00:00:02.45 bitrate=1536.3kbits/s
video:0kB audio:460kB subtitle:0kB other streams:0kB global headers:0kB muxing o
verhead: 0.016559%

Un fichier wav est généré. Toutefois, si vous importez le fichier wav et le quicktime d'origine dans Pro Tools, vous constaterez que le fichier wav ne correspond pas au minutage du quicktime d'origine. Le fichier audio dans le fichier wav a environ une image et demie en retard.

J'ai essayé de régler le débit et la fréquence manuellement.

"C:\Program Files\ffmpeg\bin\ffmpeg.exe" -y -i a.mov -b:a 87k -ar 48000 -acodec pcm_s16le -vn a.wav



"C:\Program Files\ffmpeg\bin\ffmpeg.exe" -y -i a.mov -ar 48000 -acodec pcm_s16le -vn a_did_not_set_bitrate.wav

Aucune commande n'a fait de différence. Quelqu'un at-il rencontré ce problème auparavant? Des idées sur la façon de le résoudre?

Modifier:

Je viens de remarquer quelque chose d'étrange dans la sortie. Au début, la durée était définie sur:

Duration: 00:00:02.44

Une fois le wav généré, l’heure a été enregistrée comme suit:

time=00:00:02.45

Est-ce que du temps supplémentaire a été ajouté au fichier wav?

Ajout 26/04/16:

Intéressant.

>"C:\Program Files\ffmpeg\bin\ffprobe.exe" -select_streams a -read_intervals %+#1 -show_entries packet=pts_time a.mov
ffprobe version N-66673-gf0d1b3a Copyright (c) 2007-2014 the FFmpeg developers
  built on Oct  6 2014 22:10:42 with gcc 4.9.1 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-av
isynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enab
le-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --
enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-lib
modplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrw
b --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinge
r --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --en
able-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis
 --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-
libx265 --enable-libxavs --enable-libxvid --enable-zlib
  libavutil      54.  9.100 / 54.  9.100
  libavcodec     56.  3.101 / 56.  3.101
  libavformat    56.  7.104 / 56.  7.104
  libavdevice    56.  1.100 / 56.  1.100
  libavfilter     5.  1.102 /  5.  1.102
  libswscale      3.  1.100 /  3.  1.100
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  1.100 / 53.  1.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'a.mov':
  Metadata:
    major_brand     : qt
    minor_version   : 512
    compatible_brands: qt
    encoder         : Lavf56.7.104
  Duration: 00:00:02.44, start: 0.021333, bitrate: 761 kb/s
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720,
 628 kb/s, 24 fps, 24 tbr, 12288 tbn, 48 tbc (default)
    Metadata:
      handler_name    : DataHandler
      encoder         : Lavc56.3.101 libx264
    Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 12
9 kb/s (default)
    Metadata:
      handler_name    : DataHandler
[PACKET]
pts_time=-0.021333
[/PACKET]

Essayer de décomposer cette commande.

"C: \ Program Files \ ffmpeg \ bin \ ffprobe.exe" -select_streams a -read_intervals% + # 1 -show_entries packet = pts_time a.mov

D'après ce que je peux dire, cela signifie lire un paquet à partir des flux audio et afficher l'heure PTS, qui, je pense, fait référence à un horodatage de présentation.

Est-ce que cela signifie que l'audio commence avant la vidéo? Peut-être, il commence à 0.021333 secondes avant la vidéo.

Ajout 27/04/16:

Exécuter la même commande avec vpour les -select_streamsrendements:

[PACKET]
pts_time=0.000000
[/PACKET]
Christopher Spears
la source
Exécutez la même commande ffprobe mais avec vpour select_streams
Gyan

Réponses:

1

Le problème est dû au fait que votre fichier QuickTime contient un découpage que FFMPEG ignore, sauf si vous effectuez explicitement le découpage sur le fichier d' entrée via l'option -ss.

Vous pouvez voir que votre fichier QuickTime commence réellement à 0,021333 ms dans le fichier par le "début: 0.021333" dans cette ligne:

 Duration: 00:00:02.44, start: 0.021333, bitrate: 761 kb/s

Afin de résoudre ce problème, essayez la commande suivante:

"C:\Program Files\ffmpeg\bin\ffmpeg.exe" -y -ss 0.021333 -i a.mov -vn -acodec pcm_s16le a.wav

Veuillez noter que l'option -ss doit être avant le fichier d'entrée (-i) pour que cela fonctionne correctement.

Dans mon programme, j'appelle FFProbe, récupère le décalage, puis l'applique à la commande FFMPEG pour éviter tout problème de synchronisation. Je crois que ce que vous recherchez, c'est "start_time" dans FFProbe.

Bonne chance!

Steve Ferguson
la source
0

Essaye ça:

Tout d'abord, extraire l'audio dans un conteneur brut

ffmpeg.exe -y -i a.mov -vn -acodec copy a.aac

Si vous pouvez l'utiliser dans Pro Tools, vous avez terminé. Autre,

ffmpeg.exe -y -i a.aac -acodec pcm_s16le a.wav
Gyan
la source
On dirait que Pro Tools ne peut pas lire le fichier aac. Le fichier wav que j'ai généré a toujours le même problème. Merci quand même!
Christopher Spears le