Как объединить два файла mp4 без потери качества?

51

У меня есть два высококачественных файла mp4, которые состоят из двух частей одного шоу.

Я хочу объединить их в один файл, и я обычно использую VirtualDub для объединения моих файлов ... Но, похоже, он не поддерживает mp4.

Какие альтернативы доступны (особенно те, которые не требуют перекодирования)?

Паоло Бергантино
источник
Смотрите также stackoverflow.com/questions/7333232/...
rogerdpack

Ответы:

41

Я обычно использую VirtualDub для объединения моих файлов, но, похоже, он не поддерживает mp4. Так какие есть альтернативы?

Avidemux . Это так же, как VirtualDub, только с большим количеством поддерживаемых форматов и встроенными кодеками и фильтрами. Я всегда использую это в предпочтениях; Это хорошо для меня, присоединяется к файлам AVC + AAC.MP4 (без перекодирования).

Чтобы присоединиться к ним в AviDemux:

  1. Файл -> Открыть -> Выбрать файл
  2. Файл -> Добавить -> Выбрать файл
  3. Установить все для копирования
  4. Файл -> Сохранить -> Имя файла
  5. Подождите..

Согласно форумам AViDemux, этот процесс объединения без потерь ( http://www.avidemux.org/smf/index.php?topic=9467.0 )

bobince
источник
да, кажется, что он отлично справляется с синхронизацией звука с видео, тогда как ответы других людей на этот вопрос сомнительны в этом ИМХО.
Джангофан
1
Я попытался использовать Avidemux для объединения двух файлов, но звук стал несинхронным.
GiddyUpHorsey
Вы можете получить проблемы с синхронизацией, когда количество доступного аудиоматериала не соответствует длине видеокадров или если есть искажение потока. Возможно, вам удастся исправить это с помощью функций исправления потока в VideoRedo или ProjectX.
Бобинц
1
Но этот метод сработал: superuser.com/a/255566/1780 Ура!
Кристофер Галпин
4
Если вы используете AviDemux для объединения двух файлов Mp4, не забудьте выбрать опцию Mp4 Demux в левом нижнем углу. В противном случае он может попытаться преобразовать его в AVI!
28

Вы можете сделать это с помощью ffmpeg:

mkfifo temp0 temp1
ffmpeg -i input0.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts -y temp0 2> /dev/null & \
ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts -y temp1 2> /dev/null & \
ffmpeg -f mpegts -i "concat:temp0|temp1" -c copy -absf aac_adtstoasc output.mp4

Это ничего не перекодирует, оно помещает их в новый контейнер транспортного потока, что упрощает их конкатенацию, а затем объединяет их обратно в MP4. Если output.mp4 уже существует, команда не будет выполнена. В вышеприведенной версии используются именованные каналы, если вы работаете в системе, которая не поддерживает те, которые вы должны использовать промежуточные файлы (например, Windows):

ffmpeg -i input0.mp4 -c copy -bsf:v h264_mp4toannexb temp0.ts
ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb temp1.ts
ffmpeg -i "concat:temp0.ts|temp1.ts" -c copy -bsf:a aac_adtstoasc output.mp4
evilsoup
источник
Может кто-нибудь объяснить, как это делается avconvвместо ffmpeg? Я смог выполнить первые два шага, но последний не распознал опцию-absf
becko
@becko Смотрите мои изменения. Теперь вы должны использовать спецификатор потока (см. Здесь libav.org/avconv.html#Advanced-options ).
Slhck
2
+1 только для справки в будущем, вы можете заменить avconvна ffmpegв указанных выше команд , и он будет работать.
becko
15

Concat demuxer

Демокатор concat был добавлен в ffmpeg 1.1. Если ваша версия ffmpeg устарела, получите новейший статический двоичный файл здесь: http://www.ffmpeg.org/download.html

инструкции

Создайте файл mylist.txtсо всеми файлами, которые вы хотите объединить, в следующей форме (строки, начинающиеся с тире, игнорируются):

# this is a comment
file '/path/to/file1'
file '/path/to/file2'
file '/path/to/file3'

Обратите внимание, что это могут быть относительные или абсолютные пути. Затем вы можете закодировать ваши файлы с помощью:

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

Можно создать этот файл списка с помощью цикла bash for или с помощью printf. Любое из следующих действий сгенерирует файл списка, содержащий каждый * .wav в рабочем каталоге:

for f in ./*.wav; do echo "file '$f'" >> mylist.txt; done
printf "file '%s'\n" ./*.wav > mylist.txt

Источник: ffmpeg wiki

Erik
источник
8

YAMB вместе с MP4BOX - хороший вариант.
Загрузите оба и разархивируйте их (установка не требуется и вместе они занимают около 5 МБ), в YAMB выберите «Настройки» и укажите путь к папке MP4box.
Чтобы присоединиться к файлам mp4, выберите «Редактирование»> «Нажмите, чтобы присоединиться» ...

Эран
источник
1
Похоже, лучшее решение - сохранить формат контейнера .mp4, который кажется автору более привлекательным вариантом ^^
Оскар Дювеборн,
1
После затруднений я использовал эту конфигурацию: MP4Box_path = E: \ Software \ Video Editing \ Yamb-2.1.0.0_beta2 \ MP4Box \ MP4Box.exe в попытке объединить 4 500 МБ MP4-файлы, сгенерированные из AVIDemux. Это не сработало. Программа просто сидела там 45 минут, ничего не делая, пока я наконец не сдался.
Джангофан
1
У меня были проблемы с использованием этого метода из-за проблем с синхронизацией звука. это был кошмар ... не пытаясь снова.
Джангофан
6

SUPER © (Simplified Universal Player Encoder & Renderer) обеспечивает следующий дополнительный процесс вывода:

Любой поддерживаемый входной мультимедийный файл может быть обработан:

      o Join Format-Identical Files.
      o Mux Video & Audio Streams.
      o DeMux Extract Streams. 

Конечно, MP4 является поддерживаемым форматом.

SUPER © является бесплатной.


источник
5
Его пользовательский интерфейс - самое ужасное, что я видел в своей жизни. Я не шучу, это просто ужасно. Подчеркну еще раз: я не могу назвать худший интерфейс, я серьезно к этому отношусь, я никогда не видел ничего ниже «СУПЕР порога».
Камило Мартин
5

Попробуйте использовать видео контейнер Matroska.

Во-первых, вам нужен mkvtoolnix . Скачать и установить его, то вам необходимо запустить GUI mkvmerge (если вам нравится инструменты командной строки, которая меня устраивает - хотя вы можете захотеть взглянуть на раздел файла ссылки на документацию mkvmerge ).

Добавьте свой первый файл, нажав «Добавить». Затем нажмите «добавить» и откройте второй файл. Установите выходной файл, нажмите «Начать мультиплексирование» внизу, и все готово!

Если контейнер не подходит для ваших нужд, вы можете перекодировать его или попытаться преобразовать в другой формат ... Хотя MKV - очень красивый контейнер!

Прорвать
источник
это должно быть приглушено? я не могу присоединиться без muxing?
Джангофан
Что ж, если вы используете контейнер MKV, технически вы его смешиваете. Попробуйте, штраф в реальном времени отсутствует ...
Прорыв
1

Если вы можете воспроизводить их в своей системе / если установлен кодек, Windows Movie Maker может стать самым быстрым (и бесплатным) способом объединения двух файлов. Затем вы можете использовать Virtualdub для преобразования в другой формат.

Уильям Хилсум
источник
Audacity, кажется, для аудио файлов. Это видео файл.
Паоло Бергантино,
Извините, я неправильно прочитал, просто увидел часть MP и мой мозг, хотя смелость.
Уильям Хилсум
Редактирование ответа ...
Уильям Хилсум
AFAIK, Movie Maker не поддерживает mp4, а конвертация в другой формат означает потерю качества, которое вопрос определяет как нежелательный.
Эран
Я попробовал MovieMaker на Windows7, и звук становится не синхронизированным при объединении файлов MP4 в WMV. Эта опция не будет работать.
Джангофан
1

Другое решение - Open Video Joiner . Это также делает эффекты перехода.

введите описание изображения здесь

harrymc
источник
Хотя это условно. и за 30 $ это не дешево просто объединить видеофайлы
Eran
Это было сказано, чтобы быть свободным. Извините, если меня ввели в заблуждение.
harrymc