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

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

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

11 ответов

Решение

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

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

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

Я использую 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 comment
file 'file1.mp4'
file '/path/to/file2.mp4'
file 'file3.mp4'

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

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

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

for f in $(ls *.MP4); do
    ffmpeg -i $f -c copy -bsf:v h264_mp4toannexb -f mpegts $f.ts
done

CONCAT=$(echo $(ls *.ts) | sed -e "s/ /|/g")

ffmpeg -i "concat:$CONCAT" -c copy -bsf:a aac_adtstoasc output.mp4

rm *.ts

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

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

vidmerger .

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

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

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

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

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

Требует, чтобы файлы имели одинаковое разрешение. Принимает разные метаданные ротации, которые ffmpeg concat: не делает.

rm ffmpeg-concat-output.mkv

FILE_COUNT=$#
INPUTS=""
FILTER=""
INDEX=0
for 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+=1
done

COMMAND="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_complex

bash -c "${COMMAND}"

Я хотел бы добавить свой "videomerge" - доступный для ubuntu через ppa:

Это приложение с графическим интерфейсом QT5, использующее перетаскивание. Установить:

      sudo add-apt-repository ppa:jentiger-moratai/mediatools
sudo apt update
sudo apt install videomerge

Как и во всех моих приложениях, я стараюсь сделать пользовательский интерфейс очень простым:

В дополнение к ответу Maythux, из:

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

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

cat video1.ext video2.ext video3.ext > video4.ext
Другие вопросы по тегам