Como mesclar arquivos MP4 com diferentes taxas de bits?

4

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.

    
por Jacob 26.06.2014 / 19:06

1 resposta

0

Concatenar arquivos MP4, mesmo com taxas de bits diferentes, deve funcionar. Essa é a suposição básica do streaming adaptável HTTP usando MPEG-DASH. Se a configuração do decodificador é exatamente a mesma, ela é mantida como está. Se não for exatamente o mesmo (mas compatível), a caixa de descrição de amostra stsd terá várias entradas.

Para o MP4Box, isso parece um bug. Eu sugiro que você registre um problema aqui com links para alguns arquivos de exemplo.

    
por 07.09.2015 / 21:24