Как объединить файлы MP4 с разными битрейтами?

2856
Jacob

Я хочу объединить два или три видео MP4 с видеокодеком MPEG-4 AVC и аудиокодеками MP3 (иногда MP3 Surround). И аудио, и видео могут иметь разный битрейт. Если это будет возможно, без транскодирования. Я уже пытался использовать FFmpeg, MP4Box и AviDemux, но безуспешно. Я ищу решение, которое может быть выполнено с использованием только командной строки.

Каждый фильм кодируется AviDemux с возможностью двухпроходного.

Вот как я пытался сделать это с AviDemux:

avidemux --force-alt-h264 --load video1.mp4 --append video2.mp4 --output-format MP4 --save output.mp4 --quit 

Там как с FFmpeg:

ffmpeg -y -f concat -i list.txt -c copy output.mp4 

А как с MP4Box:

MP4Box -cat video1.mp4 -cat video2.mp4 -new output.mp4 

Иногда это вообще не удавалось, но иногда это дало мне видео с хорошим воспроизведением первого файла, но второй файл был поврежден.

avprobe Команда для двух файлов возвращает это:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'ad.mp4': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 creation_time : 1970-01-01 00:00:00 title : ad.mp4 encoder : Lavf52.78.3 Duration: 00:00:03.28, start: 0.000000, bitrate: 446 kb/s Stream #0.0(und): Video: h264 (High), yuv420p, 1280x720 [PAR 1:1 DAR 16:9], 312 kb/s, 25 fps, 25 tbr, 25025 tbn, 50 tbc Metadata: creation_time : 1970-01-01 00:00:00 Stream #0.1(und): Audio: mp3, 48000 Hz, 2 channels, s16p, 126 kb/s Metadata: creation_time : 1970-01-01 00:00:00 

 

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'ad-chipmunkove.mp4': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 creation_time : 1970-01-01 00:00:00 title : ad-chipmunkove.mp4 encoder : Lavf52.78.3 Duration: 00:00:29.96, start: 0.000000, bitrate: 2946 kb/s Stream #0.0(und): Video: h264 (High), yuv420p, 1280x720 [PAR 1:1 DAR 16:9], 2813 kb/s, 25 fps, 25 tbr, 25025 tbn, 50 tbc Metadata: creation_time : 1970-01-01 00:00:00 Stream #0.1(und): Audio: mp3, 48000 Hz, 2 channels, s16p, 127 kb/s Metadata: creation_time : 1970-01-01 00:00:00 

И FFmpeg объединяет это:

[concat @ 0xb03ae40] Estimating duration from bitrate, this may be inaccurate Input #0, concat, from 'list.txt': Duration: 00:00:00.00, start: 0.000000, bitrate: 440 kb/s Stream #0:0: Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 312 kb/s, 25 fps, 25 tbr, 25025 tbn, 50 tbc Stream #0:1: Audio: mp3 (mp4a / 0x6134706D), 48000 Hz, stereo, s16p, 126 kb/s Output #0, mp4, to 'output.mp4': Metadata: encoder : Lavf55.41.100 Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 312 kb/s, 25 fps, 25025 tbn, 25025 tbc Stream #0:1: Audio: mp3 (i[0][0][0] / 0x0069), 48000 Hz, stereo, 126 kb/s Stream mapping: Stream #0:0 -> #0:0 (copy) Stream #0:1 -> #0:1 (copy) Press [q] to stop, [?] for help frame= 831 fps=0.0 q=-1.0 Lsize= 10961kB time=00:00:33.23 bitrate=2702.0kbits/s video:10414kB audio:518kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.266208% 

Вторая часть итогового видео выглядит так, но звук работает нормально.

4
Как были созданы файлы? Точно такой же кодировщик и настройки кодирования только с другим битрейтом? Или из разных настроек? slhck 10 лет назад 0
Они кодируются с помощью AviDemux. То же разрешение, тот же FPS, другие тоже. Просто другой битрейт. Jacob 10 лет назад 0
Обычно это возможно, если все остальные настройки одинаковы, и если последовательности начинаются с I-кадра (или, если быть более точным, IDR-кадра). Я не уверен насчет части MP3. Я думаю, что MP3 не поддерживается в контейнере MP4. slhck 10 лет назад 0
@slhck MP3 [is] (https://en.wikipedia.org/wiki/MPEG-4_Part_14#Data_streams) поддерживается, все отлично работает на всех устройствах, которые я могу себе представить - Xbox 360, Android, Windows Phone и Windows. Jacob 10 лет назад 0

1 ответ на вопрос

0
cconcolato

Concatenating MP4 files, even with different bitrates, should work. That is the basic assumption of HTTP adaptive streaming using MPEG-DASH. If the decoder configuration is exactly the same, it is kept as is. If not exactly the same (but compatible), the sample description box stsd will have multiple entries.

For MP4Box, this looks like a bug. I suggest you file an issue here with links to some example files.

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