ffmpeg – Как объединить перекрывающиеся клипы из одного видео?

Вопрос или проблема

Я пытаюсь использовать ffmpeg, чтобы взять несколько клипов из видео и объединить их вместе, аналогично этому.

За исключением того, что клипы берутся из временных меток, которые пересекаются. Моя команда выглядит так:

"C:\Program Files\ffmpeg\bin\ffmpeg.exe" -y -i "C:\temp\5min.mp4" ^
-vf "select="between(t,4,6.5)+between(t,5,6)", setpts=N/FRAME_RATE/TB" ^
-af "aselect="between(t,4,6.5)+between(t,5,6)", asetpts=N/SR/TB" "C:\temp\5min-clip.mp4"

Выходное видео содержит только первый клип. Я использую последнюю версию ffmpeg.

Как я могу это сделать?

Та select содержит одно выражение, которое выбирает одни и те же кадры между секундами 5 и 6 дважды, второй between бесполезен. Это не создаёт 2 клипа, а создаёт один с выбранными кадрами.

Вам нужно использовать filter_complex, например, с более простым trim, затем concat (объединение) нескольких выходов:

ffmpeg -y -i "C:\temp\5min.mp4" -filter_complex ^
"[0:v]trim=start=4:end=6.5,setpts=PTS-STARTPTS[v1]; ^
 [0:a]atrim=start=4:end=6.5,asetpts=PTS-STARTPTS[a1]; ^
 [0:v]trim=start=5:end=6,setpts=PTS-STARTPTS[v2]; ^
 [0:a]atrim=start=5:end=6,asetpts=PTS-STARTPTS[a2]; ^
 [v1][a1][v2][a2]concat=n=2:v=1:a=1[finalv][finala]" ^
-map "[finalv]" -map "[finala]" "C:\temp\5min-clip.mp4"

setpts используется для установки корректных временных меток для объединения. Всё аналогично для аудио.

Ответ или решение

Для решения задачи объединения пересекающихся видеоклипов из одного видеофайла с использованием FFmpeg, необходимо понимать, как эффективно работать с фильтрами и их комплексами. Проблема, с которой вы столкнулись, заключается в том, что сейчас ваша команда использует фильтры select и aselect с перекрывающимися временными промежутками, но они не создают два отдельных клипа. Вместо этого они просто выбирают фреймы, попадающие в диапазон пересечения, не создавая логического разделения.

Теория

FFmpeg — это мощный инструмент для обработки видеоданных, который поддерживает широкий спектр фильтров и сложных фильтр-графов. Для решения задачи объединения перекрывающихся клипов, необходимо использовать filter_complex. Этот параметр позволяет создавать комплексные фильтр-графы, благодаря которым можно обрабатывать видео на более глубоком уровне.

Ключевые фильтры для этой задачи:

  • trim и atrim: используются для обрезки видео- и аудиопотоков соответственно, в указанных временных промежутках.
  • setpts и asetpts: применяются для коррекции меток времени фреймов, что необходимо при объединении видеопотоков.
  • concat: используется для склеивания нескольких видео- и аудиопотоков в один.

Пример

Чтобы ясно представить, как это всё реализовать, рассмотрим следующий пример. Данный фильтр-граф отбирает два фрагмента видео, которые частично перекрываются во времени: с 4 до 6.5 секунд и с 5 до 6 секунд.

ffmpeg -y -i "C:\temp\5min.mp4" -filter_complex ^
"[0:v]trim=start=4:end=6.5,setpts=PTS-STARTPTS[v1]; ^
 [0:a]atrim=start=4:end=6.5,asetpts=PTS-STARTPTS[a1]; ^
 [0:v]trim=start=5:end=6,setpts=PTS-STARTPTS[v2]; ^
 [0:a]atrim=start=5:end=6,asetpts=PTS-STARTPTS[a2]; ^
 [v1][a1][v2][a2]concat=n=2:v=1:a=1[finalv][finala]" ^
-map "[finalv]" -map "[finala]" "C:\temp\5min-clip.mp4"

Этот пример демонстрирует, как использовать каждые из вышеупомянутых фильтров. Сначала выделяются нужные фрагменты видео и аудио с помощью trim и atrim. Затем, с помощью setpts и asetpts корректируются метки времени. Это важно для корректного воспроизведения конечного видео. Наконец, фильтр concat объединяет выделенные клипы в один выходной файл.

Применение

Рассмотрев теорию и пример, вы можете применить это к своему конкретному случаю. Если у вас возникает необходимость выделить другие временные промежутки или большее количество сегментов, вы можете просто продолжать добавлять новые пары trim и atrim для каждого из требуемых отрезков видео, и соответственно настроить concat для объединения нужного количества фрагментов.

Также, обратите внимание на необходимость корректного указания путей к исходным и конечным файлам, особенно если вы работаете в среде Windows. Это избавит вас от возможных ошибок, связанных с неправильными путями или отсутствующими файлами.

Наконец, использование FFmpeg открывает возможности не только для простого объединения видео, но и для обширной обработки, включая изменение кодировок, форматов и прочих характеристик видео- и аудиопотоков. Изучая документацию FFmpeg, вы можете находить новые и более эффективные решения для своих задач.

Таким образом, применение комплексных фильтров в FFmpeg для объединения перекрывающихся видеофрагментов предоставит возможность точного и управляемого подхода к пост-обработке медиафайлов. Используйте приведенные здесь инструкции и примеры, чтобы достигнуть желаемого результата в вашем проекте.

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

Капча загружается...