Ваши файлы не будут правильно соединяться, потому что что-то не совпадает.
Как и у многих других, у меня были проблемы с синхронизацией звука в объединенных видео. и хотя 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. Сбои, если не выбран безопасный режим и не синхронизированы при использовании безопасного режима
Источники:
/superuser/547296/resizing-videos-with-ffmpeg-avconv-to-fit-into-static-sized-player
/programming/20703160/problems-with-setting-constant-bitrate-by-using-avconv
https://trac.ffmpeg.org/wiki/Encode/AAC#fdk_cbr
Примечание. Насколько мне известно, другие форматы (контейнеры) имеют аналогичные ограничения для сопоставления размера кадра и скорости звука, поэтому это может сработать и для avi, если вы попытаетесь объединиться через cat или mencoder после нормализации видео и аудио .
Необязательно: Используйте Handbrake, чтобы перекодировать объединенный файл для меньшего размера, если это необходимо, с переменной частотой кадров и постоянной настройкой качества 25 (рекомендуемые настройки - при необходимости измените их в соответствии с вашими ожиданиями по качеству материала)