Если вам нужно задержать видео на 3,84 секунды, используйте такую команду:
ffmpeg.exe -i "movie.mp4" -itsoffset 3.84 -i "movie.mp4" -map 1:v -map 0:a -c copy "movie-video-delayed.mp4"
Если вам нужно задержать звук на 3,84 секунды, используйте команду, подобную этой:
ffmpeg.exe -i "movie.mp4" -itsoffset 3.84 -i "movie.mp4" -map 0:v -map 1:a -c copy "movie-audio-delayed.mp4"
Убедитесь, что ваша сборка ffmpeg не слишком старая, более новой, чем 2012, будет достаточно.
объяснение
-itsoffset 3.84 -i "movie.mp4"
Смещает временные метки всех потоков на 3,84 секунды во входном файле, который следует за параметром (movie.mp4).
-map 1:v -map 0:a
Принимает видеопоток со второго (задержанного) входа и аудиопоток с первого входа - конечно, оба входа могут быть одним файлом.
Более подробное объяснение можно найти здесь:
http://alien.slackbook.org/blog/fixing-audio-sync-with-ffmpeg/
ffprobe.exe "input_file.mp4"
илиffmpeg.exe -i "input_file.mp4"
Давайте предположим, что индекс аудиопотока, который должен быть задержан, равен 2 (то есть третий поток), и что задержанный вход является второй (как в моем примере). Чтобы задержать только третий поток, возьмите все остальные потоки с первого входа и только один аудиопоток со второго (задержанного) входа:-map 0:0 -map 0:1 -map 1:2
-map 1:m:language:eng
Имейте в виду, что он выберет все потоки удовлетворяющий критерию, возможно, включающий в себя несколько потоков аудио и / или субтитров. Вы можете найти больше информации в stackoverflow.com/questions/46769419/…-c copy
может быть использован вместо-vcodec copy -acodec copy
, аitsoffset
влияет только на видео, так что, возможно , это будет работать так же ?:ffmpeg -i "movie.mp4" -itsoffset 3.84 -c copy "movie-video-delayed.mp4"
и задержать аудио вместо этого просто добавить отрицательный знак длительности:-3.84
.Сделайте первый звук тишины:
Затем конкатать файлы:
источник