菜鸟学ffmpeg音视频技术之三实现命令录制(细节相关)

基于FFmpeg和Screen Capturer Recorder实现屏幕和声音的录制 当我们看到一些精彩的视频画面,但无法下载时,可以通过录屏的方式将视频和音频录制下来。 这个时候我们需要安装采集视频和音频的工具screen-capture-recorder。 以下是在windows10环境下,基于FFmpeg和Screen Capturer Recorder实现屏幕和声音的同步录制。 阅读详情

前面我使用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 << "-r" << QString::number(m_nFps);
        args << "-q" << "10";
        args << "-ar" << "44100";
        args << "-ac" << "2";
        args << "-tune" << "zerolatency";
        args << "-preset" << "ultrafast";
        args << "-f" << "mp4";
    }
    else 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";
    }
    else if(m_videoName.contains("title="))//录制窗口
    {
        m_videoDirverName = "gdigrab";
        args << "-f" << m_videoDirverName;
        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 << "-s" << QString::number(m_videoSize.width()) + "x" + QString::number(m_videoSize.height());
        args << "-r" << QString::number(m_nFps);
        args << "-q" << "10";
        args << "-ar" << "44100";
        args << "-ac" << "2";
        args << "-tune" << "zerolatency";
        args << "-preset" << "ultrafast";
        args << "-f" << "mp4";
    }
    else
    {
        m_videoDirverName = "dshow";
    }
    return args;
}

 

最后奉上demo的代码

class FFmpegCommandRecord : public Record
{
    Q_OBJECT
public:
    explicit FFmpegCommandRecord(QObject *parent = nullptr);
    virtual ~FFmpegCommandRecord() override;
    virtual void startRecord() override;
    virtual void stopRecord() override;
    virtual void pauseRecord() override;
    virtual void restoreRecord()override{}

private:
    QStringList commandParama();
    void clear();

private:
    QProcess *m_pRecordProcess{nullptr};
    QFile* m_pConcatFile{nullptr};
    QString m_cacheDir;
    QString m_concatFileName;
    QStringList m_currentRecordTempFiles;
};
 

 

//CPP

 

#include "ffmpegcommandrecord.h"
#include <QProcess>
#include <QDateTime>
#include <QTextStream>
#include <QDebug>
#include <QApplication>
#include <QFile>
#include <QDir>
#include <QTextCodec>

FFmpegCommandRecord::FFmpegCommandRecord(QObject *parent ):Record(parent)
{
    m_cacheDir = QApplication::applicationDirPath() +"/FFmpegCommandCache";
    QDir dir(m_cacheDir);
    if(!dir.exists())
    {
        dir.mkpath(m_cacheDir);
    }
}

FFmpegCommandRecord::~FFmpegCommandRecord()
{
    clear();
}

void FFmpegCommandRecord::startRecord()
{
    if(m_bStopRecord)
    {
        clear();
    }
    if(m_pRecordProcess == nullptr)
    {
        m_pRecordProcess = new QProcess(this);
        //结束录制->合成视频
        connect(m_pRecordProcess, static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished),
            [this](int exitCode, QProcess::ExitStatus exitStatus) {
            if(!m_bStopRecord)
                return;
            QProcess* mergeProcess = new QProcess(this);
            connect(mergeProcess, static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished),
                [mergeProcess, this](int exitCode, QProcess::ExitStatus exitStatus) {
                qDebug() << QStringLiteral("成功合成视频");
                qDebug() << mergeProcess->readAllStandardError();
                if(m_currentRecordTempFiles.count()>3)
                    m_currentVideoPath = m_currentRecordTempFiles.at(2);
                clear();
            });

            if(m_currentRecordTempFiles.count()<3)
                return ;
            QStringList args;
            args << "-f" << "concat";
            args << "-safe" << "0";
            args << "-i" << m_currentRecordTempFiles.at(0);
            args << "-c" << "copy";
            args << m_currentRecordTempFiles.at(2);
            //合成视频
            mergeProcess->start("ffmpeg", args);
        });
    }
    QStringList args = commandParama();
    if(m_pConcatFile == nullptr)
    {
        QString path = QString("%1/%2_tmp").arg(m_cacheDir).arg(QDateTime::currentDateTime().toMSecsSinceEpoch());
         m_pConcatFile = new QFile(path);
        if (!m_pConcatFile->open(QIODevice::ReadWrite | QIODevice::Text|QIODevice::Truncate))
            qDebug() << "File open error";
        m_currentRecordTempFiles<<path;
    }


    QString tmpFilePath = QString("v%1_tmp").arg(QDateTime::currentDateTime().toMSecsSinceEpoch());

    QTextStream out(m_pConcatFile);
    out << "file" << " '" << tmpFilePath << "'\n";
    QString tmpFileAbsolutePath =  m_cacheDir + "/"+ tmpFilePath;
    args << tmpFileAbsolutePath;

    m_currentRecordTempFiles<<tmpFileAbsolutePath;
    m_currentRecordTempFiles<<tmpFileAbsolutePath.replace("_tmp", ".mp4");
    m_pRecordProcess->start("ffmpeg", args);
    m_bStopRecord = false;
}

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 << "-r" << QString::number(m_nFps);
        args << "-q" << "10";
        args << "-ar" << "44100";
        args << "-ac" << "2";
        args << "-tune" << "zerolatency";
        args << "-preset" << "ultrafast";
        args << "-f" << "mp4";
    }
    else 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";
    }
    else if(m_videoName.contains("title="))//录制窗口
    {
        m_videoDirverName = "gdigrab";
        args << "-f" << m_videoDirverName;
        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 << "-s" << QString::number(m_videoSize.width()) + "x" + QString::number(m_videoSize.height());
        args << "-r" << QString::number(m_nFps);
        args << "-q" << "10";
        args << "-ar" << "44100";
        args << "-ac" << "2";
        args << "-tune" << "zerolatency";
        args << "-preset" << "ultrafast";
        args << "-f" << "mp4";
    }
    else
    {
        m_videoDirverName = "dshow";
    }
    return args;
}

void FFmpegCommandRecord::stopRecord()
{
    m_bStopRecord = true;
    m_concatFileName = m_pConcatFile->fileName();
    m_pConcatFile->close();
    m_pConcatFile->deleteLater();
    m_pConcatFile = nullptr;
    m_pRecordProcess->write("q");
}

void FFmpegCommandRecord::pauseRecord()
{
    m_bStopRecord = false;
    m_pRecordProcess->write("q");
}

void FFmpegCommandRecord::clear()
{
    //删除临时文件
    foreach(QString str, m_currentRecordTempFiles)
    {
        if(str.contains("_tmp"))
        {
            QFile::remove(str);
        }
    }
    m_currentVideoPath = "";
    m_currentRecordTempFiles.clear();
}
 

解决ffmpeg使用screen-capture-recorder录屏,有屏幕缩放的情况下录不全的问题 原因:screen-capture-recorder.dll处理了屏幕缩放的问题,而ffmpeg同样处理了,这导致,如果屏幕有125%的缩放,ffmpeg裁剪一次录屏区域,screen-capture-recorder.dll裁剪一次录屏区域,导致了录不全屏幕的现象出现。 解决方式:去除两次缩放中的一次即可,考虑性价比,我们选择在ffmpeg.exe上禁用高DPI缩放,个人用户可右键→属性→兼容性→更改高DPI设置→替代高DPI缩放行为,而如果想自动给用户设置,可通过bat脚本,集成在自动安装中。 阅读详情

相关推荐

ffmpeg中使用screen capture recorder录音的问题

看完本篇文章,可以解决使用ffmpeg录屏时需要的screen capture recorder软件过大问题 在windows下使用ffmpeg 的-gdigrab方法录屏是没有声音的! ffmpeg -f gdigrab -i desktop test.mp4 解决办法就是注册dshow软件 Screen Capturer Recorder的虚拟音频捕捉设备(virtual-audio-cap...

Fandes_F的博客 7927

菜鸟学ffmpeg音视频技术之一实现命令录制

ffmpeg就不解释了,太多资料了,著名的开源做音视频的库 学些录制的动力是目前所在公司使用OBS录屏存在一些问题,录制窗口有些显卡会黑屏,录制屏幕会把电脑的其他软件也会录制进去,理想的录制方式是组合录制方式,把想录制的录制进去,不像录制的去掉。比如一个软件中有多个窗口,只想录制其中一些。希望后续能成功立一个flag。 ffmpeg使用的方式有两种,一种是命令模式,一种是api模式,要实现我想要录制应该是api模式能实现,这里我先使用api实现录制,了解一下录制原理。为了方便依旧使用qt来实现。 .

xpg4321的博客 961

FFmpeg 踩坑记录

本菜鸟使用的FFmpeg封装工具为 FFmpegCommand 感谢大佬,非常好用。 FFmpegCommand 链接:https://github.com/AnJoiner/FFmpegCommand FFmpeg FAQ:https://ffmpeg.org/faq.html#How-can-I-concatenate-video-files_003f 使用FFmpeg 处理视频后,得到0kb文件: 原因:由于项目使用的为 MediaRecorder录制视频。视频的编码为H264.而FFmp..

qq_657172627的博客 2844

ffmpeg快速抓屏DXGI技术,基于screen-capture-recorder抓屏的升级screen-capture-dxgi:directshow滤镜,升级为支持dxgi120帧

一、开发目的: screen-capture-recorder.dll是一款很不错的录屏dshow filter。也可以叫虚拟摄像头,他可以把桌面虚拟为一个dshow 源filter,打开这个虚拟摄像头,就相当于捕获了桌面数据,但是因为其是XP下的产物,抓屏技术为GDI,已经不能满足win10下高帧率(DXGI)的需求。于是,我们找到源码(文章后面有链接),经过修改升级,screen-capture-dxgi-qq35744025.dll可以支持120帧,有无鼠标,捕获方式(GDI或DXGI),支持输出多

xjb2006的专栏 1万+

ffmpeg录屏命令

同时录制系统声音+麦克风时会有回音,因为同样的系统音频在外放后被录制了两次。“麦克风 Realtek High Definition Au” 麦克风。参数调整视频质量,取值范围是0.01-255,设置的数值越小,则越清晰。“virtual-audio-capturer” 系统声音。“screen-capture-recorder” 屏幕。“USB Camera” 显然是我的摄像头。缺点只能录制视频,不能录制音频。录制屏幕+系统声音+麦克风。1.gdigrab抓屏。

m0_60352504的博客 5009

别再只用GWR了!用Python的mgtwr包搞定时空地理加权回归(GTWR)实战

本文详细介绍了如何使用Python的mgtwr包进行时空地理加权回归(GTWR)实战,突破传统GWR模型的局限。通过核心差异解析、实战全流程演示和进阶技巧,帮助读者掌握GTWR在房价波动、污染物扩散等时空数据分析中的应用,提升模型预测精度。

weixin_30899023的博客 341

【FFmpeg】音视频录制 ② ( 使用 Screen Capturer Recorder 软件生成 ffmpeg 可录制的音视频设备 )

一、使用 Screen Capturer Recorder 软件生成音视频设备 1、设备查找问题 - 引入 Screen Capturer Recorder 软件 2、下载安装 Screen Capturer Recorder 软件 3、验证 Screen Capturer Recorder 生成的设备

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 3279

地震勘探中的频谱分析:从基础到应用

本文深入探讨了地震勘探中的频谱分析技术,从基础原理到实际应用。通过傅里叶变换等工具,频谱分析能有效识别不同地震波的频率特征,指导数据采集和处理。文章结合油田勘探案例,展示了如何利用振幅谱和相位谱提升信噪比,并介绍了智能滤波等前沿技术在地震数据处理中的应用。

weixin_42557830的博客 406

【FFmpeg】音视频录制 ③ ( 使用 ffmpeg 录制 Screen Capturer Recorder 软件生成的虚拟音视频设备 | 录制桌面 | 录制音频 | 同时录制 音频和视频数据 )

一、Screen Capturer Recorder 生成的虚拟音视频设备 1、Screen Capturer Recorder 生成的虚拟音视频设备 2、查看上述虚拟音视频设备 二、使用 ffmpeg 录制 Screen Capturer Recorder 软件生成的虚拟音视频设备 1、录制桌面 2、录制音频 3、录制多路音频 - 配置 filter_complex 混音参数 4、同时录制 系统音频 + 桌面视频 5、同时录制 系统音频 + 麦克风音频 + 桌面视频

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 9197

细节增强卷积DEConv详解及代码复现

这种预训练模型能够捕捉图像的基本特征,为后续的端到端训练提供良好的初始参数。例如,在RESIDE和RESIDE-6K数据集上的实验结果表明,使用MSPLCK模块的MixDehazeNet-L模型在RESIDE-IN数据集上首次超过了42dB的PSNR指标,且在所有数据集上均优于先前的方法。例如,在RESIDE和RESIDE-6K数据集上的实验结果表明,使用MSPLCK模块的MixDehazeNet-L模型在RESIDE-IN数据集上首次超过了42dB的PSNR指标,且在所有数据集上均优于先前的方法。

hasakie的博客 1910

避开这些坑!晶圆封装中Wire Bonding(引线键合)的5种常见不良与实战调试心得

本文深入探讨晶圆封装中Wire Bonding(引线键合)的5种常见不良现象,包括Wire Offset、BSOB不良、球径/球厚异常、弧度不良和IMC问题。通过实际案例和参数优化方案,帮助工程师提升封装质量和可靠性,特别适用于半导体封装领域的专业人士。

weixin_33672109的博客 524

FFmpeg使用screen-capture-recorder录制视频失败(确保你的参数输入正确)

录制视频失败,原因请看

weixin_56050945的博客 3218

别再套用星形公式了!三角形接法PMSM的FOC控制,扇区判断与作用时间推导全解析

本文深入解析三角形接法永磁同步电机(PMSM)的FOC控制技术,重点探讨30度相位差对SVPWM扇区判断与电压矢量作用时间的影响。通过数学推导与实验验证,详细讲解修正后的扇区划分规则、作用时间计算公式优化方法,并提供可直接移植到STM32的代码实现,帮助工程师解决三角形接法特有的相电流重构与同步采样难题。

weixin_30689307的博客 468

ffmpeg 命令行录屏和停止录屏

//开始录制 void frmMain::on_start_clicked() { m_Process.setProcessChannelMode(QProcess::MergedChannels); QString cmd = "ffmpeg.exe -f dshow -i video=\"screen-capture-recorder\" e:/123.mp4"; // .\ffmpeg -f dshow -i video="screen-capture-recorder"

混沌的博客 4027

微信小程序 - 实现仿小红书轮播图组件功能,类似小红书笔记页面图片展示播放效果,微信小程序仿小红书幻灯片轮播支持视频播放、图片预览,自动适应图片或视频大小可左右滑动切换(小程序精美轮播图,丝滑切换)

微信小程序,轮播图组件,微信小程序仿小红书轮播图,小红书轮播图仿造,微信小程序轮播图,微信小程序幻灯片,微信小程序高仿小红书轮播图实现,小程序实现类似小红书一样的轮播图组件,轮播图插件,精致轮播图,精美丝滑流畅切换的轮播图,轮播图组件,小红薯轮播图,关于小红书的小程序不同数量的轮播图,展示不一样的轮播指示点的实现,微信小程序仿小红书图片轮播,开发微信小程序模仿小红书,高仿小红书Banner的指示器,小红书小程序笔记详情轮播图指示点的随图片数量的变化动态变化,微信小程序swiper轮播图,js轮播图,html

✅ 精选推荐文章 6929

用 i18n 驯服标准文案:SAP Fiori elements 的 UI 文本本地化与可替换实践全景

本文系统介绍了SAP Fiori elements应用中UI文本本地化的全面解决方案。从框架层与应用层文本的分类原则出发,详细解析了标准文本替换的四步法:资源准备、键值定位、模型配置和验证部署。文章特别针对不同开发场景,提供了XML、ABAP CDS和CAP CDS三种注解方式的文本覆盖写法示例。同时深入探讨了语言回退机制、表格组件标准键覆盖等关键技术细节,并指出了实际项目中的常见问题与解决方案。通过结合官方文档和社区实践,为开发人员在不破坏框架约定的前提下,实现稳定可靠的UI文本本地化提供了完整指导。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 295

Screen Capture Recorder 项目使用教程

Screen Capture Recorder 项目的目录结构如下: ``` screen-capture-recorder-to-video-windows-free/ ├── configuration_setup_utility/ │ ├── setup_screen_tracker_params.rb │ └── incoming.reg ├── source_code/ │ ...

gitblog_01035的博客 1301

本地通知与健康数据的隐私保护方案

随着移动健康(mHealth)应用的普及,本地通知与健康数据的结合为用户提供了更加个性化的健康管理体验。然而,这种便利性也带来了严峻的隐私保护挑战。本文旨在探讨如何在移动应用中实现本地通知功能的同时,确保用户健康数据的隐私安全。本地通知与健康数据结合的技术架构隐私保护的核心技术方案具体算法实现与数学模型实际应用案例分析本文首先介绍背景知识和核心概念,然后深入探讨隐私保护的技术方案,包括算法原理和数学模型。接着提供实际代码实现和应用场景分析,最后讨论未来发展趋势和挑战。

移动开发前沿的博客 1309

使用FFmpeg进行屏幕录像和录音

有些时候我们需要对屏幕进行录制,比如制作视频教程,录制直播等。然而这方面的软件多是收费的,即使是免费试用版的还有水印,特别烦人。下面介绍使用FFmpeg进行屏幕录制的方法。 Windows 先安装dshow软件 Screen Capturer Recorder, 项目地址:https://sourceforge.net/projects/screencapturer/files/ 。然后查...

彼此当年少,莫负好时光 4万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

探索高效录屏新时代:Screen-Capture-Recorder DXGI版全面解析

探索高效录屏新时代:Screen-Capture-Recorder DXGI版全面解析 【下载地址】Screen-Capture-Recorder升级DXGI版本安装包 本仓库提供了一个名为 **screen-capture-recorder 升级 DXGI 版本安装包** 的资源文件下载。该安装包旨在帮助用户轻松安装并...

gitblog_09820的博客 604

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

ffmpeg录屏失败Could not find output pin from video capture device.video=screen-capture-recorder:I/Oerror

ffmpeg版本5.0,最新的 Setup Screen Capturer Recorder v0.12.11.exe执行大家推荐的录屏命令报错

greenery的专栏 2977

ffmpeg 录制屏幕

ffmpeg 录制屏幕步骤1、ffmpeg 下载2、screen capture recorder 下载3、ffmpeg 录屏命令4、ffmpeg 其他命令后续 1、ffmpeg 下载 简介: FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它包括了目前领先的音/视频编码库libavcodec。 FFmpeg是在 Linux 下开发出来的,但它可以在包括 Windows 在内的大多数操作系统中编译。这个项目是由 Fabrice Bellard 发起的,现在由 Mic

爱看书的小沐 1万+

FFmpeg获取DirectShow设备数据(摄像头,录屏)

ffmpeg -f dshow -i video="screen-capture-recorder" -f dshow -i audio="内装麦克风 (Conexant 20672 SmartAudi" -r 5 -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -acodec libmp3lame MyDesktop.mkv。列表显示设备的名称很重要,输入的时候都是使用“-f dshow -i video="{设备名}"”的方式。

weixin_42717961的博客 3774

ffmpeg screen-capture-recorder快速安装

工具 Ffmpeg官方下载: https://ffmpeg.zeranoe.com/builds/ screen capture recorder官方下载: https://github.com/rdp/screen-capture-recorder-to-video-windows-free/releases Ffmpeg+screen-capture-recorder下载: 链接:http...

kesjc2017的博客 7025

最简单的基于FFmpeg的AVDevice例子(屏幕录制)

FFmpeg中有一个和多媒体设备交互的类库:Libavdevice。使用这个库可以读取电脑的多媒体设备的数据,或者输出数据到指定的多媒体设备上。计划写2个有关FFmpeg的libavdevice类库的例子。上篇文章记录了一个基于FFmpeg的Libavdevice类库读取摄像头数据的例子。本篇文章记录一个基于FFmpeg的Libavdevice类库录制屏幕的例子。本文程序录制当前桌面内容并且解

雷霄骅(leixiaohua1020)的专栏 7万+

基于FFmpeg实现屏幕录制

https://trac.ffmpeg.org/wiki/Capture/Desktop https://blog.youkuaiyun.com/Fandes_F/article/details/105121581 https://www.cnblogs.com/-yan/p/4759965.html

Keep Moving~ 7477
上一篇: 菜鸟学ffmpeg音视频技术之二实现命令录制(暂停,组合)
下一篇: Qt 集成miniblink浏览器库之4 解决兼容性问题
很菜但努力
博客等级 码龄17年 113粉丝 50原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值