FFmpeg сплит видео и слияние

Я пытаюсь использовать FFmpeg для разделения видео на основе некоторых входов start_time и end_time и заменять их другими видеофайлами. Например, для входа 10 15 мне нужно будет заменить EXACT секунд 10 to 15 другим видео.

ОК. Что мне приходит в голову:

  1. Сначала разделите видео (в данном случае 0-10, 10-15 и 15-end)
  2. Замените 10-15 другим видео
  3. Слейте все суб-видео назад

Первый вопрос: это лучшее и быстрое решение? У нас есть более легкая команда или другие инструменты для замены определенного периода времени в видео с другим видео?

Второй вопрос: Предполагая, что FFmpeg является жизнеспособным решением, когда я просто использую команду ffmpeg -I input.video -ss 10 -t 5 -c copy output.mp4 , мой код обработки видео не может читать и обрабатывать файл. Я использовал инструмент mediainfo для сравнения двух файлов и заметил различия в размерах заголовков, в то время как все связанные с видео кодеком вещи были одинаковыми. Я заметил, что размер HEADER SIZE отличается, что, по-видимому, вызывает проблему. Есть ли способ заставить размер заголовка также (помимо кодеков) быть одинаковым?

UPDATE: вот оригинальный .mp4 файл, который отлично работает в эмуляторе.

One Solution collect form web for “FFmpeg сплит видео и слияние”

Использование файлов trim и concat файлов с различными кодеками

Для этого убедитесь, что ваши отдельные файлы имеют одинаковое разрешение и, в идеале, такую ​​же частоту кадров и выборку поддиапазонов и т. Д. Это предотвратит ошибки или сбои во время конкатенации.

Вы можете делать все за один раз, не разбивая файл, используя фильтры trim и concat :

 ffmpeg -i edv_g24.mp4 -i short-video.mp4 -filter_complex "\ [0:v]trim=0:10,setpts=PTS-STARTPTS[v0]; \ [1:v]trim=0:5,setpts=PTS-STARTPTS[v1]; \ [0:v]trim=15:30,setpts=PTS-STARTPTS[v2]; \ [v0][v1][v2]concat=n=3:v=1:a=0[out]" \ -map "[out]" output.mp4 

Здесь trim используется для указания отдельных частей входных видеопотоков ( 0:v , 1:v ), которые вы позже хотите объединить. Эти части называются от v0 до v2 . (Фильтр setpts сбрасывает временные метки этих отдельных частей на 0, что требуется для конкатенации). Позже мы объединим три части.

Если вы хотите обрезать с определенной отметки времени до конца, используйте trim=start=15 вместо указания диапазона.

Если ваши файлы имеют аудио, вам необходимо обрезать эти потоки отдельно:

 ffmpeg -i edv_g24_2.mp4 -i short-video.mp4 -filter_complex "\ [0:v]trim=0:10,setpts=PTS-STARTPTS[v0]; \ [0:a]atrim=0:10,asetpts=PTS-STARTPTS[a0]; \ [1:v]trim=0:5,setpts=PTS-STARTPTS[v1]; \ [1:a]atrim=0:5,asetpts=PTS-STARTPTS[v1]; \ [0:v]trim=15:30,setpts=PTS-STARTPTS[v2]; \ [0:a]atrim=15:30,asetpts=PTS-STARTPTS[a2]; \ [v0][a0][v1][a1][v2][a2]concat=n=3:v=1:a=1[outv][outa]" \ -map "[outv]" -map "[outa]" output.mp4 

Обратите внимание, что видео и аудио будут перекодированы в этом случае – обязательно укажите соответствующие целевые показатели качества вывода (например, -crf для x264, x265 или libvpx-vp9). Подробнее об этом можно узнать в Wiki FFmpeg, например, для VP9 или H.264 .

Использование отдельных сегментов

Если вы хотите разбить клипы и позже собрать их:

 ffmpeg -i edv_g24.mp4 -ss 0 -to 10 -c copy part1.mp4 ffmpeg -i edv_g24.mp4 -ss 10 -to 15 -c copy part2.mp4 ffmpeg -i edv_g24.mp4 -ss 15 -c copy part3.mp4 ffmpeg -i part1.mp4 -i short-video.mp4 -i part3.mp4 -filter_complex \ "[0:v][1:v][2:v]concat=n=3:v=1:a=0[outv]" \ -map "[outv]" -t 30 output.mp4 

Если файлы имеют аудио, используйте тот же подход, что и выше:

 ffmpeg -i part1.mp4 -i short-video.mp4 -i part3.mp4 -filter_complex \ "[0:v][0:a][1:v][1:a][2:v][2:a]concat=n=3:v=1:a=1[outv][outa]" \ -map "[outv]" -map "[outa]" -t 30 output.mp4 

Это снова приведет к повторному кодированию видеопотока. Это немного более просто, но в противном случае это должно быть эквивалентно вышеупомянутому методу.

Использование concat demuxer

В принципе вы также можете попытаться объединить потоки битов без их повторной кодировки, используя concat demuxer. Создайте файл concat.txt и добавьте следующие записи (соответствующие созданным выше видеоклипам):

 file 'part1.mp4' file 'short-video.mp4' file 'part3.mp4' 

Затем объедините эти отдельные файлы:

 ffmpeg -f concat -i concat.txt -c copy output.avi 

Однако это требует, чтобы ваши клипы имели одинаковый кодек, разрешение, частоту кадров и т. Д. – поэтому он не работает со всеми видами гетерогенных источников.

Использование протокола concat

Вышеупомянутый тип конкатенации уровня файла может быть достигнут с использованием протокола concat , с теми же ограничениями, что и выше (тот же кодек, разрешение и т. Д.):

 ffmpeg -i "concat:part1.avi|part2.avi|part3.avi" -c copy output.mp4 

Для получения дополнительной информации о конкатенации прочитайте соответствующую страницу Wiki FFmpeg .

  • Преобразование MP4 в OGG (видео)
  • Есть ли способ мягко вставлять субтитры в файл mp4 без повторного кодирования?
  • Уменьшить размер MP4
  • Какой самый простой способ сохранить GIFV как простой GIF?
  • Как я могу объединить или объединить два или более файлов MP4, создающих другой файл MP4?
  • Встраивать srt в mp4 / m4v
  • Любой способ восстановить поврежденный mp4?
  • Как удалить несколько сегментов из видео с помощью FFmpeg?
  • Точно вырезать видео файлы из командной строки
  • Каков наилучший способ уменьшить изображение mp4 при сохранении его как можно более резкого?
  • Присоединяйтесь к файлам mp4 в linux
  • Как я могу преобразовать .mov в mp4?
  • Interesting Posts

    ISP блокирует использование ssh?

    Как перейти на Windows 8.1 на компьютере с папкой «Пользователи» на отдельном диске?

    Есть ли какие-либо решения для виртуализации приложений с открытым исходным кодом для Windows

    Как регистрировать процессы в течение рабочего дня?

    Создание ярлыков для дублирования вкладки

    Как скопировать все файлы определенного типа в папку из командной строки?

    Как указать конкретный рабочий лист для открытия книги MS Excel с помощью гиперссылки?

    Как найти ярлык «Цель рекламного объявления»?

    Ubuntu перезапускает случайно

    Откат драйвера в Windows через командную строку

    Ноутбук в случайном порядке Включение и выключение

    Что делать, если жесткий диск разделен на более чем 26 разделов в Windows?

    Как использовать SSH для копирования файла на удаленный сервер под другим пользователем

    Notepad ++ не запускается (notepad ++. Exe присутствует в диспетчере задач)

    Как остановить получение обновлений для Средство удаления вредоносных программ Windows и Защитник Windows?

    Давайте будем гением компьютера.