Как объединить несколько (более двух) видео в Ubuntu?

Я хочу объединить видео в пакет размером по двадцать (20) штук каждое. Я использую Linux-машину. Видео в формате mp4 и среднего качества. У некоторых даже отсутствует аудиопоток. До сих пор я пытался ffmpeg, mencoder, cvlc/vlc и MP4Box. Я хочу написать сценарий командной строки для достижения этой цели, поскольку я выполняю пакетную обработку.

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

Попробуй пройти бота-учителя. Он научит тебя Linux в виде игры: Курсы Linux и DevOPS Бесплатный урок

Я использую mkvmerge чтобы объединить несколько файлов MP4 в один:

mkvmerge -o outfile.mkv infile_01.mp4 \+ infile_02.mp4 \+ infile_03.mp4

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

ffmpeg -i concat:"input1.mp4|input2.mp4" output.mp4

ссылка и дополнительная информация

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

# this is a commentfile 'file1.mp4'file '/path/to/file2.mp4'file 'file3.mp4'

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

ffmpeg -f concat -safe 0 -i files.txt -c copy output.mp4

Это решило вопрос:https://stackoverflow.com/a/22324018/5014767

melt для этого есть отличная утилита командной строки.Здесь является ли страница

Редактировать из комментариев: Команда, которая решила мою проблему, была такой melt {input-sequence} -consumer avformat:{output-name} acodec=libmp3lame vcodec=libx264

Я написал небольшой сценарий оболочки для объединения файлов MP4s без перекодирования с использованием ffmpeg.

for f in $(ls *.MP4); do    ffmpeg -i $f -c copy -bsf:v h264_mp4toannexb -f mpegts $f.tsdoneCONCAT=$(echo $(ls *.ts) | sed -e "s/ /|/g")ffmpeg -i "concat:$CONCAT" -c copy -bsf:a aac_adtstoasc output.mp4rm *.ts

Это создает промежуточные файлы в контейнере MPEG, а затем объединяет их в MP4.

Сокращение без потерь очень хорошо подходит для этого. Быстро и безболезненно.

Я написал обертку вокруг ffmpeg называемый видмергер , что позволяет очень легко объединить несколько видео внутри папки, например, чтобы объединить все файлы mp4 внутри текущего каталога, просто запустите:

vidmerger .

Мой сценарий, чисто в bash и ffmpeg. Перекодирует файлы, заданные в командной строке, в один.

Требуется, чтобы файлы имели одинаковое разрешение. Допускает различную ротацию метаданных, которая ffmpeg concat: не.

rm ffmpeg-concat-output.mkvFILE_COUNT=$#INPUTS=""FILTER=""INDEX=0for FNAME in $@; do    echo "Processing ${FNAME}"    INPUTS="${INPUTS} -i $FNAME"    if [ -z "${FILTER}" ]; then        FILTER="[$INDEX:v:0] [$INDEX:a:0]"    else        FILTER="${FILTER} [$INDEX:v:0] [$INDEX:a:0]"    fi    let INDEX+=1doneCOMMAND="ffmpeg ${INPUTS} \    -filter_complex '${FILTER} \        concat=n=${INDEX}:v=1:a=1 [v] [a]' \    -map '[v]' -map '[a]' \    ffmpeg-concat-output.mkv"#   -af 'volume=15dB' # won't work with -filter_complexbash -c "${COMMAND}"

Я создал Скрипт на Python что, используя moviepy, может объединять также подсегменты (полезно, если вы хотите, например, удалить некоторые части из видео).

Используйте его с:

vcat -i inputfile1,inputfile2[start-end],... -o <outputfile>

В дополнение к ответу Мэйтукса, от :

Несколько мультимедийных контейнеров (MPEG-1, MPEG-2 PS, DV) позволяют объединять видео, просто объединяя файлы, содержащие их.

Т.е. для объединения видео используется один из вышеупомянутых видеоконтейнеров (к которому я добавлю MPEG-4 Part 14 для личного опыта), вы могли бы просто:

cat video1.ext video2.ext video3.ext > video4.ext

Пожалуйста, не задавайте один и тот же вопрос на нескольких сайтах SE: http://superuser.com/questions/928548/merging-multiple-more-than-two-videos-on-ubuntu

@ohaal Я пробовал использовать различные методы конкатенации, приведенные в “ffmpeg”, включая фильтры и файловые протоколы. Я также попытался использовать функцию concat в cvlc /vlc'. Я также попробовал функцию concatвmencoder`. Все это работало частично. Это наконец-то помог мне решить этот вопрос.

Не могли бы вы опубликовать конкретно то, что вы пробовали до сих пор?

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

Ааа, я понимаю твою точку зрения. К сожалению, я не могу перечислить команды из-за их огромного количества. Команда, которая решила мою проблему, была такой
: "расплавить {последовательность ввода} -потребительский avformat:{имя вывода} acodec=libmp3lame vcodec=libx264`

связанное подмножество ffmpeg: h.264 - How to concatenate two MP4 files using FFmpeg? - Stack Overflow

Попробуй пройти бота-учителя. Он научит тебя Linux в виде игры: Курсы Linux и DevOPS Бесплатный урок