Dans mon fichier .mp4, le délai audio est de -3840 ms. Je l'ai synchronisé dans KMplayer et je ne veux pas utiliser MKVGUI pour créer un fichier .mkv. J'ai juste besoin de retarder l'audio de 3840 ms, tout le reste doit rester intact.
Quelle serait la bonne commande pour accomplir cela en utilisant ffmpeg?
Je vous serais reconnaissant pour votre aide.
Réponses
Trop de publicités?Si vous avez besoin de retarder la vidéo de 3,84 secondes, utilisez une commande comme celle-ci :
ffmpeg.exe -i "movie.mp4" -itsoffset 3.84 -i "movie.mp4" -map 1:v -map 0:a -c copy "movie-video-delayed.mp4"
Si vous avez besoin de retarder l'audio de 3,84 secondes, utilisez une commande comme celle-ci :
ffmpeg.exe -i "movie.mp4" -itsoffset 3.84 -i "movie.mp4" -map 0:v -map 1:a -c copy "movie-audio-delayed.mp4"
Assurez-vous que votre installation de ffmpeg n'est pas trop ancienne, une version plus récente que 2012 suffira.
Explication
-itsoffset 3.84 -i "movie.mp4"
Décale les horodatages de toutes les pistes de 3,84 secondes dans le fichier d'entrée qui suit l'option (movie.mp4).
-map 1:v -map 0:a
Prend la piste vidéo de la seconde entrée (avec retard) et la piste audio de la première entrée - les deux entrées peuvent bien sûr être le même fichier.
Une explication plus détaillée peut être trouvée ici :
http://alien.slackbook.org/blog/fixing-audio-sync-with-ffmpeg/
J'ai extrait l'audio avec Audacity, puis j'ai coupé un peu de silence (égal au décalage) à la fin de la vidéo, et je l'ai ajouté au début de l'audio.
Après avoir apporté d'autres ajustements à l'audio comme normalisation, j'ai exporté l'audio et remplacé l'audio d'origine via ffmpeg :
ffmpeg-i "in.mp4" -i "synced.m4a" -vcodec copy -acodec copy -map 0:0 -map 1:0 out.mp4
Comme indiqué dans la réponse actuellement le mieux notée, vous pouvez utiliser -itoffset de ffmpeg. Et selon le wiki ffmpeg, si vous ne voulez pas décaler tous les flux, il vous suffit de spécifier le fichier d'entrée deux fois, une fois pour les flux que vous souhaitez conserver tels quels et une fois de plus pour les flux que vous souhaitez décaler. Ensuite, il vous suffit de mapper les flux que vous voulez sur le fichier de sortie final. De cette façon, il n'est pas nécessaire d'extraire les flux pour ensuite les remuxer ensemble plus tard.
Par exemple (copié du wiki), si vous voulez que tous les flux audio soient décalés de 5 secondes
ffmpeg -i video.mp4 -itsoffset 5 -i video.mp4 -map 0:v -map 1:a out.mp4
-map 0:v copiera la vidéo du premier fichier d'entrée (video.mp4)
-map 0:a copiera l'audio du deuxième fichier d'entrée. Qui se trouve être aussi video.mp4, mais décalé de 5 secondes grâce à l'utilisation de -ifoffset juste avant le drapeau -i correspondant