Как объединить приблизительно (больше чем два) видео на Ubuntu?

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

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

38
задан 13 May 2018 в 17:16

10 ответов

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

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

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

7
ответ дан 23 November 2019 в 00:13

Я использую mkvmerge для присоединения к нескольким файлам MP4 в единственный:

mkvmerge -o outfile.mkv infile_01.mp4 \+ infile_02.mp4 \+ infile_03.mp4
41
ответ дан 23 November 2019 в 00:13

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

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

ссылка и больше информации

25
ответ дан 23 November 2019 в 00:13

Мой сценарий, просто в 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}"
0
ответ дан 23 November 2019 в 00:13

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

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

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

cat video1.ext video2.ext video3.ext > video4.ext
-1
ответ дан 23 November 2019 в 00:13

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

Использование это с:

vcat -i inputfile1,inputfile2[start-end],... -o <outputfile>
0
ответ дан 23 November 2019 в 00:13

Создайте файл 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
2
ответ дан 23 November 2019 в 00:13

Я записал немного сценария оболочки в concat MP4s, не транскодируя использующий 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.

4
ответ дан 23 November 2019 в 00:13

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

2
ответ дан 2 April 2020 в 05:25

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

vidmerger .
2
ответ дан 20 June 2020 в 10:42

Другие вопросы по тегам:

Похожие вопросы: