Заменить часть видео (без замены аудио) в ffmpeg

У меня есть видеофайл, который разделен на три разных раздела. Я хочу заменить среднюю часть этого видео другим клипом. Однако я все же хочу сохранить звук исходного видео. Могу я сделать это в ffmpeg?

Вот мои требования:

  1. Исходное видео длится 60 секунд.
  2. Часть, которую я хочу заменить, составляет от 25 до 45 секунд.
  3. Я хочу сохранить исходный звук от 25 до 45 секунд и просто заменить визуальную часть другим клипом.
  4. Сгенерированное видео также будет продолжительностью 60 секунд. Однако у него будет новое видео от 25 до 45 секунд.

Спасибо.

2 ответа
2

Вероятно, вы захотите сделать три отдельных шага:

  1. разделить исходный вход на три клипа (0-25, 25-45, 45-60)
  2. изменить средний клип, чтобы использовать исходное аудио и пользовательское видео (см. ниже)
  3. объединить все три клипа

Чтобы получить средний клип с оригинальным звуком и новым видео, вы можете просто использовать -карта вариант:

ffmpeg -i original.mp4 -i newvideo.mp4 -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 newmiddle.mp4

  • Спасибо @rauberdaniel. 🙂 К сожалению, объединение файлов дает мне ошибку о Non-monotonous DTS in output stream.

    – Настоящий нуб
    19 часов назад

Простой метод – использовать установки фильтр, чтобы добавить задержку к new.mp4, а затем наложение фильтр с enable возможность разместить new.mp4 над original.mp4:

ffmpeg -i original.mp4 -i new.mp4 -filter_complex "[1]setpts=PTS-STARTPTS+25/TB[fg];[0][fg]overlay=enable="between(t,25,45)"[v]" -map "[v]" -map 1:a -c:a copy output.mp4
  • Это предполагает new.mp4 имеет ту же ширину x высоту, что и original.mp4. Если нет, добавьте фильтр scale, scale2ref, pad и / или обрезки.

  • Удалите настройки, если хотите new.mp4 для воспроизведения с собственной отметкой времени 25 секунд вместо отметки времени 0 при наложении.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *