Склеивание (соединение) видео-файлов в контейнере MP4 (H264/x264 + AAC/MP3)

vedavrata

Видео-файлы в контейнере AVI (то есть в кодеках [“форматах”] XVID + MP3) были хороши в прошлом, 20-м веке. :-) Появление контейнера MP4 и видео-кодека H264/x264 + аудио-кодека AAC произвело революцию в хранении и передаче видео-записей, особенно в интернете, на компьютерах, мобильных устройствах и домашних видео-проигрывателях. И на видео-сервисах (типа YouTube), и в мобильных устройствах (типа планшетов, телефонов/смартфонов) используется видео-кодирование H.264 или x.264, и соотвественно звук (“аудио”) AAC (FAAC). Благодаря этому достигается хорошее качество изображения при небольшой скорости потока (при небольшом “битрейте”), то есть при небольшом размере файла применительно к рассматриваемому времени воспроизведения записи.

В связи с этим “склеивание” (соединение/concatenate) видео-файлов AVI (с XVID и MP3) уже не актуально, а встаёт задача “сливать” (“склеивать”) с один несколько видео-записей (“роликов”), находящихся в контейнере MP4 (где видео-поток – это H264/x264, а аудио-поток – это AAC/MP3).

Поскольку я пользуюсь Linux (Ubutnu, LinuxMint, Fedora), то задача, во-первых, упрощается, во-вторых, может быть легко повторена на других операционных системах (ОС) – Windows, Mac OS X и др. …

Я пробовал использовать Avidemux, mencoder, ffmpeg, avconv и другие программы в разных вариантах с разными настройками… Avidemux часто искажает/теряет звук (или даже виснет при перекодировании), если форматы/кодеки/параметры звука разные. Mencoder не может соединить, например, два MP4-файла x264/MP3 и x264/AAC… FFmpeg не всегда или неверно понимает вывод звука в AAC.

В результате долгих исследований и экспериментов я нашёл лишь один действительно работающий способ, с помощью avconv, причём нужно делать соединение (склеивание) файлов  в два этапа (через конвертацию в MPEG4):

avconv -i file1.mp4 -c:v libx264 -c:a libvo_aacenc -r 30 -b:a 64k -ac 1 -bsf:v h264_mp4toannexb -f mpegts tmp1.ts

avconv -i file2.mp4 -c:v libx264 -c:a libvo_aacenc -r 30 -b:a 64k -ac 1 -bsf:v h264_mp4toannexb -f mpegts tmp2.ts

avconv -i "concat:tmp1.ts|tmp2.ts" -c copy output.mp4

Если Вы знаете иной способ, особенно если он позволяет соединить файлы x264/MP3 и x264/AAC с разными параметрами кодеков (битрейт, моно/стерео, частота кадров и так далее), то, пожалуйста, поделитесь!

Автор: Антон Кузнецов.

Tags: , ,

Leave a Reply