zoukankan      html  css  js  c++  java
  • FFmpeg-Screen-Recording

    1. Linux 系统
    2. 苹果 OS X 系统
    3. Windows 系统
    	3.1 使用 DirectShow ​device设备采集音视频数据:
    	3.2 使用内置 GDI 屏幕抓取器
    4. 硬件编码
    5. 无损录制
    6. 无损录音
    7. 更多例子参考
    8. See also
    以下是一些使用 ffmpeg 捕获桌面和录制屏幕视频的解决方案。
    为简洁起见,这些命令没有指定任何额外的编码器设置。
    默认情况下,这些命令将使用 x264 编码器,这在现代机器上应该相当快。

    1. Linux 系统

    使用 x11grab 设备采集视频图像:
    $ ffmpeg -video_size 1024x768 -framerate 25 -f x11grab -i :0.0+100,200 output.mp4
    这条命令将会从桌面图像的左上角偏移坐标位置为 (x=100, y=200)处获取宽高为1024x768的图像, .
    如果需要加入音频,则采集 ALSA: 
    $ ffmpeg -video_size 1024x768 -framerate 25 -f x11grab -i :0.0+100,200 -f alsa -ac 2 -i hw:0 output.mkv
    或者采集 pulse 输入设备:
    $ ffmpeg -video_size 1024x768 -framerate 25 -f x11grab -i :0.0+100,200 -f pulse -ac 2 -i default output.mkv

    2. 苹果 OS X 系统

    使用 avfoundation 设备采集音视频:
    ffmpeg -f avfoundation -list_devices true -i ""
    这条命令执行后将列出所有 avfoundation 的音频、视频采集设备列表。 可以通过指定想要采集的设备名采集音频、视频:
    ffmpeg -f avfoundation -i "<screen device index>:<audio device index>" out.mov
    这条命令执行后将会从 <screen device index> 编号处获得视频图像,从 <audio device index> 编号处获得音频数据写入至输出文件 out.mov 中.

    3. Windows 系统

    3.1 使用 DirectShow device设备采集音视频数据:

    ffmpeg -f dshow -i video="screen-capture-recorder" output.flv
    执行这条命令后将会 从DirectShow 设备中获得桌面图像并输出为output。flv文件. 
    如果需要采集视频外还需要采集音频则使用如下命令:
    ffmpeg -f dshow -i video="UScreenCapture":audio="Microphone" output.flv
    如果你想获得正在从扬声器播放的音频,需要配置 “Stereo Mix” 设备
    或者
    ffmpeg -f dshow -i video="UScreenCapture" -f dshow -i audio="Microphone" output.flv
    可以通过如下命令行列出所有dshow设备:
    ffmpeg -list_devices true -f dshow -i dummy
    同样可以使用 gdigrab 输入设备从Widnows系统桌面获得屏幕图像.

    3.2 使用内置 GDI 屏幕抓取器

    您还可以使用gdigrab作为输入设备从 Windows 屏幕抓取视频。
    要将所有显示捕获为一个大的连续显示:
    ffmpeg -f gdigrab -framerate 30 -i desktop output.mkv
     
    如果你想限制到一个区域,并显示被抓取的区域:
    ffmpeg -f gdigrab -framerate 30 -offset_x 10 -offset_y 20 -video_size 640x480 -show_region 1 -i desktop output.mkv
     
    获取名为“Calculator”的窗口的内容:
    ffmpeg -f gdigrab -framerate 30 -i title=Calculator output.mkv

    4. 硬件编码

    您可以使用硬件加速来加速编码并减少 CPU 的负载。例如,使用 NVIDIA 硬件编码:
    ffmpeg -f gdigrab -framerate 30 -i desktop -c:v h264_nvenc -qp 0 output.mkv

    5. 无损录制

    如果你想很好的将桌面图像录制下来,x264编码器可以做到,使用无损编码方式即可,例如:
    $ ffmpeg -video_size 1920x1080 -framerate 30 -f x11grab -i :0.0 -c:v libx264 -qp 0 -preset ultrafast capture.mkv
    -qp 0 这个参数是设置 x264 的压缩参数为无损压缩, -preset ultrafast 预设值参数将会尽快的进行 x264 编码压缩.
    这么做在当前主流的硬件设备上做不丢帧的编码是可以做到足够快的,并且还不会占用全部的CPU。
     
    可以通过一次录制,一次编码的方式进行无损编码压缩,录制的时候以最快速度将视频图像录制下来,然后对录制下来的图像进行慢速压缩,这样可以保证图像质量,并且可以保证视频不丢帧
    $ ffmpeg -i capture.mkv -c:v libx264 -qp 0 -preset veryslow capture_smaller.mkv

    6. 无损录音

    如果您的 CPU 不够快,则编码过程可能需要很长时间。为了加快编码过程,您可以使用无损编码并禁用高级编码器选项,例如:
    ffmpeg -video_size 1920x1080 -framerate 30 -f x11grab -i :0.0 -c:v libx264rgb -crf 0 -preset ultrafast output.mkv
    -crf 0告诉 x264 以无损模式编码;-preset ultrafast建议它做这么快。注意使用libx264rgb而不是libx264; 后者将进行从 RGB 到 yuv444p 的有损转换。
     
    编码器在大多数现代硬件上应该足够快,可以在没有任何丢帧的情况下进行录制,甚至为其他应用程序留出足够的 CPU 空间。
    如果您要存档录音或担心文件大小,请再次无损重新编码,但预设速度较慢。请注意,由于初始录制是无损的,重新编码也是无损的,因此在此过程中不会以任何方式引入质量损失。
    ffmpeg -i output.mkv -c:v libx264rgb -crf 0 -preset veryslow output-smaller.mkv

    7. 更多例子参考

    如果你的配置比较低, 使用下面的命令可能会提高你的音视频编码效率,但是质量会稍微有些降低. 在这种情况下,首先你需要获取并将获取的图像保存为未压缩的视频/音频,并且当你完成抓取过程然后开始将它转换为任何你所需要的编码:
     
    Linux:
    $ ffmpeg -framerate 25 -video_size 1024x768 -f x11grab -i :0.0+100,200 -f alsa -ac 2 -i pulse -vcodec libx264 -crf 0 -preset ultrafast -acodec pcm_s16le output.mkv
    $ ffmpeg -i output.mkv -acodec ... -vcodec ... final.mkv
     
    Windows:
    ffmpeg -f dshow -i video="screen-capture-recorder":audio="Microphone" -vcodec libx264 -crf 0 -preset ultrafast -acodec pcm_s16le output.mkv
    ffmpeg -i output.flv -acodec ... -vcodec ... final.mkv

    8. See also

    Windows 替代设备列表: 
     
    sztom osoft@qq.com CC-BY-NC-SA
  • 相关阅读:
    SQL练习题32:请你创建一个actor_name表,并且将actor表中的所有first_name以及last_name导入该表.
    SQL练习题31:对于表actor批量插入如下数据,如果数据已经存在,请忽略(不支持使用replace操作)
    SQL练习题30:对于表actor批量插入如下数据(不能有2条insert语句哦!)
    npm run dev 报错:missing script:dev
    [转]vue中“:”、“.”、“@”的意义
    Vue踩坑记录
    Vue指令:v-clock解决页面闪烁问题
    npm-安装模块时出现rollbackFailedOptional
    js中[]、{}、()的区别
    IDEA离线安装插件
  • 原文地址:https://www.cnblogs.com/sztom/p/14938676.html
Copyright © 2011-2022 走看看