La conversion de MP4 en WAV entraîne la désynchronisation avec FFmpeg, mais pas avec VLC

1

La conversation en .wav à partir d'une vidéo au format .mp4 provoque une désynchronisation lorsque la conversion est effectuée avec FFmpeg, mais pas avec VLC. J'essaie de comprendre cela depuis des jours et toute aide est grandement appréciée :)

Je commence par une vidéo enregistrée avec OBS au format .flv. J'utilise ensuite un fichier de commandes avec FFmpeg:

"for %%a in ("*.flv") do ffmpeg -i %%a -vcodec copy -acodec copy %%~na.mp4
pause"

ce qui me donne le fichier .mp4.

J'utilise ensuite la méthode graphique VLC pour convertir l'audio du fichier .mp4 en .wav afin de mieux le modifier dans Audacity. J'ai essayé d'utiliser un fichier de commandes avec FFmpeg au lieu de l'interface graphique de VLC pour le rendre plus simple. Cependant, chaque fois que je fais la conversion à l'aide d'un fichier de commandes et de FFmpeg, puis que je mets le fichier .wav converti au format FFmpeg sur la timeline dans Adobe Premiere avec la vidéo .mp4, l'audio du fichier .wav converti avec FFmpeg est compensé avec la piste audio de la vidéo .mp4, mais lorsque la conversion au format .wav est identique à l'aide de l'interface graphique de VLC, les pistes audio résultantes .wav et .mp4 d'origine sont synchronisées.

Les fichiers de commandes que j'ai essayés avec différentes options, mais dont les pistes audio des fichiers .mp4 et .wav ne correspondent toujours pas sont les suivants:

"for %%a in ("*.mp4") do ffmpeg -i %%a -vn %%~na.wav pause"    


"for %%a in ("*.flv") do ffmpeg -i %%a -acodec pcm_s16le %%~na.wav pause"    


"for %%a in ("*.mp4") do ffmpeg -i %%a -ab 1536k -ac 2 -ar 48000 -acodec pcm_s16le %%~na.wav -loglevel verbose -report -stats  pause"  


"for %%a in ("*.flv") do ffmpeg -i %%a -vcodec copy -acodec copy %%~na.mp4 %%~na.aac -loglevel verbose -report pause"

J'ai aussi essayé d'utiliser les options:

-vn -copyts -ss 0 -y -avoid_negative_ts 1 -async 1 ...etc.

Tout en rien.

Puisque VLC peut gérer la même conversion, cela signifie probablement que je n’utilise pas seulement la syntaxe correcte: /

EDIT: La sortie de la console pour

"for %%a in ("*.mp4") do ffmpeg -i %%a -vn %%~na.wav -loglevel verbose -report pause":

Y:\Dxtory\Cataclysm Dark Days Ahead\Test Batch File>for %a in ("*.mp4") do ffmpe
g -i %a -vn %~na.wav

Y:\Dxtory\Cataclysm Dark Days Ahead\Test Batch File>ffmpeg -i CataclysmDDAWCam0M
icOff2nd.mp4 -vn CataclysmDDAWCam0MicOff2nd.wav
ffmpeg version N-62162-gec8789a Copyright (c) 2000-2014 the FFmpeg developers
  built on Apr  4 2014 22:08:30 with gcc 4.8.2 (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-libcaca --enable-libfreetyp
e --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --ena
ble-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-l
ibopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libsp
eex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aa
cenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavp
ack --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable
-zlib
  libavutil      52. 74.100 / 52. 74.100
  libavcodec     55. 57.100 / 55. 57.100
  libavformat    55. 36.101 / 55. 36.101
  libavdevice    55. 11.100 / 55. 11.100
  libavfilter     4.  3.100 /  4.  3.100
  libswscale      2.  6.100 /  2.  6.100
  libswresample   0. 18.100 /  0. 18.100
  libpostproc    52.  3.100 / 52.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'CataclysmDDAWCam0MicOff2nd.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf55.36.101
  Duration: 00:00:17.67, start: 0.000000, bitrate: 99559 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709)
, 1920x1080, 99437 kb/s, 30 fps, 30 tbr, 16k tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 10
9 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
Output #0, wav, to 'CataclysmDDAWCam0MicOff2nd.wav':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    ISFT            : Lavf55.36.101
    Stream #0:0(und): Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, stereo
, s16, 1536 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
Stream mapping:
  Stream #0:1 -> #0:0 (aac -> pcm_s16le)
Press [q] to stop, [?] for help
size=    3304kB time=00:00:17.62 bitrate=1536.0kbits/s
video:0kB audio:3304kB subtitle:0kB other streams:0kB global headers:0kB muxing
overhead: 0.002365%

Y:\Dxtory\Cataclysm Dark Days Ahead\Test Batch File>pause
Press any key to continue . . .

EDIT: ajout d’un nouveau test plus court .flv, .mp4 et de deux fichiers .wav convertis avec FFmpeg et VLC, sortie de la console et fichier journal sur Google Drive https://drive.google.com/folderview?id=0B1bpDgYQQbbMmhmcDEtcldhSUE&usp=sharing

Ferco
la source
Veuillez fournir les sorties de console des commandes. Il est préférable d'utiliser la commande sur un seul fichier à des fins d'illustration plutôt que comme un lot contre plusieurs entrées. Vous devez le résoudre sur un fichier avant d'essayer d'exécuter la conversion sur plusieurs entrées.
Rajib
J'ai édité la question d'origine pour ajouter la sortie de console à l'une des commandes ci-dessus et j'ai exécuté ces fichiers de commandes par lots sur des fichiers d'entrée uniques; les fichiers .flv et .mp4 séparément.
Ferco
Comment est-il "compensé"? En avant / en arrière de quelle durée? Pouvez-vous faire ffmpeg -i CataclysmDDAWCam0MicOff2nd.wavet fournir la sortie console de cela?
Rajib
Le fichier .wav converti à partir du format .mp4 avec FFmpeg est en retard sur la timeline par rapport à la piste audio de ce même fichier .mp4 sur la timeline. La sortie que vous avez demandée: Disposition de canal deviné pour le flux d'entrée n ° 0.0: entrée stéréo n ° 0, wav, extrait de 'CataclysmDDAWCam0MicOff2nd.wav': Métadonnées: encodeur: Lavf55.36.101 Durée: 00: 00: 17.62, débit: 1536 ko / s # 0: 0: Audio: pcm_s16le ([1] [0] [0] [0] / 0x0001), 48000 Hz, stéréo, s16, 1536 ko / s Au moins un fichier de sortie doit être spécifié
Ferco
La durée signalée est de 17,62 secondes. Le MP4 était de 17,67. La différence est petite, mais si cela devait causer un décalage, l'audio devrait arriver plus tôt. Pourriez-vous poster le fichier mp4 quelque part (par exemple dropbox) pour le tester?
Rajib