Как объединить видеофайлы с помощью FFmpeg
Contents
Ожидается, что к 2025 году у YouTube будет почти 2,85 миллиарда пользователей по всему миру. С ростом числа зрителей видео нет сомнений в том, что спрос на редактирование видео будет расти.
Редактирование видео — это часть процесса производства видео, которая включает в себя такие задачи, как упорядочивание и объединение видео, добавление графики, добавление субтитров и многое другое.
Помимо использования программного обеспечения для редактирования видео, для которого часто требуется платная лицензия, вы также можете использовать FFmpeg, который является полностью бесплатным и сочетает в себе лучшие доступные варианты бесплатного программного обеспечения.
В этом уроке я покажу вам несколько примеров использования редактора командной строки FFmpeg для объединения видеофайлов. Вы сможете объединить input1.mp4 и input2.mp4 с помощью FFmpeg в конце этого урока:
Ваш браузер не поддерживает HTML-видео.Предварительное условие
Вам необходимо скачать FFmpeg. Для справки: в этом руководстве используется версия FFmpeg v5.0.1.
FFmpeg — это комплексное кроссплатформенное решение для записи, преобразования и потоковой передачи аудио и видео. Он также может декодировать, кодировать, транскодировать, мультиплексировать, демультиплексировать, передавать, фильтровать и воспроизводить практически любой медиафайл в любом формате. Поскольку FFmpeg предлагает гибкость в управлении медиафайлами, мы можем использовать его для объединения видеофайлов, используя различные методы.
Прежде чем научиться использовать FFmpeg для объединения видеофайлов, важно знать, что такое формат контейнера и что такое видеокодек . Типы видеокодов и форматы контейнеров видео будут определять, какой метод мы будем использовать для объединения видеофайлов.
Что такое формат контейнера
Формат контейнера — это формат видеоконтейнера. Контейнер видео содержит видеопотоки, аудиопотоки, субтитры и другие метаданные видеофайла.
Контейнерный формат видео также может быть известен как расширение файла. Формат контейнера видео можно найти в его имени файла. Одними из наиболее часто используемых форматов видеоконтейнеров являются MP4, MOV, MKV и т. д.
Данные, содержащиеся в видеофайле, сжимаются и распаковываются с использованием кодека.
Что такое видеокодек
Видеокодек — это инструмент, который сжимает или распаковывает видеофайл. Слово кодек происходит от слов en co der и dec заказ.
Видеокодер сжимает видеофайл, а видеодекодер распаковывает его. Формат сжатых данных обычно соответствует стандартному формату кодирования видео или формату сжатия видео. Одними из наиболее распространенных и популярных видеокодеков являются H.264 (MPEG-4, часть 10), H.262 (MPEG-2, часть 2) и Motion JPEG (MJPEG).
Вы можете проверить кодек вашего видео, выполнив эту команду в терминале:
ffprobe -i input. mp4
Видеокодек можно найти в распечатанной информации:
Видео выше сжато с использованием кодека H.264 с основным профилем.
Хотя названия формата контейнера и видеокодека могут звучать одинаково (MP4 и MPEG-4), на самом деле они разные.
После выполнения приведенной выше команды для проверки кодеков ваших видео вы можете решить, какой метод следует использовать для объединения видеофайлов. Существует два метода объединения видеофайлов с одинаковыми кодеками и метод для видеофайлов с разными кодеками.
Объединение видеофайлов с одинаковыми кодеками
Способ 1. Использование демультиплексора concatДемультиплексор concat считывает список видеофайлов из текстового файла и последовательно демультиплексирует их. Каждое видео начинается там, где заканчивается предыдущее.
Чтобы использовать демультиплексор concat, видеофайлы должны иметь одинаковых потоков . Однако они могут быть упакованы в контейнеры разных форматов, например . mp4
, .mov
, .wmv
и т. д.
Сначала создайте файл .txt
и укажите пути к видеофайлам, которые вы хотите объединить. Вы можете использовать относительные пути, которые относятся к местоположению относительно вашего текущего каталога, или абсолютные пути, как в примере ниже:
join_video.txt
файл /Users/Video/input1.mp4 файл /Пользователи/Видео/input2.mp4
Примечание : Вы можете добавить более двух видеофайлов.
Затем запустите команду FFmpeg.
ffmpeg -f concat -safe 0 -i join_video.txt -c копировать output_demuxer.mp4
-safe 0
добавляется так, что любое имя файла будет принято. Значение по умолчанию 1
отклонит абсолютные пути в текстовом файле.
-c copy
скопирует все потоки. Это заставляет FFmpeg игнорировать процесс декодирования и кодирования и выполнять только демультиплексирование и мультиплексирование.
Поскольку этот метод позволяет «потоковое копирование» файлов вместо их повторного кодирования, объединение происходит очень быстро.
Bear Tip 🐻: вы можете опустить
-safe 0
, если вы используете относительные пути.
Объединенное видео начинается с первого видео, input1.mp4 , которое длится 9 секунд.
Второе видео, input_2.mp4 следует сразу за первым видео.
Видео с разными форматами контейнеров
Форматы видеоконтейнеров могут быть разными, но их потоки должны быть одинаковыми.
На приведенных ниже снимках экрана показана информация о видео MP4, input1.mp4, и видео MOV, input2.mov , которые имеют одинаковые видеопотоки.
видеопотока видео выше имеют одинаковый кодек (h364), профиль кодека (основной), формат пикселей (yuv420p) и разрешение (1920×1080). Это свойства потока, которые должны быть одинаковыми для использования демультиплексора concat.
Если видео содержат аудиопотока , кодек (aac), профиль кодека (LC), частота дискретизации или частота (44 100 Гц), структура каналов (стерео) и формат выборки (fltp) должны совпадать. Битрейт значения не имеет.
Способ 2. Использование протокола «
concat»Протокол concat работает только с видеоформатами, которые поддерживают конкатенацию на уровне файлов, например MPEG-2 TS. Его нельзя использовать для других видеоформатов, таких как MP4 и WEBM.
ffmpeg -i "concat:input1.ts|input2.ts" -c копировать output_protocol.ts
Подобно предыдущему методу, протокол concat позволяет выполнять «потоковое копирование» файлов путем добавления параметра -c copy
.
Если вы используете его для видеоформатов, которые не поддерживаются, в выходном видео будет сохранено только первое входное видео. Например, вы можете попробовать использовать этот метод для объединения двух файлов MP4, использованных в предыдущем примере:
ffmpeg -i "concat:input1. mp4|input2.mp4" -c копировать output_protocol.mp4
Общая длина выходного видео, output_protocol.mp4 , составляет всего 9 секунд, что совпадает с первым входным видео, input1.mp4.
Видео заканчивается после первого видео.
Хотя многие форматы видео не поддерживаются, его очень легко использовать, если вы объединяете видео в поддерживаемых форматах, поскольку объединение можно выполнить одной командой в терминале без текстового файла.
Возможность использовать параметр -c copy
также делает этот метод очень эффективным для объединения видеофайлов, поскольку он не требует повторного кодирования, что занимает много времени.
Объединение видеофайлов с разными кодеками
Видеофайлы не всегда имеют одинаковые кодеки. Могут быть сценарии, когда видео, которые вы хотите объединить, имеют разные кодеки.
Например, вы можете объединить видео в формате MP4 (MPEG-4, часть 14) и видео в формате WMV. В этом случае вы не можете использовать предыдущие методы для объединения видеофайлов.
Использование фильтра concat
Чтобы использовать фильтр
Запустите команду для объединения видео:
ffmpeg -i input1.mp4 -i input2.wmv -filter_complex "[0:0][0:1][1:0][1:1]concat=n= 2:v=1:a=1[outv][outa]" -map "[outv]" -map "[outa]" output.mp4
-filter_complex
позволяет использовать фильтр concat с несколькими входами и выходами.
[0:0][0:1]
и [1:0][1:1]
указать FFmpeg взять видеопоток №0 и аудиопоток №1 из первого входного видео и второго входного видео соответственно .
n=2
задает количество сегментов, эквивалентное количеству входных видео.
v=1
и a=1
задайте количество выходных видео- и аудиопотоков, которые также являются количеством видео- и аудиопотоков в каждом сегменте.
[outv][outa]
— результирующие конкатенированные потоки, которые затем выбираются для выходного видео.
В отличие от демультиплексора и протокола concat, фильтр concat не позволяет «потоковое копирование» видео. Видео нужно будет перекодировать, поэтому объединение видео займет много времени.
Объединение видеофайлов с помощью FFmpeg становится сложным и трудоемким, если у вас есть видео с разными потоками, форматами, разрешениями, частотой кадров и другими свойствами.
Более простой и быстрой альтернативой является использование Bannerbear Movies API, так как он выполняет все вышеперечисленные (и даже больше) работы с гораздо меньшими усилиями.
Обрезка и кодирование файлов будут выполняться автоматически для создания одного видео в формате MP4 с желаемым разрешением. Вы можете объединять видеофайлы разных форматов и даже другие медиафайлы, такие как MP3 и PNG, в одном запросе API без ручного масштабирования и преобразования формата.
переменные данные = { "ширина": 800, "высота": 500, «переход» : «затухание», "soundtrack_url": "https://ffmpeg-bb.s3.ap-southeast-1.amazonaws.com/audio.mp3", "входы" : [ { "asset_url": "https://ffmpeg-bb.s3.ap-southeast-1.amazonaws.com/input1.mp4" }, { "asset_url": "https://ffmpeg-bb.s3.ap-southeast-1.amazonaws.com/input2.wmv", "обрезать_до_длины_в_секундах": 3 }, { "asset_url": "https://ffmpeg-bb.s3.ap-southeast-1.amazonaws.com/image.png", "обрезать_до_длины_в_секундах": 3 } ] } fetch('https://api.bannerbear.com/v2/movies', { метод: «ПОСТ», тело: JSON.stringify(данные), заголовки: { «Тип контента»: «приложение/json», «Авторизация»: «Носитель ${API_KEY}» } })
Используя видеофайлы из последнего примера, дополнительный звук в формате MP3 и изображение в формате PNG, вот результат, сгенерированный с использованием API 🔊:
Ваш браузер не поддерживает HTML-видео.Что дальше
Монтаж видео — непростая работа. После объединения видео необходимо сделать много вещей, чтобы ваше видео выделялось, например, добавить к нему субтитры и сделать миниатюру, которая привлечет внимание вашей аудитории.
Если вы хотите перейти к следующим шагам, вот несколько руководств, которые могут вам помочь:
- Как извлечь изображения из видео с помощью FFmpeg
- Как установить пользовательский эскиз для видеофайла с помощью FFmpeg
- Как добавить субтитры в видеофайл с помощью FFmpeg
Как объединить/связать два видеоклипа в Premiere?
Каждый раз, когда я ищу эту проблему в Google, единственные варианты — как связать аудиоклипы с видео или как синхронизировать аудио с видеоклипами.
Мне нужно объединить/связать/объединить изображение с видеоклипом, чтобы при редактировании одного из них то же самое происходило с другим клипом, как при объединении слоев в Photoshop.
- видео
- премьера
0
ОБЪЕДИНЕНИЕ ВИДЕОКЛИПОВ
Для объединения видеоклипов существует так называемая вложенная последовательность.
Очень мощная техника. При добавлении клипов на временную шкалу вы работаете с так называемой последовательностью (обычно называемой последовательностью 01), перетащите два клипа на временную шкалу и переименуйте последовательность 01, например, в «Моя однодневная поездка на рынок».
Выберите другой видеоклип и перетащите его на кнопку «Новый элемент». В правом нижнем углу окна проекта. Это создаст ДРУГУЮ последовательность, которую вы можете переименовать как свою «мастер-последовательность» из того, что, вероятно, будет называться «последовательностью 02».
Теперь вы можете перетаскивать исходный эпизод, как клип, В свой основной эпизод. И тада.
Прелесть вложенных последовательностей в том, что вы можете вернуться назад и отредактировать их заново, и они будут обновляться во всех других последовательностях, где вы их используете.
ОБЪЕДИНЕНИЕ АУДИО И ВИДЕО (оригинальный ответ о слиянии аудио и видео)
Импортируйте свои клипы в проект. Выберите свои видео- и аудиоклипы (чтобы они оба были выбраны) Щелкните правой кнопкой мыши и «Объединить клипы…» Он попросит синхронизировать вход (начало аудио и видео) или выход (конец аудио и видео). Нажмите «ОК», и теперь у вас будет файл слияния ваших видео- и аудиоклипов, которым вы можете управлять как одним клипом.
Надеюсь, это поможет.
1
Я заменил видеоклип композицией после эффектов. затем я добавил картинку в вырезку после эффектов, и она была там в премьере как один клип.
Я не уверен, что то, о чем вы просите, возможно, но вот несколько идей, которые могут помочь.
Связывание групп : Вы можете сгруппировать 2 файла вместе Clip > Group.
Применение эффекта к нескольким видеоклипам : Если вы хотите скопировать эффекты, вы можете выбрать затронутый клип, скопировать эффект на панели предварительного просмотра клипа «Элементы управления эффектами» и просто вставить его в клипы по отдельности или выбрать все клипы и ctrl+V или если ваш исходный клип имеет только один эффект (без ключевого кадра непрозрачности и т.