FFmpeg produz arquivo vazio

2

Eu tenho problemas com o ffmpeg no OSX Lion. Eu estou tentando converter o arquivo MPEG e a saída é sempre um arquivo de tamanho 400kb ou assim ..

O comando é:

 ffmpeg -i out_poem_big.mpg -s 1280x720 -vpre medium outvideo.mp4

Aqui está o log:

FFmpeg version 0.6.3, Copyright (c) 2000-2010 the FFmpeg developers
  built on Feb 21 2012 21:57:04 with gcc 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.1.00)
  configuration: --disable-debug --prefix=/usr/local/Cellar/ffmpeg/0.6.3 --enable-shared --enable-pthreads --enable-nonfree --enable-gpl --disable-indev=jack --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libxvid --enable-libfaad
  libavutil     50.15. 1 / 50.15. 1
  libavcodec    52.72. 2 / 52.72. 2
  libavformat   52.64. 2 / 52.64. 2
  libavdevice   52. 2. 0 / 52. 2. 0
  libswscale     0.11. 0 /  0.11. 0

Seems stream 0 codec frame rate differs from container frame rate: 59.94 (60000/1001) -> 29.97 (60000/2002)
Input #0, mpeg, from 'out_poem_big.mpg':
  Duration: 00:08:35.61, start: 1.000000, bitrate: 14823 kb/s
    Stream #0.0[0x1e0]: Video: mpeg2video, yuv420p, 1280x720 [PAR 1:1 DAR 16:9], 104857 kb/s, 28.90 fps, 29.97 tbr, 90k tbn, 59.94 tbc
    Stream #0.1[0x1c0]: Audio: mp2, 44100 Hz, 2 channels, s16, 128 kb/s
File 'outvideo.mp4' already exists. Overwrite ? [y/N] y
[libx264 @ 0x7fb7ca033600]using SAR=1/1
[libx264 @ 0x7fb7ca033600]using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2 AVX
[libx264 @ 0x7fb7ca033600]profile High, level 3.1
[libx264 @ 0x7fb7ca033600]264 - core 120 - H.264/MPEG-4 AVC codec - Copyleft 2003-2011 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=abr mbtree=1 bitrate=200 ratetol=20.0 qcomp=0.60 qpmin=10 qpmax=51 qpstep=4 ip_ratio=1.41 aq=1:1.00
Output #0, mp4, to 'outvideo.mp4':
  Metadata:
    encoder         : Lavf52.64.2
    Stream #0.0: Video: libx264, yuv420p, 1280x720 [PAR 1:1 DAR 16:9], q=10-51, 200 kb/s, 60k tbn, 29.97 tbc
    Stream #0.1: Audio: libfaac, 44100 Hz, 2 channels, s16, 64 kb/s
Stream mapping:
  Stream #0.0 -> #0.0
  Stream #0.1 -> #0.1
Press [q] to stop encoding
Input Stream #0.0 frame size changed to 1920x1080, yuv420p

Eu tentei todos os tipos de vcodec e a saída é a mesma na melhor das hipóteses, também tentei -sameq mas sem sorte.

O ffmpeg foi instalado via homebrew

    
por stpn 22.02.2012 / 04:11

1 resposta

4

Há algumas coisas que gostaria de destacar:

  • Atualize sua versão do FFmpeg. Está terrivelmente desatualizado. Execute brew update e, em seguida, brew upgrade para fazer isso. O FFmpeg 0.9 introduziu uma nova maneira de especificar presets de codificação, e o que você está usando atualmente é apenas legado.

  • Nunca use sameq . não significa a mesma qualidade . Basicamente significa, usar as mesmas opções matemáticas que foram usadas no vídeo de entrada, o que de fato drasticamente reduz a qualidade.

Onde seu problema é…

Vamos ao assunto em questão. O vídeo de saída tem uma taxa de bits de ~ 200 kBit / s, mas sua entrada tem 14823 kBit / s. É por isso que parece tão ruim. Agora depende do que você quer fazer. Se você quiser apenas mudar o container para MP4, use -vcodec copy e termine com isso.

Se você quiser alterar o tamanho do quadro, use algo como o seguinte:

ffmpeg -i out_poem_big.mpg -c:v libx264 -preset slow -crf 22 -s 1280x720 -c:a libfaac -b:a 128K outvideo.mp4

O que isso significa?

  • O aspecto mais importante aqui é -crf 22 , o fator de taxa constante. Diminui para melhor qualidade, aumenta para pior qualidade. Veja esta resposta para uma explicação mais completa do que ela significa.

    Se você precisar de uma taxa de bits de saída constante, substitua -crf 22 por -b:v 1M , por exemplo. Note, porém, que a taxa de bits constante resulta em pior qualidade devido à forma como o x264 lida com ele.

  • -c:v é usado em vez de -vcodec . Isso significa o mesmo, mas este é o formato padrão e eu prefiro ficar com isso. Além disso, queremos explicitamente libx264 , pois todos os outros codificadores provavelmente reduzirão a qualidade obtida para o tamanho do arquivo (como o MPEG-4 Parte II, -c:v mpeg4 ).

  • -preset slow usará uma variante lenta de codificação com otimização mais eficiente de bit.

  • Especifiquei o codec de áudio e a taxa de bits de áudio. Altere de acordo, dependendo do que você deseja usar.

  • Veja estas respostas para mais explicações sobre a codificação do FFmpeg:

por 22.02.2012 / 10:10