Estou tentando tirar um conjunto de imagens tiradas em intervalos de 1 segundo para formar um vídeo timelapse. Eu percebi que isso seria fácil com o ffmpeg, mas estou com erros enigmáticos.
Todas as imagens são yup420 jpegs, tiradas de uma câmera android. Eles são salvos como jpegs individuais em uma pasta, são todos de tamanho e formatação idênticos. Eles são nomeados como uma sequência de nomes de 7 dígitos, iniciando em zero (como "0000000.jpg" a "0001000.jpg", por exemplo).
Esta é minha string (nomes de pastas redigidos para maior clareza):
avconv -r 1 -f image2 -i %07d.jpg -vcodec libx264 -crf 18 -preset slower video.mp4
Parece ótimo, eu vejo muitos posts de pessoas que dizem que funciona para eles.
No entanto ffmpeg me dá isso (negrito indica erro)
ffmpeg version 0.8.5-6:0.8.5-1, Copyright (c) 2000-2012 the Libav developers
built on Jan 13 2013 12:05:48 with gcc 4.7.2
*** THIS PROGRAM IS DEPRECATED ***
This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.
[mjpeg @ 0x233aea0] overread 8
Input #0, image2, from '%07d.jpg':
Duration: 00:00:00.04, start: 0.000000, bitrate: N/A
Stream #0.0: Video: mjpeg, yuvj420p, 640x480 [PAR 1:1 DAR 4:3], 25 tbr, 25 tbn, 25 tbc
File 'video.mp4' already exists. Overwrite ? [y/N] y
[buffer @ 0x233b340] w:640 h:480 pixfmt:yuvj420p
[libx264 @ 0x2339fa0] using SAR=1/1
[libx264 @ 0x2339fa0] using cpu capabilities: MMX2 SSE2Fast FastShuffle SSEMisalign LZCNT
[libx264 @ 0x2339fa0] profile Main, level 3.1
[libx264 @ 0x2339fa0] 264 - core 123 r2189 35cf912 - H.264/MPEG-4 AVC codec - Copyleft 2003-2012 - http://www.videolan.org/x264.html - options: cabac=1 ref=8 deblock=1:0:0 analyse=0x1:0x131 me=umh subme=9 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=2 8x8dct=0 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=0 b_adapt=2 b_bias=0 direct=3 weightb=0 open_gop=1 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=60 rc=crf mbtree=1 crf=18.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.25 aq=1:1.00
Output #0, mp4, to 'video.mp4':
Metadata:
encoder : Lavf53.21.1
Stream #0.0: Video: libx264, yuvj420p, 640x480 [PAR 1:1 DAR 4:3], q=-1--1, 25 tbn, 25 tbc
Stream mapping:
Stream #0.0 -> #0.0
Press ctrl-c to stop encoding
[mjpeg @ 0x233aea0] overread 8
frame= 0 fps= 0 q=0.0 Lsize= 0kB time=10000000000.00 bitrate= 0.0kbits/s
video:0kB audio:0kB global headers:0kB muxing overhead 610.000000%
As linhas de importação (que aparecem em vermelho) são aquelas que dizem " [mjpeg @ 0x233aea0] overread 8 ".
Isso me faz pensar que talvez esteja tentando ler as imagens como jpegs de movimento em vez de arquivos jpeg simples, e está falhando de alguma forma. Eu tentei com / sem "-f image2", com o mesmo resultado. E eu também tentei usar o avconv, com o mesmo resultado.
Devo observar que as imagens são válidas e, se eu as converter para * .png (um processo caro e demorado), tudo funcionará. Mas eu preferiria apenas usar os jpegs, sem uma conversão intermediária. Afinal, é para isso que o ffmpeg serve, transcodificando.
Alguém tem uma boa maneira de converter * .jpg em vídeo usando o ffmpeg?