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 в Mp3 с миниатюрой
  • Встраивать srt в mp4 / m4v
  • Присоединяйтесь к файлам mp4 в linux
  • Как преобразовать .iso в .mp4 без установки с помощью ffmpeg
  • Пакетное преобразование .mkv в .mp4
  • Преобразование FLV в MP4 с использованием FFMPEG и сохранение качества
  • Преобразование из WebM в MP4 в Ubuntu происходит медленно и плохо
  • FFMPEG разделяет MP4 с тем же качеством
  • Как удалить несколько сегментов из видео с помощью FFmpeg?
  • Уменьшить размер MP4
  • FFMPEG: конвертировать MP4 в тот же MP4 (в другом контейнере) и добавлять субтитры
  • FFMPEG конвертирует flv в mp4 без потери качества
  • Interesting Posts

    Как я могу воспроизвести онлайн-видео в полноэкранном режиме? И введите текстовый редактор одновременно?

    Как извлечь одну папку и ее подпапки из «tarball» (.tar.gz)

    Как восстановить форму в Firefox * без * установки плагина?

    Почему я не могу использовать общую папку VirtualBox?

    У вас в настоящее время нет разрешения на доступ к этой ошибке папки

    Как заставить Thunderbird писать почту с «Параграфом» по умолчанию?

    Импорт фотографий в Mac OS X

    Каковы эти различные виды использования памяти в диспетчере задач Windows 7?

    Ищете новый бесплатный брандмауэр (у Sunbelt есть огромная дыра)

    Новая вкладка gnome-terminal в одном и том же пути

    Как сопоставить Control to Escape на «одиночном» прессе под Linux?

    Команда xset dpms не отключает монитор

    Переустановите Mac OS X: «Mac OS X не может быть установлен на этом компьютере».

    Почему «cd ..» работает в командной строке Windows?

    Как я могу изменить дату, полученную в данных EXIF?

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