将屏幕截图捕获为图像然后使用 ffmpeg 将图像转换为视频文件的时间应该是啥?
Posted
技术标签:
【中文标题】将屏幕截图捕获为图像然后使用 ffmpeg 将图像转换为视频文件的时间应该是啥?【英文标题】:What should be the timing to capture screenshots as images and then convert the images to video file using ffmpeg?将屏幕截图捕获为图像然后使用 ffmpeg 将图像转换为视频文件的时间应该是什么? 【发布时间】:2016-07-22 11:33:39 【问题描述】:我有一个计时器滴答事件,我每 10 毫秒截屏一次
int count = 0;
private void timer1_Tick(object sender, EventArgs e)
Bitmap bmp = new Bitmap(sc.CaptureScreen());
bmp.Save(@"D:\SavedScreenshots\screenshot" + count + ".bmp", System.Drawing.Imaging.ImageFormat.Bmp);
bmp.Dispose();
count ++;
然后我在命令提示符窗口中使用 ffmpeg 命令行从所有图像创建视频文件:
ffmpeg -framerate 2 -i screenshot%d.bmp -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
硬盘上的每个位图文件大小为 7.91 MB 细节:1920x 1080 位深 32
问题是当使用 -framerate 2 制作 ffmpeg 命令行时,当我在 windows 媒体播放器中播放视频文件时,速度非常慢。 当我将帧速率设置为 10 时,它太快了。 当我将帧速率设置为 4 时,我收到黄色错误表示太大。
但也许问题是我每 10 毫秒截屏一次?也许我应该每 1000 毫秒截屏一次?然后我应该在 ffmpeg 命令行中更改什么?
我希望它像普通的视频文件速度一样。不太快也不太慢。 我在屏幕截图中捕获的是我的桌面屏幕,稍后我想将其上传并显示给论坛中的一些支持帮助。
【问题讨论】:
YouTube 中的常规视频速度约为 24fps 或 30fps。这意味着 24 或 30 个位图在 1 秒内。您的计时器必须是 1000/24 或 1000/30 毫秒。我认为在 ffmpeg 中,-framerate 1/24 或 1/30 【参考方案1】:您可以直接捕获,使用 FFmpeg。
ffmpeg -f gdigrab -framerate 24 -i desktop -preset ultrafast -pix_fmt yuv420p out.mp4
(按 Ctrl-C 或 q 停止)。
您可以调整捕获文件的大小,
ffmpeg -i out.mp4 out-small.mp4
如果您想继续使用 C#,请使用 1000/24 毫秒的计时器间隔和
ffmpeg -framerate 24 -i screenshot%d.bmp -c:v libx264 -pix_fmt yuv420p out.mp4
【讨论】:
以上是关于将屏幕截图捕获为图像然后使用 ffmpeg 将图像转换为视频文件的时间应该是啥?的主要内容,如果未能解决你的问题,请参考以下文章