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 v
pour les -select_streams
rendements:
[PACKET]
pts_time=0.000000
[/PACKET]
v
pour select_streamsRéponses:
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:
Afin de résoudre ce problème, essayez la commande suivante:
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!
la source
Essaye ça:
Tout d'abord, extraire l'audio dans un conteneur brut
Si vous pouvez l'utiliser dans Pro Tools, vous avez terminé. Autre,
la source