Converter vídeo mp4 para um formato que o xbox 360 pode reproduzir

4

Aqui está um arquivo de vídeo que meu Xbox 360 se recusa a reproduzir:

$ MP4Box -info video.mp4
* Movie Info *
        Timescale 90000 - Duration 02:18:33.365
        Fragmented File no - 2 track(s)
        File Brand mp42 - version 0
        Created: GMT Sat Jul 21 07:08:55 2012

File has root IOD (9 bytes)
Scene PL 0xff - Graphics PL 0xff - OD PL 0xff
Visual PL: ISO Reserved Profile (0x7f)
Audio PL: High Quality Audio Profile @ Level 2 (0x0f)
No streams included in root OD

iTunes Info:
        Encoder Software: HandBrake 0.9.6 2012022800

Track # 1 Info - TrackID 1 - TimeScale 90000 - Duration 02:18:33.235
Media Info: Language "Undetermined" - Type "vide:avc1" - 199318 samples
Visual Track layout: x=0 y=0 width=1280 height=688
MPEG-4 Config: Visual Stream - ObjectTypeIndication 0x21
AVC/H264 Video - Visual Size 1280 x 688
        AVC Info: 1 SPS - 1 PPS - Profile High @ Level 4.1
        NAL Unit length bits: 32
Self-synchronized

Track # 2 Info - TrackID 2 - TimeScale 48000 - Duration 02:18:33.365
Media Info: Language "English" - Type "soun:mp4a" - 389689 samples
MPEG-4 Config: Audio Stream - ObjectTypeIndication 0x40
MPEG-4 Audio MPEG-4 Audio AAC LC - 6 Channel(s) - SampleRate 48000
Synchronized on stream 1

$ avconv -i video.mp4
avconv version 0.8.4-4:0.8.4-0ubuntu0.12.04.1, Copyright (c) 2000-2012 the Libav     developers
  built on Nov  6 2012 16:51:33 with gcc 4.6.3
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: mp42isomavc1
    creation_time   : 2012-07-21 07:08:55
    encoder         : HandBrake 0.9.6 2012022800
  Duration: 02:18:33.36, start: 0.000000, bitrate: 2299 kb/s
    Stream #0.0(und): Video: h264 (High), yuv420p, 1280x688, 1973 kb/s, 23.98 fps, 90k tbr, 90k tbn, 180k tbc
    Metadata:
      creation_time   : 2012-07-21 07:08:55
    Stream #0.1(eng): Audio: aac, 48000 Hz, 5.1, s16, 319 kb/s
    Metadata:
      creation_time   : 2012-07-21 07:08:55
At least one output file must be specified

Qual ferramenta, como ffmpeg ou mencoder, e qual encanto de linha de comando mágica devo usar para transcodificar esse arquivo em um formato que o Xbox 360 pode reproduzir? Eu quero que o processo de transcodificação retenha a melhor qualidade de vídeo possível.

Com a ajuda do slhck, consegui criar um novo arquivo mp4 com o áudio alterado para dois canais. No entanto, o Xbox 360 ainda se recusa a jogá-lo por algum motivo. Aqui está o que o MP4Box e o ffmpeg dizem sobre o novo arquivo:

$ MP4Box -info final.mp4
* Movie Info *
        Timescale 1000 - Duration 02:18:33.343
        Fragmented File no - 2 track(s)
        File Brand isom - version 512
        Created: GMT Sat Jul 21 07:08:55 2012

File has root IOD (9 bytes)
Scene PL 0xff - Graphics PL 0xff - OD PL 0xff
Visual PL: Not part of MPEG-4 Visual profiles (0xfe)
Audio PL: Not part of MPEG-4 audio profiles (0xfe)
No streams included in root OD

iTunes Info:
        Encoder Software: Lavf53.21.0

Track # 1 Info - TrackID 1 - TimeScale 90000 - Duration 02:18:33.193
Media Info: Language "Undetermined" - Type "vide:avc1" - 199318 samples
Visual Track layout: x=0 y=0 width=1280 height=688
MPEG-4 Config: Visual Stream - ObjectTypeIndication 0x21
AVC/H264 Video - Visual Size 1280 x 688
        AVC Info: 1 SPS - 1 PPS - Profile High @ Level 4.1
        NAL Unit length bits: 32
Self-synchronized

Track # 2 Info - TrackID 2 - TimeScale 48000 - Duration 02:18:33.343
Media Info: Language "Undetermined" - Type "soun:mp4a" - 389688 samples
MPEG-4 Config: Audio Stream - ObjectTypeIndication 0x40
MPEG-4 Audio MPEG-4 Audio AAC LC - 2 Channel(s) - SampleRate 48000
Synchronized on stream 1
Alternate Group ID 1

$ avconv -i final.mp4   
avconv version 0.8.4-4:0.8.4-0ubuntu0.12.04.1, Copyright (c) 2000-2012 the Libav developers
  built on Nov  6 2012 16:51:33 with gcc 4.6.3
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'final.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    creation_time   : 2012-07-21 07:08:55
    encoder         : Lavf53.21.0
  Duration: 02:18:33.34, start: 0.000000, bitrate: 2161 kb/s
    Stream #0.0(und): Video: h264 (High), yuv420p, 1280x688, 1973 kb/s, 23.98 fps, 90k     tbr, 90k tbn, 180k tbc
    Metadata:
      creation_time   : 2012-07-21 07:08:55
    Stream #0.1(und): Audio: aac, 48000 Hz, stereo, s16, 180 kb/s
    Metadata:
      creation_time   : 2012-07-21 07:08:55
At least one output file must be specified
    
por Björn Lindqvist 09.12.2012 / 23:43

2 respostas

2

De acordo com as Perguntas frequentes sobre reprodução de vídeo de engenharia do Xbox , os requisitos do h.264 são:

  • Video Profiles: Baseline, main, and high (up to Level 4.1) profiles.
  • Video Bitrate: 10 Mbps with resolutions of 1920 x 1080 at 30fps. See question number 11 for more information.
  • Audio Profiles: 2 channel AAC low complexity (LC)
  • Audio Max Bitrate: No restrictions.

Agora, como uma linha de comando geral, isso deve funcionar:

ffmpeg -i input.mp4 -c:v libx264 -profile:v high -crf 23 -c:a libfaac -q:a 100 output.mp4

Altere os parâmetros -crf e -q:a para variar a qualidade. Um CRF menor significa melhor. 23 é o padrão, mas escolha algo entre 18 e 28 e veja se você gosta da qualidade. A qualidade de áudio do FAAC é em porcentagem, portanto, 100% é o padrão e significa melhor.

No seu caso específico, todos os requisitos são atendidos, exceto pelo número de canais de áudio. Você tem áudio 5.1 e precisa convertê-lo para 2.0 estéreo. Portanto, copiamos o fluxo de bits do vídeo e alteramos o número de canais de áudio usando a opção -ac :

ffmpeg -i input.mp4 -c:a libfaac -q:a 100 -ac 2 -c:v copy output.mp4

Mude as partes destacadas dependendo do codificador que você possui - algumas versões do FFmpeg podem não agrupar o FAAC, então você também pode usar o codificador integrado:

ffmpeg -i input.mp4 -c:a aac -strict experimental -ac 2 -c:v copy output.mp4

Se você obtiver um erro sobre o FFmpeg não conseguir baixar o áudio de 6 canais para 2 canais, o que você precisa fazer é extrair o áudio bruto e, em seguida, reduzir a resolução com FAAD .

ffmpeg -i input.mp4 -c:a copy audio-6.aac

Em seguida, reduza a resolução para um arquivo WAV estéreo PCM:

faad -d -o audio-2.wav audio-6.aac

E remodele-o no vídeo que você tem. Isso não recodificará o vídeo, por isso manterá sua qualidade original, mas teremos que codificar o áudio novamente. Se você não tiver libfaac , veja acima o método alternativo integrado usando aac .

ffmpeg -i input.mp4 -i audio-2.wav -c:v copy -c:a libfaac -map 0:0 -map 1:0 output.mp4

Se o vídeo ainda não for reproduzido, tente recodificar tudo novamente.

    
por 10.12.2012 / 16:11
0

Estou tentando fazer o mesmo que o pôster original. Por alguma razão eu não tive nenhuma sorte em obter as instruções da resposta do slhck para o trabalho. Talvez porque meu laptop de trabalho tenha o Ubuntu, que substituiu ffmpeg por avconv .

De qualquer forma, para encurtar a história, desisti de usar uma solução de linha de comando e instalei handbrake e converti os arquivos usando a Universal preset. Isso produziu arquivos formatados corretamente no formato mp4 , mas oferece a eles m4v extensões. Renomeie os arquivos para fornecer mp4 extensões. Isso significa a mesma coisa, mas o xbox não sabe disso e só vai lê-los se a extensão for mp4 .

    
por 27.12.2013 / 22:58