Eu quero mesclar dois ou três vídeos MP4 com codec de áudio MPEG-4 AVC e codecs de áudio MP3 (às vezes, MP3 Surround). Tanto o áudio quanto o vídeo podem ter uma taxa de bits diferente. Se for possível, sem transcodificação. Eu já tentei usar o FFmpeg, MP4Box e AviDemux, mas sem sucesso. Estou procurando uma solução que possa ser executada usando apenas a linha de comando.
Todos os filmes são codificados pela opção AviDemux com duas passagens.
Existe a forma como tentei fazê-lo com o AviDemux:
avidemux --force-alt-h264 --load video1.mp4 --append video2.mp4 --output-format MP4 --save output.mp4 --quit
Como no FFmpeg:
ffmpeg -y -f concat -i list.txt -c copy output.mp4
E como com o MP4Box:
MP4Box -cat video1.mp4 -cat video2.mp4 -new output.mp4
Às vezes falhou, mas às vezes me dava um vídeo com o primeiro arquivo sendo reproduzido, mas o segundo arquivo estava corrompido.
O comando
avprobe
para os dois arquivos retorna isso:
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
E o FFmpeg está mesclando isso:
[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%
A segunda parte do vídeo resultante parece desta forma , mas o áudio está funcionando bem.