FFMPEG largando quadros ao codificar a seqüência JPEG na mudança de cor

3

Estou tentando montar uma apresentação de slides usando o imagemagick e o FFMPEG. Eu uso imagemagick para expandir uma única foto em vídeo de 30 fps (imagemagick também lida com coisas como colocar algumas legendas nos quadros ao longo do caminho). Quando eu vou deixar o ffmpeg digeri-lo em um vídeo, ele se encaixa muito bem nas partes coloridas do vídeo, mas quando chega a uma seção em preto e branco, ele reporta frame= 2030 fps=102 q=32766.0 Lsize= 5203kB time=00:01:07.60 bitrate= 630.5kbits/s dup=0 drop=703 e descarta cada quadro de vídeo até atingir algo colorido . Como você pode imaginar, isso resulta em fotos inteiras sendo removidas da apresentação de slides.

Aqui está meu último despejo ...

ffmpeg -y -r 30 -i "teststream/%06d.jpg" -c:v libx264 -r 30 newffmpeg.mp4

ffmpeg version git-2012-12-10-c3bb333 Copyright (c) 2000-2012 the FFmpeg developers
built on Dec 10 2012 22:02:04 with gcc 4.6.1 (Ubuntu/Linaro 4.6.1-9ubuntu3)
configuration: --enable-gpl --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-librtmp --enable-libtheora --enable-libvorbis --enable-libx264 --enable-nonfree --enable-version3
  libavutil      52. 12.100 / 52. 12.100
  libavcodec     54. 79.101 / 54. 79.101
  libavformat    54. 49.100 / 54. 49.100
  libavdevice    54.  3.102 / 54.  3.102
  libavfilter     3. 26.101 /  3. 26.101
  libswscale      2.  1.103 /  2.  1.103
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  2.100 / 52.  2.100
Input #0, image2, from 'teststream/%06d.jpg':
Duration: 00:12:02.80, start: 0.000000, bitrate: N/A
  Stream #0:0: Video: mjpeg, yuvj444p, 720x480 [SAR 72:72 DAR 3:2], 25 fps, 25 tbr, 25 tbn, 25 tbc
[libx264 @ 0x3450140] using SAR=1/1
[libx264 @ 0x3450140] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2
[libx264 @ 0x3450140] profile High, level 3.0
[libx264 @ 0x3450140] 264 - core 129 r2 1cffe9f - 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=-2 threads=12 lookahead_threads=2 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 'newffmpeg.mp4':
  Metadata:
    encoder         : Lavf54.49.100
    Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuvj420p, 720x480 [SAR 1:1 DAR 3:2], q=-1--1, 15360 tbn, 30 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (mjpeg -> libx264)
Press [q] to stop, [?] for help
Input stream #0:0 frame changed from size:720x480 fmt:yuvj444p to size:720x480 fmt:yuvj422p
Input stream #0:0 frame changed from size:720x480 fmt:yuvj422p to size:720x480 fmt:yuvj444pp=584    
frame= 2030 fps=102 q=32766.0 Lsize=    5203kB time=00:01:07.60 bitrate= 630.5kbits/s dup=0 drop=703    
video:5179kB audio:0kB subtitle:0 global headers:0kB muxing overhead 0.472425%
[libx264 @ 0x3450140] frame I:9     Avg QP:20.10  size: 33933
[libx264 @ 0x3450140] frame P:636   Avg QP:24.12  size:  6737
[libx264 @ 0x3450140] frame B:1385  Avg QP:27.04  size:   514
[libx264 @ 0x3450140] consecutive B-frames:  2.5% 15.2% 13.2% 69.2%
[libx264 @ 0x3450140] mb I  I16..4:  8.3% 80.3% 11.5%
[libx264 @ 0x3450140] mb P  I16..4:  1.5%  2.5%  0.2%  P16..4: 41.7% 18.0% 10.3%  0.0%  0.0%    skip:25.9%
[libx264 @ 0x3450140] mb B  I16..4:  0.0%  0.0%  0.0%  B16..8: 26.6%  0.6%  0.1%  direct: 0.2%  skip:72.3%  L0:35.0% L1:60.3% BI: 4.7%
[libx264 @ 0x3450140] 8x8 transform intra:64.1% inter:75.1%
[libx264 @ 0x3450140] coded y,uvDC,uvAC intra: 51.6% 78.0% 43.7% inter: 10.6% 14.9% 2.1%
[libx264 @ 0x3450140] i16 v,h,dc,p: 29% 19%  6% 46%
[libx264 @ 0x3450140] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 23% 15% 17%  5%  9% 10%  7%  8%  6%
[libx264 @ 0x3450140] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 31% 18% 11%  5%  9% 10%  6%  6%  4%
[libx264 @ 0x3450140] i8c dc,h,v,p: 46% 18% 24% 12%
[libx264 @ 0x3450140] Weighted P-Frames: Y:20.1% UV:18.7%
[libx264 @ 0x3450140] ref P L0: 59.2% 23.2% 13.1%  4.3%  0.2%
[libx264 @ 0x3450140] ref B L0: 88.7%  8.3%  3.0%
[libx264 @ 0x3450140] ref B L1: 95.0%  5.0%
[libx264 @ 0x3450140] kb/s:626.88
Received signal 2: terminating.

Uma última nota: Se eu remover o -r 30 da entrada e da saída, ele funciona sem falhas. Eu não tenho idéia do porque o -r 30 está causando um surto.

    
por Matt 11.12.2012 / 00:04

1 resposta

3

Forçar a taxa de quadros para entrada (antes de -i ) e saída (antes do nome do arquivo de saída) funciona de maneira confiável quando você usa arquivos de entrada brutos, como fluxos de bits h.264, onde você precisa informar explicitamente ao FFmpeg taxa de quadros que você espera.

No caso de ler imagens, você pode ver que o módulo image2 continuará lendo a 25 quadros por segundo, mesmo que você tenha especificado -r 30 antes de -i :

Stream #0:0: Video: mjpeg, […] 25 fps, 25 tbr, 25 tbn, 25 tbc

A opção real que você deve usar para image2 é -framerate :

ffmpeg -framerate 30 -i "teststream/%06d.jpg" -c:v libx264 -r 30 newffmpeg.mp4

Isso deve definir a taxa de entrada corretamente, mas desde que você mencionou que ela funciona ao deixar de fora ambas as opções, eu apenas cumpro isso.

    
por 11.12.2012 / 10:12

Tags