Дополнительно
Как конкатенировать два файла MP4 с помощью FFmpeg?
Я пытаюсь объединить два файла mp4 с помощью ffmpeg. Мне нужно, чтобы это был автоматический процесс, поэтому я выбрал ffmpeg. Я конвертирую два файла в файлы .ts, затем объединяю их и пытаюсь закодировать объединенный файл .ts. Файлы закодированы в h264 и aac, и я надеюсь сохранить качество таким же или максимально близким к исходному.
ffmpeg -i part1.mp4 -vcodec copy -vbsf h264_mp4toannexb -acodec copy part1.ts
ffmpeg -i part2.mp4 -vcodec copy -vbsf h264_mp4toannexb -acodec copy part2.ts
cat part1.ts part2.ts > parts.ts
ffmpeg -y -i parts.ts -acodec copy -ar 44100 -ab 96k -coder ac -vbsf h264_mp4toannexb parts.mp4
К сожалению, во время кодирования я получаю следующее сообщение об ошибке от ffmpeg:
[h264 @ 0x1012600]sps_id out of range
[h264 @ 0x1012600]non-existing SPS 0 referenced in buffering period
[h264 @ 0x1012600]sps_id out of range
[h264 @ 0x1012600]non-existing SPS 0 referenced in buffering period
[NULL @ 0x101d600]error, non monotone timestamps 13779431 >= 13779431kbits/s
av_interleaved_write_frame(): Error while opening file
Это происходит примерно на половине пути кодирования, что заставляет меня думать, что вы не можете соединить два файла .ts вместе и заставить их работать.
340
18
В FFmpeg есть три метода конкатенации:
1. concat video filter
Обратите внимание, что этот метод выполняет повторное кодирование.
2. concat demuxer
Для Windows:
3. concat protocol
Этот метод не работает для многих форматов, включая MP4, из-за природы этих форматов и упрощенной конкатенации, выполняемой этим методом.
Какой метод использовать
concat filter: Используйте, если ваши входные данные не имеют одинаковых параметров (ширина, высота и т.д.), или не являются одинаковыми форматами/кодеками, или если вы хотите выполнить какую-либо фильтрацию. (Вы можете перекодировать только те входы, которые не совпадают, чтобы они имели одинаковые кодеки и другие параметры, а затем использовать concat demuxer, чтобы избежать повторного кодирования других входов).
concat demuxer: Используется, когда вы хотите избежать повторного кодирования и ваш формат не поддерживает конкатенацию на уровне файлов (большинство файлов, используемых обычными пользователями, не поддерживают конкатенацию на уровне файлов).
concat protocol: Используется с форматами, поддерживающими конкатенацию на уровне файлов (MPEG-1, MPEG-2 PS, DV). Не используйте с MP4.
Если вы сомневаетесь, попробуйте использовать concat demuxer.
Также см.
ДЛЯ ФАЙЛОВ MP4
Для .МР4 файлы (которые я получил от DailyMotion.com: в 50-минутный эпизод ТВ, загружаемые только в три части, как три .MP4 видео файлы) следующее решение было эффективным для для Windows 7, а не **** не предусматривают повторного кодирования файлов.
Я переименовал файлы (как файл file1.МР4, файл2.МР4, файл file3.МР4) таким образом, чтобы части были в правильном порядке для просмотра полный эпизод ТВ.
Затем я создал простой батник (функция concat.летучая мышь), со следующим содержанием:
В батник и ffmpeg.exe должен быть помещен в ту же папку как .mp4 файлы должны быть соединены. Затем запустите пакетный файл. Это обычно занимает менее десяти секунд, чтобы убежать. .
Дополнение (2018/10/21) -
Если то, что вы ищете-это способ для указания всех mp4 файлов в текущей папке без перепечатывания, попробуйте это в Windows батник вместо (должны включить параметр -безопасная 0):
Это работает на Windows 7, в пакетном файле. Дон'т попробуйте использовать его в командной строке, потому что она работает только в пакетном файле!
Здесь'ы быстро (занимает меньше 1 минуты) и без потерь способ сделать это без использования промежуточных файлов:
В "ЛС" и содержит файлы, чтобы присоединиться к В "перл", которая создает файл конкатенации на лету в трубу В " Я" и говорит ffmpeg для чтения из трубы
(Примечание - мои файлы были без пробелов и странностей в них - вы'll необходимо соответствующее оболочки-побег, если вы хотите сделать эту мысль с "жесткий" и файлы).
для файлов mp4:
Если они не точно такие же (100% один и тот же кодек, то же разрешение, тот же тип) mp4 файлов, то вам придется транс-код их в промежуточные потоки сначала:
Внимание!: Выход будет как первый файл ( а не второй)
Я пытался объединить три `.аудио файлы MP3 в один.файл M4A и этот ffmpeg команду работает.
Ввод команды:
Значения : " по-filter_complex функция concat=П=3:V с=0:а=1 с" : <БР>
Для получения дополнительной информации: использовать ffmpeg на ч Полная` распечатать все параметры (включая формат и кодек конкретные варианты, очень долго)
В итоге я использовал mpg в качестве промежуточного формата, и все заработало (ВНИМАНИЕ, это опасный пример, -qscale 0 перекодирует видео...).
Подробной документации на различные способы объединения в ffmpeg может быть найден здесь]1.
Вы можете использовать 'фильтр функция concat' для быстрого сцепления.
Он выполняет повторное кодирование. Этот вариант лучше, когда входы имеют различные видео/аудио форматы.
Для объединения 2-х файлов:
Для объединения 3 файла:
Это работает для одной а также нескольких типов входных файлов.
это работало для меня (на Windows)
пример...
<Н2>питон</Н2>
Используя некоторые Python код, чтобы сделать это с, как многие МР4 есть в папке (установить Python от python.org скопируйте и сохраните этот код в файл под названием mp4.py и запустить его из cmd в открывшемся в папку с Python mp4.py и все MP4 в папке будут объединены)
в
<Н3>Версия 2 С Python</Н3>
Взято из моего поста на моем блоге]1, это, как я делаю это в Python:
в
Я нашел оператора труба не работает для меня, когда, используя опцию 3, чтобы функция concat несколько файлов mp4 на Mac в принятой ответ.
Следующие один-лайнер работает на Mac (высокая Сьерра) для объединения файлов mp4, без посредников требуется создание файла.
пакет ffmpeg -F в функции concat просмотра 0 -Я &л;(для F в ./*.МР4; делать Эхо "файл '$ФРД/$Ф' и"; сделал) -C копировать выхода.МР4
на основе rogerdpack's и Ed999'ответы, Я'вэ создал свой .ш версия
он объединяет все
*.МР4 файлы в текущей папке в которую вошли-вышли.МР4
протестировал на Mac.
в результате объем-точную сумму моего 60 проверенные файлы. Не должно быть каких-либо потерь. Просто то, что мне нужно
Из документации здесь: https://trac.ffmpeg.org/wiki/Concatenate
Этот подход работает на всех платформах.
Мне нужна возможность, чтобы инкапсулировать это в скрипт платформы, так как я использовал
свободно-ffmpeg С
и придумал следующее решение:Вот скрипт, который я сделал, чтобы объединить несколько GoPro mp4'ов в 720p mp4. Надеюсь, это поможет.
Для
.файлов mp4
, я нашел это работает лучше и быстрее использовать инструмент командной строки с открытым исходным кодом:mp4box
. Затем вы можете использовать это так:Скачать здесь для большинства платформ: https://gpac.wp.imt.fr/mp4box/
Слияние всех mp4 файлов из текущего каталога
Я лично, как не создавая внешнего файла, который мне надо потом удалить, так что мое решение было следующим, который включает файлы нумерации списка (как file_1_name, file_2_name, file_10_name, file_20_name, file_100_name`, ...)
После различных попыток ниже скрипт работал для меня на Windows 10 с помощью PowerShell.
Здесь первые две строки создают текст temp.txt файл, который имеет следующее содержание
3-й, 4-й линии проверяет, если ffmpeg не опубликованным на пути и создать "и присоединился.МР4"и
Основные отличия от других ответов как ниже
для мой файл mp4 выше работал, Вам может понадобиться использовать другой альтернативы, как показано ниже, в зависимости от вашего кодирования.
Все возможные фильтры битовый поток может быть найден в https://ffmpeg.org/ffmpeg-bitstream-filters.html
Здесь's мой способ соединения каталоги с mp4 файлы, используя команду подстановки и метода concat видео фильтр (это будет перекодировать) - подумал, что кто-то будет пользоваться этой фразой, особенно если у вас много файлов (я просто зарегистрирован 17 файлов одним махом):
попробуйте $(для F в *.МР4 ; делать Эхо -Н " С-я $е " и сделали) -filter_complex \ на "$(Я=0 ; для F в *.МР4 ; делать Эхо -Н " и[$я:в] [$я:] и" ; Я=$((Я+1)) ; сделано \ &ампер;&ампер; Эхо "функция concat=н=$я:в=1:а=1 [В] [а] то") на" карта " и[в] на" карта " и[А] на" выход.МР4
Б. Н. эта команда объединяет свои файлы в том порядке, в котором они'повторный им (т. е. в том порядке, как они'вновь представил если выполнить команды
ls *.МР4
) - в моем случае, каждый из них имел номер трека, так он работал отлично.Протокол конкатенацию описано здесь; https://trac.ffmpeg.org/wiki/Concatenate#protocol
При реализации через именованные каналы, чтобы избежать промежуточных файлов
Очень быстро (читай мгновенного), нет кадров сократилась, и работает хорошо.
Не забудьте удалить именованный канал файлы и не забудьте проверить, если видео H264 и AAC, которых можно сделать только через FFmpeg -I имя_файла.МР4 (проверьте для H264 и AAC упоминаний)