FFmpeg problemas de compressão com perdas

1

Estou tentando compactar um vídeo muito grande para algo que pode ser carregado no Vimeo, preservando o limite semanal. Qualquer comando que eu use que tente reduzir os resultados de qualidade de imagem em vídeos que traem o VLC ou simplesmente não sejam reproduzidos em outros players. Os códigos que usei incluem:

Apenas compactando:

ffmpeg -i test.mp4 -vcodec libx264 -crf 30 test.mp4

Convertendo .mov para .mp4 e compactando:

ffmpeg -i test.mov -qscale 30 video2.mp4

Alguma idéia do porquê isso está acontecendo? Estou trabalhando no bash do OSX (Mountain Lion).

O último caso resultou neste relatório:

unknown-4c:8d:79:e6:e3:fc:birthday_int3 robinedwards$ ffmpeg -i test.mov -q:v 30 video2.mp4
ffmpeg version 1.1.2 Copyright (c) 2000-2013 the FFmpeg developers
  built on May 14 2013 16:56:21 with Apple LLVM version 4.2 (clang-425.0.24) (based on LLVM 3.2svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/1.1.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-avresample --cc=cc --host-cflags= --host-ldflags= --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-libxvid
  libavutil      52. 13.100 / 52. 13.100
  libavcodec     54. 86.100 / 54. 86.100
  libavformat    54. 59.106 / 54. 59.106
  libavdevice    54.  3.102 / 54.  3.102
  libavfilter     3. 32.100 /  3. 32.100
  libswscale      2.  1.103 /  2.  1.103
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  2.100 / 52.  2.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.mov':
  Metadata:
    major_brand     : qt  
    minor_version   : 537199360
    compatible_brands: qt  
    creation_time   : 2013-07-14 15:44:54
  Duration: 00:00:21.77, start: 0.000000, bitrate: 124460 kb/s
    Stream #0:0(eng): Video: png (png  / 0x20676E70), rgb24, 1280x720, 124459 kb/s, 30 fps, 30 tbr, 3k tbn, 3k tbc
    Metadata:
      creation_time   : 2013-07-14 15:44:54
      handler_name    : Apple Alias Data Handler
File 'video2.mp4' already exists. Overwrite ? [y/N] y
using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2 AVX
[libx264 @ 0x7fb71b82ec00] profile High 4:4:4 Predictive, level 3.1, 4:4:4 8-bit
[libx264 @ 0x7fb71b82ec00] 264 - core 125 - H.264/MPEG-4 AVC codec - Copyleft 2003-2012 - 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=4 threads=6 lookahead_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=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'video2.mp4':
  Metadata:
    major_brand     : qt  
    minor_version   : 537199360
    compatible_brands: qt  
    encoder         : Lavf54.59.106
    Stream #0:0(eng): Video: h264 ([33][0][0][0] / 0x0021), yuv444p, 1280x720, q=-1--1, 15360 tbn, 30 tbc
    Metadata:
      creation_time   : 2013-07-14 15:44:54
      handler_name    : Apple Alias Data Handler
Stream mapping:
  Stream #0:0 -> #0:0 (png -> libx264)
Press [q] to stop, [?] for help
frame=  653 fps= 41 q=-1.0 Lsize=    3211kB time=00:00:21.70 bitrate=1212.2kbits/s    
video:3203kB audio:0kB subtitle:0 global headers:0kB muxing overhead 0.260798%
[libx264 @ 0x7fb71b82ec00] frame I:3     Avg QP:16.09  size: 90551
[libx264 @ 0x7fb71b82ec00] frame P:203   Avg QP:22.52  size: 12759
[libx264 @ 0x7fb71b82ec00] frame B:447   Avg QP:28.39  size:   933
[libx264 @ 0x7fb71b82ec00] consecutive B-frames:  8.6%  0.3%  0.5% 90.7%
[libx264 @ 0x7fb71b82ec00] mb I  I16..4: 23.8% 30.3% 45.9%
[libx264 @ 0x7fb71b82ec00] mb P  I16..4:  0.2%  0.7%  0.5%  P16..4: 17.2%  6.8%  5.7%  0.0%  0.0%    skip:68.8%
[libx264 @ 0x7fb71b82ec00] mb B  I16..4:  0.0%  0.1%  0.0%  B16..8: 14.5%  0.5%  0.2%  direct: 0.6%  skip:84.2%  L0:36.1% L1:61.8% BI: 2.1%
[libx264 @ 0x7fb71b82ec00] 8x8 transform intra:43.6% inter:62.5%
[libx264 @ 0x7fb71b82ec00] coded y,u,v intra: 51.4% 2.6% 27.7% inter: 6.4% 0.0% 2.6%
[libx264 @ 0x7fb71b82ec00] i16 v,h,dc,p: 52% 42%  5%  0%
[libx264 @ 0x7fb71b82ec00] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu:  9% 18% 35%  6%  7%  7%  6%  6%  6%
[libx264 @ 0x7fb71b82ec00] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 13% 24% 23%  6%  9%  6%  9%  3%  7%
[libx264 @ 0x7fb71b82ec00] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0x7fb71b82ec00] ref P L0: 72.4%  9.8% 14.2%  3.6%
[libx264 @ 0x7fb71b82ec00] ref B L0: 90.1%  8.6%  1.4%
[libx264 @ 0x7fb71b82ec00] ref B L1: 92.4%  7.6%
[libx264 @ 0x7fb71b82ec00] kb/s:1205.09
    
por geotheory 14.07.2013 / 19:43

1 resposta

3

Seu vídeo de entrada usa um espaço de cores RGB - bastante incomum. O que acontece é que ffmpeg converte esse espaço de cores para YUV planar, sem subamostrar ( yuv444p ). Infelizmente, esse espaço de cores não é amplamente suportado. Muitos programas ou hardware de consumo simplesmente não o reproduzem. A subamostragem 4: 4: 4 é mais comum na transmissão.

Por as diretrizes do Vimeo , você pode fazer o upload de vídeos High Profile e Main Profile H.264, e eles só suportam 4: 2: 0 subamostragem. O comando ffmpeg adequado seria, portanto:

ffmpeg -i input.mov -c:v libx264 -crf 30 -pix_fmt yuv420p test.mp4

Algumas dicas:

  • Adicione -profile:v high para forçar o perfil alto.
  • A entrada com codificação RGB24 pode significar que você está codificando uma animação ou algo pré-renderizado, talvez a partir de um conjunto individual de imagens. Dê uma olhada na opção -tune animation , que otimiza a codificação para vídeo animado.
  • Um CRF de 30 pode resultar em má qualidade - começaria com 23-25 e só aumentaria o valor se o vídeo ainda fosse grande demais para você.
  • q:v ou qscale não deve ser usado com o codificador libx264, que é o que ffmpeg tenta selecionar automaticamente para vídeo MP4. Use o CRF aqui, como você fez no seu primeiro exemplo.
por 14.07.2013 / 19:53

Tags