Por que a primeira imagem está mudando tão rapidamente ao criar vídeo a partir de imagens via FFmpeg?

2
ffmpeg -r 0.15 -qscale 2 -i /var/www/44693/%0d.jpg /var/www/44693/output11.mp4

Com este comando, estou criando vídeo a partir de imagens, mas a primeira imagem está mudando tão rapidamente. Outros estão bem.

Aqui está o vídeo criado .

Saída como texto:

root@li465-71:~# ffmpeg -r 0.15 -qscale 2 -i /var/www/44693/%0d.jpg /var/www/446                                                                                        93/output11.mp4
ffmpeg version 0.8.1-4:0.8.1-0ubuntu1, Copyright (c) 2000-2011 the Libav develop                                                                                        ers
  built on Mar 22 2012 05:29:10 with gcc 4.6.3
This program is not developed anymore and is only provided for compatibility. Us                                                                                        e avconv instead (see Changelog for the list of incompatible changes).
[image2 @ 0x85dcaa0] max_analyze_duration reached

Seems stream 0 codec frame rate differs from container frame rate: 0.15 (3/20) -                                                                                        > 0.75 (3/4)
Input #0, image2, from '/var/www/44693/%0d.jpg':
  Duration: 00:01:13.33, start: 0.000000, bitrate: N/A
    Stream #0.0: Video: mjpeg, yuvj420p, 800x600 [PAR 1:1 DAR 4:3], 0.15 fps, 0.                                                                                        75 tbr, 0.15 tbn, 0.15 tbc
File '/var/www/44693/output11.mp4' already exists. Overwrite ? [y/N] y
Incompatible pixel format 'yuvj420p' for codec 'mpeg4', auto-selecting format 'yuv420p'
[buffer @ 0x85df820] w:800 h:600 pixfmt:yuvj420p
[avsink @ 0x85de240] auto-inserting filter 'auto-inserted scaler 0' between the filter 'src'                                                                             and the filter 'out'
[scale @ 0x85de680] w:800 h:600 fmt:yuvj420p -> w:800 h:600 fmt:yuv420p flags:0x4
Output #0, mp4, to '/var/www/44693/output11.mp4':
  Metadata:
    encoder         : Lavf53.21.0
    Stream #0.0: Video: mpeg4, yuv420p, 800x600 [PAR 1:1 DAR 4:3], q=2-31, 200 kb/s, 3 tbn,                                                                             0.75 tbc
Stream mapping:
  Stream #0.0 -> #0.0
Press ctrl-c to stop encoding
frame=   50 fps=  0 q=2.0 Lsize=     949kB time=66.67 bitrate= 116.6kbits/s dup=39 drop=0                                                                               
video:948kB audio:0kB global headers:0kB muxing overhead 0.125724%
    
por motto 08.06.2012 / 12:20

3 respostas

5

Este é um bug, eu notei isso sozinho. O FFmpeg sempre mostra a primeira e a segunda imagens em seqüência, qualquer momento escolhido apenas entra em ação após a segunda imagem. Por exemplo, se você tiver um quadro para produzir a cada dez segundos e fizer um filme de 25 fps, a primeira imagem será seu primeiro quadro, sua segunda imagem será iniciada 40 ms depois e será o segundo quadro. Depois disso, o segundo quadro será duplicado corretamente até a marca de dez segundos (10.040 ???). Eu consegui contornar isso duplicando o primeiro quadro.

    
por 07.10.2012 / 07:15
2

Para começar:

  • -qscale não é uma opção de entrada e deve ser colocado após -i

  • A opção -qscale é para vídeo MPEG-4 Parte II, não para vídeo h.264, que mp4 usa por padrão. Provavelmente será ignorado. Use -crf 20 (ou outros valores sônicos de 19 a 24) para alterar a qualidade.

  • Sua entrada é analisada incorretamente, talvez tente forçar image2 :

    ffmpeg -r 0.15 -f image2 -i /var/www/44693/%0d.jpg /var/www/44693/output11.mp4
    
  • Em qualquer caso, a taxa de quadros do seu codec e a taxa de quadros do contêiner não correspondem, o que não deve acontecer.

  • Se isso falhar, use uma versão mais recente do FFmpeg. Para o Ubuntu, siga este guia .

por 08.06.2012 / 12:50
1

Parece que é um bug, veja link o trabalho em volta é usar "-vf fps = XX" em vez de "-r" aparece (ou duplicar o primeiro quadro).

    
por 15.02.2013 / 21:03

Tags