Подтвердить что ты не робот

Как объединить видео с помощью avconv?

У меня есть несколько кусков в папке.

0001.mp4
0002.mp4
0003.mp4
...
0112.mp4

Я хотел бы объединить их в full.mp4

Я попытался использовать:

avconv -f concat -i <(printf "file '%s'\n" /root/chunk/*.mp4) -y \
-c copy /root/test/full.mp4

Неизвестный формат ввода: 'concat'

avconv -f concat -i <(printf "%s|" /root/chunk/*.mp4) -y \
-c copy /root/test/full.mp4

Неизвестный формат ввода: 'concat'

avconv -i concat:`ls -ltr /root/chunk/*.mp4 | awk 'BEGIN {ORS="|"} { print $9 }'` \
 -c:v copy -c:a copy /root/test/full.mp4

В последнем выпуске был выгружен только один входной файл.

Как объединить все куски из папки в полное видео?

Я не хочу использовать ffmpeg или другое. Только Avconv.

4b9b3361

Ответ 1

avconv -i concat:file1.mp4\|file2.mp4 -c copy output.mp4

Я не знаю, работает ли с любым типом контейнера (работал у меня с AVI).

Ответ 2

mp4 файлы не могут быть просто объединены, как предполагает "принятый" ответ.

Если вы запустите это, и только это, вы получите output.mp4 с содержимым file1.mp4.

Тем не менее, то, что вы хотите сделать в исходном вопросе, на самом деле может быть выполнено, если вы правильно разделите исходный файл на mpeg-потоки.

Следующие команды разбивают input.mp4 на 3x 60 секундных сегментов в файле [1-3].ts:

avconv -ss 0 -i input.mp4 -t 60 -vcodec libx264 -acodec aac \
    -bsf:v h264_mp4toannexb -f mpegts -strict experimental -y file1.ts
avconv -ss 0 -i input.mp4 -t 60 -vcodec libx264 -acodec aac \
    -bsf:v h264_mp4toannexb -f mpegts -strict experimental -y file2.ts
avconv -ss 0 -i input.mp4 -t 60 -vcodec libx264 -acodec aac \
    -bsf:v h264_mp4toannexb -f mpegts -strict experimental -y file3.ts

Затем вы можете собрать их вместе, как подсказывает другой ответ:

avconv -i concat:"file1.ts|file2.ts|file3.ts" -c copy \
   -bsf:a aac_adtstoasc -y full.mp4

Я использовал этот процесс для создания масштабируемого параллельного транскодера, как описано в:

Ответ 3

Для mp4 единственным рабочим решением, которое я нашел, было с MP4Box из пакета gpac

#!/bin/bash
filesList=""
for file in $(ls *.mp4|sort -n);do
    filesList="$filesList -cat $file"
done
MP4Box $filesList -new merged_files_$(date +%Y%m%d_%H%M%S).mp4

или команда

MP4Box -cat file1.mp4 -cat file2.mp4 -new mergedFile.mp4

с mencoder и avconv я не мог заставить его работать: - (

Ответ 4

это работает

avconv -i 1.mp4 1.mpeg
avconv -i 2.mp4 2.mpeg
avconv -i 3.mp4 3.mpeg

cat 1.mpeg 2.mpeg 3.mpeg | avconv -f mpeg -i - -vcodec mpeg4 -strict experimental output.mp4

Выше работает, если у вас есть только avconv - однако ffmpeg добавил функции... цитата:

"Вышеупомянутые шаги avconv делают ненужные дополнительные шаги кодирования с потерями, которые являются медленными и снижают качество вывода. Я бы рекомендовал вместо этого использовать concat demuxer (дополнительная информация) или фильтр concat, но в avconv отсутствуют функции, доступные в ffmpeg из FFmpeg" - @LordNeckbeard

    SEE  https://trac.ffmpeg.org/wiki/Concatenate

Если вы используете систему, которая поддерживает именованные каналы, вы можете использовать их, чтобы избежать создания промежуточных файлов - это отправляет stderr (куда ffmpeg отправляет все записанные данные) в /dev/null, чтобы не загромождать командную строку:

mkfifo temp1 temp2
ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts temp1 2> /dev/null 
ffmpeg -i input2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts temp2 2> /dev/null 
ffmpeg -f mpegts -i "concat:temp1|temp2" -c copy -bsf:a aac_adtstoasc output.mp4

Ответ 5

Это работает для меня:

avconv -i "concat:001.mp4|002.mp4|003.mp4" -c copy full.mp4

Просто объединяет все файлы в один mp4, не перекодируя их.

Ответ 6

Этот метод будет выполнять только для конкретизации файлов raw *.avi. Но так как многие люди, желающие присоединиться к файлам avi, в конечном итоге просмотрят этот вопрос, я все равно отправлю свой ответ:

cat *.avi > out_tmp.avi
avconv -i out_tmp.avi -c copy output.avi

Еще один раз: работает только для файлов несжатых *.avi.

Ответ 7

Я сделал это с avidemux (инструмент gtk). Он доступен как пакет для большинства linux, также для Windows и Mac. Я просто открыл первый файл. Затем я добавил следующие порядки. Наконец, я сохранил конкатенированное видео, используя аудио и видео копию и формат mp4.

Это сработало отлично!

Ответ 9

Я нашел инструмент под названием Avdshare Video Converter 7, который успешно объединяет мои видео. Он даже перекодирует их практически в любой формат, который я хочу.

Я попробовал каждое решение на этой странице... все они дали мне те же ошибки, с которыми вы, вероятно, столкнулись, если читаете мой ответ. "Протокол не найден" вас расстраивает? Их, может быть, это программа для вас тоже.

Я запускаю его на окнах.

Шаги для объединения двух видео в программе:

Перетащите видео в программу

Нажмите Merge

Выберите "сохранить профиль", который определяет каждый параметр, который вы можете настроить

Нажмите кнопку Сохранить

Ответ 10

После того, как я не получил ответ на сообщение об ошибке со всеми этими аналогичными ответами:

~ avconv -i 'concat:' -c copy test.mp4
avconv version 12.3, Copyright (c) 2000-2018 the Libav developers
  built on Jan 22 2019 21:47:11 with Apple LLVM version 10.0.0 (clang-1000.11.45.5)
concat:: Protocol not found

Я просмотрел некоторые результаты Google, зашел в систему отслеживания ошибок и нашел их:

Кажется, что он был не только отключен в какой-то момент, но и удален в версии 12, но моя сборка 12.3 на Mac 10.13.6 от Homebrew все еще имеет "concat", перечисленный во входных протоколах, и я также вижу это в документации, таким образом, что 1 выдающийся отчет об ошибке.

Мне повезло с использованием этой команды:

cat *.VOB | avconv -i - -c copy test.mp4