FFmpeg安装与使用教程:一键搞定Windows和Linux环境下的屏幕录制

FFmpeg 是一款强大的多媒体处理工具,可用于自动化操作音频和视频,支持 Windows、Linux、Mac OS 等多个操作系统。它能够实现解码、编码、转码、过滤、屏幕录制等多种功能,并且自带的 ffplay 工具还可以用于视频播放。本文将重点介绍在Ubuntu和Windows环境下如何使用 FFmpeg 进行屏幕录制。

1 FFmpeg安装

Windows、Linux和macOS环境对应版本可在下面的地址下载:https://ffmpeg.org/download.html?ref=img.ly#build-windows

1.1 Windows环境安装

下载最新版本ffmpeg-release-full-shared.7z文件,带 shared 和不带 shared 功能完全一样:

  • 带 shared :多了 include、lib 目录,包含 FFmpeg 相关依赖。
  • 不带 shared :已经把相关的依赖编译到可执行文件中了。

下载完成后解压,bin目录内容如下:

在这里插入图片描述

然后将bin目录添加到环境变量。

打开命令行窗口,输入ffmpeg -version 验证是否安装成功:

$ ffmpeg -version
ffmpeg version 7.1-full_build-www.gyan.dev Copyright (c) 2000-2024 the FFmpeg developers
built with gcc 14.2.0 (Rev1, Built by MSYS2 project)
configuration: --enable-gpl --enable-version3 --enable-shared --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libaribb24 --enable-libaribcaption --enable-libdav1d --enable-libdavs2 --enable-libopenjpeg --enable-libquirc --enable-libuavs3d --enable-libxevd --enable-libzvbi --enable-libqrencode --enable-librav1e --enable-libsvtav1 --enable-libvvenc --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxeve --enable-libxvid --enable-libaom --enable-libjxl --enable-libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-liblensfun --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-dxva2 --enable-d3d11va --enable-d3d12va --enable-ffnvcodec --enable-libvpl --enable-nvdec --enable-nvenc --enable-vaapi --enable-libshaderc --enable-vulkan --enable-libplacebo --enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libcodec2 --enable-libilbc --enable-libgsm --enable-liblc3 --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint
libavutil      59. 39.100 / 59. 39.100
libavcodec     61. 19.100 / 61. 19.100
libavformat    61.  7.100 / 61.  7.100
libavdevice    61.  3.100 / 61.  3.100
libavfilter    10.  4.100 / 10.  4.100
libswscale      8.  3.100 /  8.  3.100
libswresample   5.  3.100 /  5.  3.100
libpostproc    58.  3.100 / 58.  3.100

1.2 Linux环境安装

这里介绍Ubuntu环境下ffmpeg的安装方法,Ubuntu版本为20.04.6。

使用如下命令安装:

$ sudo apt-get install ffmpeg

如果要在离线环境安装,可使用如下方式:

  1. 在有网络的环境下执行sudo apt-get install --download-only ffmpeg命令下载ffmpeg及其依赖包;
  2. 安装包会下载到本地缓存目录/var/cache/apt/archives/下(下载前可将此目录下的缓存清掉),将下载的安装包放到离线机器上;
  3. 在离线机器上,进入下载的 .deb 包的目录,使用 dpkg 命令安装这些 .deb 文件:sudo dpkg -i *.deb

安装完成后,执行ffmpeg -version命令查看是否安装成功:

$ ffmpeg -version
ffmpeg version 4.2.7-0ubuntu0.1 Copyright (c) 2000-2022 the FFmpeg developers
built with gcc 9 (Ubuntu 9.4.0-1ubuntu1~20.04.1)
configuration: --prefix=/usr --extra-version=0ubuntu0.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-nvenc --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
libavutil      56. 31.100 / 56. 31.100
libavcodec     58. 54.100 / 58. 54.100
libavformat    58. 29.100 / 58. 29.100
libavdevice    58.  8.100 / 58.  8.100
libavfilter     7. 57.100 /  7. 57.100
libavresample   4.  0.  0 /  4.  0.  0
libswscale      5.  5.100 /  5.  5.100
libswresample   3.  5.100 /  3.  5.100
libpostproc    55.  5.100 / 55.  5.100

2 屏幕录制

2.1 Linux环境屏幕录制

2.1.1 录制命令

可执行如下命令进行屏幕录制:

$ ffmpeg -f x11grab -video_size $(xdpyinfo | grep 'dimensions:'|awk '{print $2}') -draw_mouse 1 -i :0.0+0,0 -vf scale='trunc(iw/2)*2:trunc(ih/2)*2' -profile:v high444 -level 4.1 -pix_fmt yuv420p -preset:v ultrafast -r 30.0 -loglevel info output.mp4 -y

使用如下命令查看屏幕索引:

$ echo $DISPLAY
:0

2.1.2 参数解析

  • -f x11grab: 指定使用X11抓取屏幕,x11grab是 Linux平台用于屏幕捕获的格式。

  • -video_size $(xdpyinfo | grep 'dimensions:'|awk '{print $2}'): 自动获取屏幕分辨率。

  • -draw_mouse 1: 启用鼠标绘制,即录制视频时会显示鼠标指针,设置为0表示禁用鼠标绘制。

  • -i :0.0+0,0: 从屏幕的 (0, 0) 位置开始录制,宽度和高度由video_size参数指定。

  • -vf 滤镜选项,将输出分辨率调整分辨率为 2 的倍数(向下或向上取整)。如果输入或输出分辨率不是 2 的倍数,可能会导致错误。这是因为某些视频编码器(如 H.264 和 H.265)要求分辨率的宽度和高度必须是 2 的倍数,或者某些像素格式(如 yuv420p)也有此限制。iw:输入视频的宽度。ih:输入视频的高度。trunc(iw/2)*2:将宽度除以 2,然后取整,再乘以 2,确保宽度是 2 的倍数。trunc(ih/2)*2:确保高度是 2 的倍数。

  • -profile:v high444 :视频编码,指定编码器的设置,以便实现不同的编码效率和质量。high444H.264H.265/HEVC 编码器的一种配置文件,适用于高质量的视频编码,支持更高的色彩精度和更高的色彩空间。

  • -level :指定编码的级别,影响编码器的解码要求。以下是 H.264 和 H.265 编码常见的几个级别以及它们的技术限制:

    级别最大分辨率最大帧率最大比特率说明
    3.1720p (1280x720)30fps10 Mbps适用于低分辨率视频
    4.01080p (1920x1080)30fps20 Mbps适用于 Full HD 视频
    4.11080p (1920x1080)60fps50 Mbps支持 60fps 和 1080p 视频
    5.04K (3840x2160)30fps100 Mbps支持 4K 视频,但帧率较低
    5.14K (3840x2160)60fps120 Mbps支持 4K 视频和 60fps,适用于高质量视频
    5.28K (7680x4320)60fps240 Mbps支持 8K 视频和高帧率
  • -pix_fmt :指定视频的像素格式,决定了视频数据的存储方式,尤其是色彩信息的存储(如色彩空间、色彩采样方式等)。yuv420p表示4:2:0 色彩采样,是最常见的像素格式。它会对颜色信息进行子采样,每个像素只有一个亮度(Y)信息,但色度(U, V)信息共享多个像素。

  • -preset ultrafast: 使用最快的编码预设,这会牺牲一些压缩效率。此参数控制编码速度和质量的平衡。较慢的预设提供更好的压缩效率和更小的文件大小,但编码时间更长。常见的预设包括:ultrafast, superfast, veryfast, fast, medium, slow, slower, veryslow

  • -r 30:设置帧率为 30 FPS(可以根据需要调整)。

  • -loglevel: 日志级别,支持的日志级别:

    • quiet: 完全不输出任何日志。
    • panic: 只输出导致程序崩溃的严重错误。
    • fatal: 只输出导致程序终止的错误。
    • error: 只输出错误信息。
    • warning: 输出警告和错误信息。
    • info: 输出基本的运行信息(默认级别)。
    • verbose: 输出详细的运行信息。
    • debug: 输出调试信息。
  • output.mp4:指定输出文件的名称和格式。

  • -y: 自动覆盖已存在的输出文件。

在FFmpeg的命令中,默认情况下没有指定音频输入时,FFmpeg不会录制声音。执行这个命令后,FFmpeg 会开始录制屏幕,直到你手动停止录制,可 Ctrl + C 终止。

2.2 Windows环境屏幕录制

2.2.1 录制命令

Windows环境可使用如下命令进行全屏录制:

$ ffmpeg -rtbufsize 1500M -f gdigrab -framerate 29.97 -draw_mouse 0 -offset_x 0 -offset_y 0 -i desktop -pix_fmt yuv420p -c:v libx264 -preset ultrafast D:/myvideo.mp4 -y

2.2.2 参数解析

输入捕获配置:

  • -rtbufsize 1500M:设置实时输入缓冲区大小为1500MB,防止高分辨率/高帧率捕获时缓冲不足导致丢帧。
  • -f gdigrab:使用FFmpeg的gdigrab设备捕获Windows桌面(通过GDI接口),gdigrab 是 Windows 平台用于屏幕捕获的格式。
  • -framerate 29.97:设置捕获帧率为29.97 FPS(NTSC标准帧率,适用于流畅动作)。
  • -draw_mouse 0 :不捕获鼠标光标(设为1则包含光标)。
  • -offset_x 0 -offset_y 0:捕获区域从屏幕左上角开始(坐标原点)。若需局部捕获,可调整偏移量(如-offset_x 100 -offset_y 200)。
  • -i desktop:设置输入源为整个桌面(desktop表示全屏;也可指定窗口标题捕获单个窗口)。

视频编码配置:

  • -pix_fmt yuv420p:强制使用YUV 4:2:0像素格式,确保广泛兼容性(多数播放器/设备支持此格式)。
  • -c:v libx264:使用H.264编码器(libx264),平衡画质与压缩效率。
  • -preset ultrafast:启用编码器的最快预设(ultrafast),牺牲压缩率换编码速度,降低CPU负载,适合实时录制(但文件较大)。

输出配置

  • D:/myvideo.mp4:输出文件路径(MP4容器格式,默认兼容H.264编码)。
  • -y:自动覆盖已存在的输出文件,无需确认。

3 参考文档

  1. https://johnvansickle.com/ffmpeg/
--THE END--
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值