为什么在通过FFmpeg从图像创建视频时第一张图像变化如此之快?


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

使用此命令,我将从图像创建视频,但第一个图像正在快速变化。其他人都很好。

这是创建的视频

输出为文本:

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%

这是输出你可以使用保存目标作为文件和“vlc”播放器进行播放。
mirza 2012年

此外,由于你一直在Stack Overflow上发布FFmpeg命令行问题:这些问题实际上是偏离主题的,所以可以在这里发布它们。
slhck

@slhck这里是youtube链接 - > youtube.com/watch?v=CeKcABUmnF4&feature=youtu.be
mirza

@slhck好的,刚刚添加输出
mirza 2012年

@slhck也将输出添加为文本
mirza

Answers:


5

这是一个错误,我自己注意到了。FFmpeg始终按顺序输出第一个和第二个图像,您选择的任何时间仅在第二个图像之后开始。例如,如果你有一帧每十秒输出一次,并且你正在制作25fps的电影,第一张图像将是你的第一帧,第二张图像将在40ms后开始,成为第二帧。之后,第二帧将正确复制到十秒标记(10.040 ???)。我通过复制第一帧来解决这个问题。


2

为了帮助您入门:

  • -qscale不是输入选项,应放在后面 -i

  • -qscale选项适用于MPEG-4 Part II视频,不适用于mp4默认使用的h.264视频。它可能会被忽略。使用-crf 20(或其他合理的值从19到24)来改变质量。

  • 您的输入被错误地解析,可能会尝试强制image2

    ffmpeg -r 0.15 -f image2 -i /var/www/44693/%0d.jpg /var/www/44693/output11.mp4
    
  • 在任何情况下,您的编解码器帧速率和容器帧速率不匹配,这不应该发生。

  • 如果失败,请使用更新版本的FFmpeg。对于Ubuntu,请遵循本指南


我按你在帖子中的建议使用了新命令,但不幸的是结果相同。实际上我不认为它是关于输出编解码器格式,如果您这么认为我可以使用任何其他输出格式。
mirza 2012年

尝试使用另一个输出有所不同,但我认为不会。请查看更新版本的FFmpeg。这经常修复我的错误。
12

如果您在这里没有弄清楚,也可以尝试在ffmpeg-user邮件列表上询问您的问题。如果您没有得到答案,那么如果您认为这是一个错误,请考虑将其提交给FFmpeg Bug Tracker(但首先要查看是否已经存在错误条目)。
llogan 2012年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.