【问题标题】:screen recording and video encoding with ffmpeg使用 ffmpeg 进行屏幕录制和视频编码
【发布时间】:2017-01-10 13:04:30
【问题描述】:

1.我们需要将屏幕截图录制成 2-3 fps 的视频。质量 - 使屏幕上的文本可读的最低限度,256 色。尽可能减小输出视频文件的大小很重要。

2.我们做了很多测试,目前最合适的方法是每300-500毫秒截图一次,保存为PNG格式,然后运行ffmpeg使用这些参数编码为H.267:

ffmpeg -f image2 -i "C:\png5min\image%04d.png" -y -an -vcodec libx264 -preset veryfast -crf 30 "C:\output.mp4"

3. 以 2-3fps 的截屏视频获得最小输出尺寸的最佳方法是什么?

4.输出文件播放速度非常快,编解码器默认关注图像代表 25fps。但它们实际上是 2fps。 好的,但是如果我们尝试降低输出帧速率,输出文件大小会增加大约两倍! (对于 3m:26s 的视频,从 3mb 到 6mb)。如果我们将输出帧速率设置为 2 - 视频根本不播放帧或仅播放 2 帧 3 分钟...:

-r 2 -f image2 -i "C:\png5min\image%04d.png" -y -an -vcodec libx264 -preset veryfast -crf 30 -r 2 "C:\image5min_2fps_crf30_test__R2-2.mp4"

那么,我们怎样才能在每帧之后增加一些延迟而不增加输出文件的大小???

【问题讨论】:

  • 顺便说一句,如果我们尝试直接用 ffmpeg 录制屏幕,我们会得到一个更大的输出文件: ffmpeg -f dshow -r 2 -i video="screen-capture-recorder" -vcodec libx264 - crf 30 -preset ultrafast c:\output3.mkv 所以,看起来编解码器在压缩预定义的图像集时效果更好,是吗?
  • stackoverflow.com/a/43464269/6180077 访问此链接以获取有效的 FFMPEG c++ mp4 格式屏幕录像机应用程序。

标签: video ffmpeg h.264 video-capture libx264


【解决方案1】:

尝试低输入速率和较高输出速率。

直接捕获:

ffmpeg -f dshow -framerate 2 -i video="screen-capture-recorder" -c:v libx264 -r 12 -crf 30 -preset fast c:\output3.mkv

图像转换:

-framerate 2 -i "C:\png5min\image%04d.png" -y -c:v libx264 -preset medium -crf 30 -r 6 -x264opts ref=5:min-keyint=300:keyint=600:rc-lookahead=150 "C:\image5min_2fps_crf30_test__R2-2.mp4"

ultrafast 预设主要用于全帧率实时捕捉。对于 2 的输入速率,您可以降级,这将为您提供更好的压缩。在图像转换命令中,你可以完全跳过它,所以它会默认为medium,这样会更好地压缩。

【讨论】:

  • 您的直接捕获命令比我们的直接捕获要好,但仍然不如我们的 2 fps -> 25fps... 的图像转换。您提供的图像转换与我们尝试过的 10fps 输出类似... 6-7Mb 文件而不是 3Mb...
  • 所以,我们是对的吗,如果文件大小和转换负载\速度对我们来说很关键,最好像我们一样使用 2 -> 25fps(非常快的视频,16 秒而不是3 分钟),而不仅仅是在播放器中慢速播放? (我们将使用我们的 html5 播放器,无需在其他第三方播放器中播放这些截屏视频)
  • 在所有流行的浏览器中播放 H.264 mp4 视频会有 12 倍慢速播放 (25fps->2fp​​s) 的问题吗?
  • 无法回答浏览器如何处理播放。对于图像转换,请尝试编辑命令。
  • 无法识别的选项“keyint”。拆分参数列表时出错:找不到选项
猜你喜欢
  • 2013-07-18
  • 1970-01-01
  • 2019-05-19
  • 2020-09-24
  • 1970-01-01
  • 2011-12-23
  • 1970-01-01
  • 1970-01-01
  • 2012-02-14
相关资源
最近更新 更多