Como abrandar um timelapse mp4 criado a partir de jpgs com ffmpeg

0

Estou criando um timelapse a partir de vários arquivos jpg no Windows 10:

C:\dev\ffmpeg-20180219-acdea9e-win64-static\bin\ffmpeg.exe -r 24 -i Base000%3d.jpg -s hd1080 -vcodec libx264 timelapse.mp4

O vídeo resultante exibe muitos quadros por segundo: quero que cada imagem seja exibida por mais tempo (por exemplo, 4 quadros por segundo).

Peguei uma facada no escuro e reduzi o -r 24argumento para -r 4, mas ele exibiu um único quadro durante toda a duração do vídeo:

C:\dev\ffmpeg-20180219-acdea9e-win64-static\bin\ffmpeg.exe -r 4 -i Base000%3d.jpg -s hd1080 -vcodec libx264 timelapse-slow.mp4

ffmpeg version N-90085-gacdea9e7c5 Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 7.2.0 (GCC)
  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libmfx --enable-amf --enable-cuda --enable-cuvid --enable-d3d11va --enable-nvenc --enable-dxva2 --enable-avisynth
  libavutil      56.  7.101 / 56.  7.101
  libavcodec     58. 11.101 / 58. 11.101
  libavformat    58.  9.100 / 58.  9.100
  libavdevice    58.  1.100 / 58.  1.100
  libavfilter     7. 12.100 /  7. 12.100
  libswscale      5.  0.101 /  5.  0.101
  libswresample   3.  0.101 /  3.  0.101
  libpostproc    55.  0.100 / 55.  0.100
Input #0, image2, from 'Base000%3d.jpg':
  Duration: 00:00:03.60, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: mjpeg, yuvj420p(pc, bt470bg/unknown/unknown), 9600x9600 [SAR 1:1 DAR 1:1], 25 tbr, 25 tbn, 25 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (mjpeg (native) -> h264 (libx264))
Press [q] to stop, [?] for help
[swscaler @ 0000025f0b387900] deprecated pixel format used, make sure you did set range correctly
[libx264 @ 0000025f0b330600] using SAR=9/16
[libx264 @ 0000025f0b330600] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 0000025f0b330600] profile High, level 4.0
[libx264 @ 0000025f0b330600] 264 - core 155 r2901 7d0ff22 - H.264/MPEG-4 AVC codec - Copyleft 2003-2018 - 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=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=4 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 'timelapse-slow.mp4':
  Metadata:
    encoder         : Lavf58.9.100
    Stream #0:0: Video: h264 (libx264) (avc1 / 0x31637661), yuvj420p(pc), 1920x1080 [SAR 9:16 DAR 1:1], q=-1--1, 4 fps, 16384 tbn, 4 tbc
    Metadata:
      encoder         : Lavc58.11.101 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
frame=   90 fps=3.4 q=-1.0 Lsize=    3936kB time=00:00:21.75 bitrate=1482.6kbits/s speed=0.821x
video:3935kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.049293%
[libx264 @ 0000025f0b330600] frame I:1     Avg QP:16.35  size:185113
[libx264 @ 0000025f0b330600] frame P:27    Avg QP:14.87  size: 86707
[libx264 @ 0000025f0b330600] frame B:62    Avg QP:19.42  size: 24227
[libx264 @ 0000025f0b330600] consecutive B-frames:  2.2% 15.6%  6.7% 75.6%
[libx264 @ 0000025f0b330600] mb I  I16..4:  5.4% 63.8% 30.8%
[libx264 @ 0000025f0b330600] mb P  I16..4:  0.7% 16.7%  2.2%  P16..4: 29.4%  6.1%  6.2%  0.0%  0.0%    skip:38.6%
[libx264 @ 0000025f0b330600] mb B  I16..4:  0.2%  4.0%  0.1%  B16..8: 12.9%  3.1%  1.1%  direct:10.1%  skip:68.5%  L0:39.3% L1:57.3% BI: 3.4%
[libx264 @ 0000025f0b330600] 8x8 transform intra:85.0% inter:61.8%
[libx264 @ 0000025f0b330600] coded y,uvDC,uvAC intra: 90.9% 35.3% 20.4% inter: 20.5% 13.3% 3.7%
[libx264 @ 0000025f0b330600] i16 v,h,dc,p:  5% 10% 14% 71%
[libx264 @ 0000025f0b330600] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 10% 16% 35%  5%  7%  6%  9%  5%  7%
[libx264 @ 0000025f0b330600] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 19% 26% 15%  6%  9%  6%  8%  4%  7%
[libx264 @ 0000025f0b330600] i8c dc,h,v,p: 75% 15%  9%  1%
[libx264 @ 0000025f0b330600] Weighted P-Frames: Y:44.4% UV:44.4%
[libx264 @ 0000025f0b330600] ref P L0: 60.9%  5.3%  5.4%  2.4% 26.1%
[libx264 @ 0000025f0b330600] ref B L0: 78.0%  8.5% 13.5%
[libx264 @ 0000025f0b330600] ref B L1: 95.9%  4.1%
[libx264 @ 0000025f0b330600] kb/s:1432.27

Como posso fazer isso?

Mitch
fonte
-r 4deve ser o caminho a seguir - você tem certeza de que não mudou mais nada?
Eugen Rieck 02/02
Eu usei esse comando: C:\dev\ffmpeg-20180219-acdea9e-win64-static\bin\ffmpeg.exe -r 4 -i Base000%3d.jpg -s hd1080 -vcodec libx264 timelapse-slow.mp4. Vou atualizar a pergunta.
Mitch
Este comando realmente funcionou bem - parece que seu player não consegue gerenciar os 4 fps. Por favor, tente o VLC player e publique os resultados. Se isso não ajudar, existe uma solução alternativa, mas é um pouco complicada.
Eugen Rieck 02/02
Infelizmente já estou usando o VLC (2.2.6). : / Isso é tão estranho - eu apenas tentei no Chrome e ele é reproduzido sem problemas.
Mitch
1
VLC até v3 não conseguia reproduzir arquivos com fps <6.
Gyan