web-dev-qa-db-fra.com

Dans ffmpeg, comment ne retarder que l'audio d'une vidéo au format .mp4 sans convertir l'audio?

Dans mon fichier .mp4, le délai audio est de -3840 ms. Je l'ai synchronisé dans KMplayer et je ne souhaite pas utiliser MKVGUI pour créer un fichier .mkv. J'ai juste besoin de retarder l'audio de -3840 ms, tout le reste intact.
Quel serait le bon commandement pour accomplir cela en utilisant ffmpeg?
J'apprécierais votre aide.

38
Alireza

Si vous avez besoin de retarder video 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 version de ffmpeg n’est pas trop ancienne. Une version plus récente que 2012 suffira.


Explication

-itsoffset 3.84 -i "movie.mp4"

Décalage les horodatages de tous les flux de 3,84 secondes dans le fichier d'entrée que suit l'option (movie.mp4).

-map 1:v -map 0:a

Prend le flux vidéo de la deuxième entrée (retardée) et le flux 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/

60
Weaver

faire l'audio du premier silence:

ffmpeg -f lavfi -i anullsrc = channel_layout = 5.1: sample_rate = 48000 -t 3 silence_3_sec.mp3

puis concattre des fichiers:

ffmpeg -i "concat: silence_3_sec.mp3 | input.mp3" -acodec copy out.mp3

0
Ivan Malyshev