前面我使用video=screen-capture-recorder实现了录制的相关功能,这一节来讨论下我踩的坑。
1.screen-capture-recorder只能录制主屏幕,如果电脑连接了扩展屏,想要录制扩展屏只能让扩展屏设置成主屏才能
2.screen-capture-recorder无法设置录制的起始位置和大小,只能录制整个屏幕,想要录制某个区域只能先录制整个屏幕在使用ffmpeg命令来裁剪,这个跟组合录制一样。
启动一个进程来完成即可。
3.注意设备的类型,如果是dshow一定要设置dshow ,gdigrab类型的要设置gdigrab,设别的具体类型可以使用ffmpeg -list_devices true -f dshow -i dummy 来显示,前面会显示
这个设备的具体类型
4.想要直接录制扩展屏可以使用desktop + gdigrab来实现,该方式可以指定录制区域且可以支持扩展屏,设置参数一定要靠前如下:
if(m_videoName.contains("desktop"))//录制桌面
{
m_videoDirverName = "gdigrab";
args << "-f" << m_videoDirverName;
args << "-offset_x" << QString::number(m_recordArea.left());
args << "-offset_y" << QString::number(m_recordArea.top());
args << "-video_size" <<QString::number(m_recordArea.width()) + "x" + QString::number(m_recordArea.height());
args << "-s" << QString::number(m_videoSize.width()) + "x" + QString::number(m_videoSize.height());
args << "-i" << m_videoName;
args << "-f" << m_audioDirverName;
args << "-i" << m_audioName;
args << "-draw_mouse" << "1";
args << "-pix_fmt" << "yuv420p";
args << "-vcodec" << "libx264";
args << "-acodec" << "aac";
args << "-r" << QString::number(m_nFps);
args << "-q" << "10";
args << "-ar" << "44100";
args << "-ac" << "2";
args << "-tune" << "zerolatency";
args << "-preset" << "ultrafast";
args << "-f" << "mp4";
}
上面的参数不详解了,ffmpeg文档都有,不知道的看一下ffmpeg相关书籍就知道了,主要是一些解码器,采样率,编码器,帧率等设置。
5.如果录制的方式不支持某种参数设置一定不要设置,会失败,ffmpeg并不会抛弃参数。
例如使用video=screen-capture-recorder录屏,video=Integrated Webcam录制摄像头,title=Qt Creator录制窗口均不能设置起始位置和大小,设置就会录制失败。
6.录制屏幕会把屏幕窗口中的所有过程全部录制。
归类:
video=screen-capture-recorder 录屏,不支持区域录制,只能全屏录制再裁剪且不支持扩展屏,设备为dshow video=Integrated Webcam 录制摄像头,设备为dshow,不能设置区域录制相关参数 title=Qt Creator 录制窗口,设备为dshow, 其他与录制摄像头类似 desktop 录屏,设备为gdigrab, 可以实现区域录制,支持扩展屏
QStringList FFmpegCommandRecord::commandParama()
{
QStringList args;
if(m_videoName.contains("video="))//录制摄像头或者虚拟桌面
{
m_videoDirverName = "dshow";
args << "-f" << m_videoDirverName;
args << "-i" << m_videoName;
args << "-f" << m_audioDirverName;
args << "-i" << m_audioName;
args << "-pix_fmt" << "yuv420p";
args << "-vcodec" << "libx264";
args << "-acodec" << "aac";
args << "-draw_mouse" << "1";
args << "-s" << QString::number(m_videoSize.width()) + "x" + QString::number(m_videoSize.height());
args <<

本文分享了使用FFmpeg进行录屏的实际经验,包括不同设备类型的配置、区域录制的支持情况及常见问题解决办法。
最低0.47元/天 解锁文章
477

被折叠的 条评论
为什么被折叠?



