Как объединить видео файлы с терминала?
Я пробовал avidemux2_cli, mencoder, ffmpeg, cat... Но это не всегда работает (в большинстве случаев ошибка заключается в том, что аудиокодек не совпадает) Возможно, я ввел неправильные параметры в команды.
Итак, команды:
cat Sample.avi rrr.avi > complete.avi
ffmpeg -i Sample.avi -i output.avi -vcodec copy -acodec copy complete.avi
mencoder -ovc lavc -oac copy Sample.avi rrr.avi -o complete.avi
avidemux2_cli --audio-codec copy --video-codec copy --output-format avi --load Sample.avi -append output.avi --save video.avi
Проблема кошки в том, что она не показывает ошибку, но не всегда работает.. Как и complete.avi будет точно таким же с Sample.avi
Fmmpeg ничего не делает. Complete.avi всегда одинаков с Sample.avi
Ошибка Mencoder: Все файлы должны иметь идентичный аудиокодек и формат для -oac-копии. Таким образом, complete.avi то же самое с Sample.avi
avidemux2_cli ошибки нет, но complete.avi тоже самое с Sample.avi..
Таким образом, чтобы подвести итог, все complete.avi одинаковы с Sample.avi.. И проблема в том, что у них нет одинакового аудиокодека (я так понимаю). Есть идеи?
6 ответов
Если вы хотите безопасно объединить два видео, вам нужно заменить видеокодек и аудиокодек входных файлов на одни и те же кодеки.
Например, используя xvid (видеокодек) и mp3lame (аудиокодек):
sudo apt-get install mencoder libxvidcore4 libmp3lame0
Вы можете кодировать входные видео с помощью следующих команд:
mencoder -ovc xvid -oac mp3lame -xvidencopts bitrate=1000 first.avi -o video1.avi
mencoder -ovc xvid -oac mp3lame -xvidencopts bitrate=1000 second.avi -o video2.avi
Чтобы соответствовать вашим видео, вы можете изменить параметры "битрейт" и т. Д. (А также кодеки).
Если имена закодированных видео - "video1.avi" и "video2.avi", а имя выходного видео - "join-video.avi",
mencoder -ovc copy -oac mp3lame video1.avi video2.avi -o joined-video.avi
С помощью этой команды вы можете создать объединенный видеофайл.
Мне пришлось объединить три фрагмента видео с одинаковыми кодеками. Прочитав предыдущие ответы, мне удалось сделать это:
mencoder -ovc copy -oac faac 01.mp4 02.mp4 03.mp4 -o output.mp4
Гораздо быстрее и проще, чем Openshot!
Сначала я попробовал опцию "-oac copy", но кажется, что аудиокодек в моих видео этого не позволяет. Я получил сообщение об ошибке с рекомендацией -oac pcm. Кодек PCM не очень хороший вариант: результирующий файл очень большой, и 2/3 его - несжатый звук.
Надеюсь это поможет
Решение, которое я нашел здесь, помогло мне без потерь объединить два файла mp4:
sudo apt-get install gpac
MP4Box -cat part1.mp4 -cat part2.mp4 -new joinedfile.mp4
Я пытался использовать Avidemux, но у меня были проблемы со звуком в объединенном видео.
Ваши файлы не будут правильно соединяться, потому что что-то не совпадает.
Как и у многих других, у меня были проблемы с синхронизацией звука в объединенных видео. и хотя MP4Box работает нормально, если клипы имеют идентичные спецификации, в некоторых случаях я был бы поражен "Не найден подходящий трек назначения - создается новый", и в этом случае Totem (он-лайн видео) не воспроизводил этот сегмент в объединенном файле. После некоторых проб и ошибок и дальнейших исследований я разработал следующий метод работы с видео, который до сих пор работал с приемлемым (для меня) качеством.
Если размеры кадра не совпадают (объединяются ошибки, относящиеся к видео дорожкам):
Нормализовать видео без прерывания звука (-c: копия), установив ограничения (делимые на 8 для максимальной совместимости с кодеками) для несопоставленных сегментов
Примеры команд
width=856
height=480
avconv -i input.mp4 -filter:v "scale=iw*min($width/iw\,$height/ih):ih*min($width/iw\,$height/ih), pad=$width:$height:($width-iw*min($width/iw\,$height/ih))/2:($height-ih*min($width/iw\,$height/ih))/2" -c:a copy output.mp4
Если аудио не совпадает (объединяются ошибки, относящиеся к звуковым дорожкам):
Нормализовать звук
Обрабатывайте звук без прерывания видео (копирование c:v), чтобы все клипы соответствовали требуемому кодеку, частоте и скорости передачи битов с помощью c: кодек -ar, например, -ar 48000, и скорости передачи данных с b: 128k для стерео (64K на канал, кажется, хорошая цель) или что-то соответствует.
Пример: avconv -i input.mp4 -c:v copy -c:a libmp3lame -ar 48000 b:a 128k output.mp4
(обратите внимание, что libmp3lame является кодеком для аудио в формате MP3) Вы можете получить список кодеров, поддерживаемых avconv, выполнив команду avconv -codecs
или сузить вещи до конкретного закодированного avconv -codecs|grep *codecname*
например avconv -codecs|grep mp3
Теперь, когда мы нормализовали файлы, мы можем присоединиться к ним. В этом примере я объединю файлы с MP4Box. Если у вас его нет, вы можете получить его, введя команду sudo apt-get install gpac
Присоединяйтесь к файлам с помощью команды MP4Box file1.mp4 -cat file2.mp4 -cat file3.mp4 -cat file4.mp4 -out joinedfile.mp4
(обратите внимание, что перед первым файлом нет cat, и каждому дополнительному файлу предшествует -cat, а целевому файлу предшествует -out)
Если вы используете MP4Box (рекомендуется для MP4) для присоединения, вы можете обнаружить, что вам нужно обработать все клипы с помощью avconv, независимо от того, соответствуют ли спецификации спецификациям или нет, чтобы избежать ошибки "Не найдено подходящего трека назначения - создание нового (введите видео)"
Примечание: я обнаружил, что Avidemux испытывает проблемы с видео, закодированными с использованием файлов H.264/AVC (на тотем), из-за B-кадров в качестве ссылки. Похоже, что это приводит к несинхронизации звука при объединении, даже если вы решили скопировать аудио и видео без использования remux. Сбои, если не выбран безопасный режим и не синхронизированы при использовании безопасного режима
Источники:
https://stackoverflow.com/questions/20703160/problems-with-setting-constant-bitrate-by-using-avconv
https://trac.ffmpeg.org/wiki/Encode/AAC
Примечание. Насколько мне известно, другие форматы (контейнеры) имеют аналогичные ограничения для сопоставления размера кадра и скорости звука, поэтому это может сработать и для avi, если вы попытаетесь объединиться через cat или mencoder после нормализации видео и аудио.
Необязательно: Используйте Handbrake, чтобы перекодировать объединенный файл для меньшего размера, если это необходимо, с переменной частотой кадров и постоянной настройкой качества 25 (рекомендуемые настройки - при необходимости измените их в соответствии с вашими ожиданиями по качеству материала).
Вы должны напечатать так:
avidemux2_cli --audio-codec copy --video-codec copy --output-format avi --load Sample.avi --append output.avi --save video.avi
Если вы хотите добавить больше файлов:
avidemux2_cli --audio-codec copy --video-codec copy --output-format avi --load Sample.avi --append output1.avi --append output2.avi --append output3.avi --save video.avi
Я смог использовать VLC Media Player для объединения / объединения нескольких видеофайлов. VLC можно загрузить из программного обеспечения Ubuntu или установить с терминала, нажав Ctrl
+Alt
+T
и набрав:
sudo apt update
sudo apt install vlc
После установки VLC откройте терминал в папке с видеофайлами и введите:
vlc InFile1.mp4 InFile2.mp4 --sout "#gather:std{access=file,dst=OutFile.mp4}" --sout-keep
Это открывает графический интерфейс VLC, и вы можете закрыть его, когда файлы объединены / объединены. Вы можете найти больше информации здесь.