Как я могу объединить или объединить два или более файлов MP4, создав другой файл MP4? [Дубликат]


14

Как я могу объединить или объединить 2 или более файлов MP4, в итоговый выходной файл MP4 также?

Я пытался в окне DOS использовать команду COPY (я где-то читал), но она не работает должным образом.


Также см. Superuser.com/questions/43588/… для получения дополнительной информации. Не уверен, что я бы классифицировал этот вопрос как дубликат.
Прорыв

1
Пожалуйста, добавьте вашу ОС в качестве тега.
тумчаадитя

Ответы:


12

MP4Box может сделать это, хотя вы можете использовать для него графический интерфейс, например YAMB или My MP4Box GUI . (Примечание: это не моя программа, а просто название.) Двоичные файлы MP4Box для Windows доступны на этом сайте .

Пример:

MP4Box -tmp $HOME -add vid.01.m4v \
    -cat vid.02.m4v -cat vid.03.m4v vid-out.mp4

4

Я бы порекомендовал usind ffmpeg , который доступен для Mac OS X, Linux и Windows .

Вот хороший пример того, как объединить два фильма: http://www.ffmpeg.org/faq.html#SEC27

На последнем шаге вам просто нужно убедиться, что вы создали контейнер MP4 для полученного файла.


Насколько я понимаю ответ на часто задаваемые вопросы по ffmpeg, этого нельзя сделать с видео MP4 (предположительно H.264), потому что это не один из «привилегированных форматов».
ттарчала

@ttarchala: я бы попробовал, если это можно сделать. Я конвертировал в MP4 с FFmpeg раньше, но никогда не объединял два фильма. Также: я хотел бы отметить, что у FFmpeg очень быстрая разработка. То, что не работает с одной версией, может работать только в следующей.
Полемон

1
Не все сборки FFMPEG имеют поддержку MP4. Во-первых, это запатентованная технология, и, возможно, незаконно распространять кодеры MP4 в США без какой-либо платы. Тем не менее, многие сборки могут сделать это.
CarlF

@CarlF: Что касается Linux и Mac OS X, это на самом деле не проблема. Код можно распространять свободно, поэтому в принципе, кто бы ни строил свой собственный FFmpeg, все хорошо. Что касается патентования, я хотел бы поделиться комментарием: я не найду сайт прямо сейчас, но первый патент, срок действия которого истекает для AAC (который частично определен в MPEG-4), относится к 2022 году. только первый, есть еще много, которые должны истечь, пока это не будет полностью законно ...
Polemon

4

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

mkfifo temp0 temp1
ffmpeg -i input0.mp4 -c copy -bsf h264_mp4toannexb -f mpegts -y temp0 2> /dev/null & \
ffmpeg -i input1.mp4 -c copy -bsf 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 уже существует, команда не будет выполнена. В вышеприведенной версии используются именованные каналы, если вы находитесь в системе, которая не поддерживает те, которые вам нужны для использования промежуточных файлов:

ffmpeg -i input0.mp4 -c copy -bsf h264_mp4toannexb temp0.ts
ffmpeg -i input1.mp4 -c copy -bsf h264_mp4toannexb temp1.ts
ffmpeg -i "concat:temp0.ts|temp1.ts" -c copy -absf aac_adtstoasc output.mp4

что если это не h264, а mpeg4?
Эдисон

2

Обновление: только что проверил avidemux, как я его установил, после прочтения этого другого ответа. Это то, что вы ищете (не думаю, что он может сделать MP4 из-за его имени ...).

Я думаю, что VirtualDubMod поддерживает mp4, хотя я не использовал его, поэтому я точно не знаю.

Вы можете проверить MeGUI . Это довольно сложное и многофункциональное приложение и инструменты.

Инструмент для встраивания в контейнер (mp4 в вашем случае) называется muxer, хотя его, вероятно, нельзя объединить.

Вы можете использовать его в сочетании с VirtualDub. Virtualdub для объединения видеопотоков и мультиплексор для повторного кодирования MP4 (без перекодирования).


1

Я делаю это с mencoder, после преобразования их в avi с помощью ffmpeg

Вот простой скрипт, при условии, что у вас есть 15 файлов с именем 01.mp4 ... 15.mp4

#!/bin/bash
for j in `seq -w 1 15`;
do
    echo converting file $j.avi
    ffmpeg -i $j.mp4 $j.avi        

    echo adding file $j.avi to list
    z="$z $j.avi"
done 

echo doing append
mencoder -oac copy -ovc copy $z -o all.avi

ура


1

Вот команда:

ffmpeg -i concat:"video1.ts|video2.ts"

Нужно ли экранировать этот символ трубы? Или я полностью неверно истолковываю эту команду?
убийца

это нужно было избежать. упс.
rogerdpack
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.