FFmpeg忽略了所有帧率选项,将结果锁定在25帧每秒。

4

ffmpeg版本3.4.8-0ubuntu0.2版权所有(c)2000-2020 FFmpeg开发人员

无论我做什么,ffmpeg都会忽略一切并将其编码为25fps。
-framerate 60没有任何效果
-t 60没有任何效果
-r 60使它插入帧
-r:v 60也是如此
-vf "fps=60"也是如此
-vframes <实际帧数>会使编码过早结束

谷歌搜索显示的所有内容似乎都已经过时了,包括FFmpeg自己的文档。


我发布这篇文章的原因是因为谷歌和其他搜索引擎一直显示过时甚至错误的结果。 - Goury
2
你能分享更多关于你正在尝试做什么的信息吗?比如源帧率是多少,或者这是一组图像吗?你所输入的命令是什么? - Pablitorun
1
你的解决方案有问题。请发布您的原始命令及其完整日志。 - Gyan
3个回答

3

我有过类似的问题。我正在使用ffmpeg 3.4.2,尝试将一组PNG编译成60fps的视频。最终实现的方法如下:

ffmpeg -framerate 60 -i 'foo-%05d.png' -r 60 -c:a aac -vcodec libx264 -vf format=yuv420p foo.mp4

正如其他人在上面提到的,是-framerate 60使得差异。注意命令行中标志的顺序很重要。

从man页面上不清楚为什么-framerate会改变行为,不幸的是,在那里该选项没有被记录在文档中,只有这个参考:

-r[:stream_specifier] fps (input/output,per-stream)
   Set frame rate (Hz value, fraction or abbreviation).

   As an input option, ignore any timestamps stored in the file and instead generate timestamps
   assuming constant frame rate fps.  This is not the same as the -framerate option used for some
   input formats like image2 or v4l2 (it used to be the same in older versions of FFmpeg).  If in
   doubt use -framerate instead of the input option -r.

1
解决方案如下:

ffmpeg -framerate <帧率> -start_number <数字> -i ./<名称>%d.png -r <帧率> -c:v <编码器名称> -r <帧率> -crf <值> -preset <预设名称> <输出文件名> -async 1 -vsync 1

示例:

ffmpeg -framerate 60 -start_number 225 -i ./render_%d.png -r 60 -c:v libx264 -r 60 -crf 10 -preset veryslow render4k.mp4 -async 1 -vsync 1


我发布这篇文章的原因是因为谷歌和其他搜索引擎一直显示过时甚至错误的结果。 - Goury
如果-framerate的值相同,则不需要-r(而且您将其列出两次)。-async 1 -vsync 1是孤立的尾随选项。选项顺序很重要:ffmpeg [input options] input [output options] output - llogan
2
关键部分似乎是-framerate 60,而且它是一个输入选项。 - root
这个链接对我帮助很大。感谢您没有删除这个帖子,尽管它已经收到了3个踩。与那些踩帖的人不同,我理解并欣赏您的帖子。 - root

0
如果你想将图片转换为视频,并且指定为120帧每秒。 你需要在"-i input"之前加上"-framerate 120"。
正确的写法:
ffmpeg -framerate 120 -i input%06d.jpg -pix_fmt yuv420p out.mp4

错误的。
ffmpeg -i input%06d.jpg -pix_fmt yuv420p -framerate 120 out.mp4
ffmpeg -i input%06d.jpg -pix_fmt yuv420p -r 120 out.mp4
ffmpeg -i input%06d.jpg -pix_fmt yuv420p -framerate 120 -r 120 out.mp4

在这个命令中ffmpeg -i input%06d.jpg -pix_fmt yuv420p -r 120 out.mp4,它的意思是:首先从图像创建一个视频,并使用25fps(默认),然后将25fps的视频转换为120fps(视频速度不变,但每帧变为更多相同的帧)。
所以如果你想让图像转换成120fps的视频,你必须使用这个命令:ffmpeg -framerate 120 -i input%06d.jpg -pix_fmt yuv420p out.mp4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接