选择用于屏幕录制的视频编解码器
Posted
技术标签:
【中文标题】选择用于屏幕录制的视频编解码器【英文标题】:Choosing a video codec for screen recording 【发布时间】:2012-02-14 19:28:13 【问题描述】:我正在通过录制屏幕和声音来完成一系列教程。 就像 PNG 最适合屏幕截图,而 JPEG 更适合照片(虽然有损)一样,哪种视频编码和容器格式更适合屏幕录制?
请为两者提供建议:
-
主副本(用于编辑和存档。(几乎)无损)
分发副本(高压缩,损失可接受)
需要考虑的要点:
高品质视频,屏幕上的文字清晰可见 良好的压缩。我想帧间和帧内压缩都会有效。 请提及可配置参数的推荐值,例如 帧速率、压缩级别等。 支持隐藏式字幕(不是“硬编码”到视频中)。我倾向于 .srt 格式 可在 Windows、Linux 和 MacOS 上查看【问题讨论】:
【参考方案1】:主副本 无损 - AVI 中的 HUFFYUV 是一个不错的选择。 有损 - AVI 中的 MJPEG(JPEG 系列)是一个不错的选择,其中每一帧都将被独立编码。编辑会更快。
分布 视频编解码器 - 使用 H.264 视频(非免费)或 VP8(Google 提供的免费视频编解码器)。您应该使用具有帧间压缩的编解码器,因为屏幕录制往往在帧之间具有很多相似性,因此可以实现更好的压缩。 VP8 和 H.264 都支持帧间压缩,而 MJPEG 不支持。
文件格式 - 根据视频编解码器,您可以使用 MP4 或 MKV 文件格式。 H.264 更多时候封装在 MP4 容器中,而 VP8 封装在 MKV 中。 Google WebM 格式是 MKV 格式的子集。
字幕 - SRT 是外部字幕的不错选择。如果您想在 MKV 文件中嵌入字幕作为单独的流,MKV 支持内部字幕。
帧速率 - 24 fps 对于您的用例来说已经足够了。如果需要,您实际上可以使用更低的帧速率。
比特率/压缩级别 - 取决于视频的分辨率。您应该能够找到很好的教程,提供最适合给定分辨率的比特率。
支持 - 带有 VP8 的 MKV 将在 Windows(Windows 媒体播放器)和 Linux 上播放,前提是安装了必要的软件。 VLC Player 可在 Windows 和 Linux 上使用,并且可以毫无问题地使用 VP8 播放 MKV。
【讨论】:
MJPEG 会像 JPEG 一样为清晰的文本添加阴影。 H.264 现已开源?【参考方案2】:在捕获大部分静态屏幕(桌面录制)时要考虑的一件重要事情是使用 VBR (Variable Bit Rate) 选项而不是 CBR (Constant Bit Rate),在我的情况下,它将视频大小减小了近 10 倍而不会降低质量(视频流平均比特率变得与音频流相当=-D)。
H.264 有这样的选项,但你必须手动设置它,因为通常默认是 CBR(至少在 OBS Studio 中)。如果您使用命令行,ffmpeg
默认具有CRF(恒定质量),这对于非相机录制的视频也很有效。
【讨论】:
【参考方案3】:对于您的主副本,您可以使用另一种方法。
在使用 7zip 压缩 MJPEG 视频时,我能够获得惊人的压缩率。这主要是因为在某些类型的屏幕录制中存在帧的细微差异。如果您录制 3D 游戏,我认为这不会有帮助。
【讨论】:
MJPEG 会像 JPEG 一样为清晰的文本添加阴影。【参考方案4】:对于分发,您可以在 Linux 上使用 ffmpeg
和 GNU libx264 codec
。
录制全屏无音频:
ffmpeg -hide_banner -video_size $(xrandr | awk '/\*/printf$1') -f x11grab -i $DISPLAY.0 screenRecording.mp4
用音频录制全屏:
ffmpeg -hide_banner -video_size $(xrandr | awk '/\*/printf$1') -f x11grab -i $DISPLAY.0 -f pulse -i default screenRecording.mp4
ffmpeg
选择的 H.264 配置文件(当在 MP4 输出文件上给出 -f x11grab
参数时)将为:
[libx264 @ 0x6f47200] profile High 4:4:4 Predictive, level 4.0, 4:4:4, 8-bit
记录选择/选择的窗口没有音频:
ffmpeg -hide_banner -window_id $(xwininfo | awk '/Window id:/printf$4') -f x11grab -i $DISPLAY.0 windowRecording.mp4
用音频记录选择/选择的窗口:
ffmpeg -hide_banner -window_id $(xwininfo | awk '/Window id:/printf$4') -f x11grab -i $DISPLAY.0 -f pulse -i default windowRecording.mp4
ffmpeg
在这种情况下选择的 H.264 配置文件将是:
[libx264 @ 0x6f47200] profile High 4:4:4 Predictive, level 3.1, 4:4:4, 8-bit
有关使用ffmpeg
进行屏幕录制的更多信息以及适用于 Linux、Windows 或 MacOS 的示例,您可以阅读以下内容:https://trac.ffmpeg.org/wiki/Capture/Desktop
有关x11grab
设备的更多信息:https://www.ffmpeg.org/ffmpeg-devices.html#x11grab(或输入man ffmpeg-devices
)
有关libx264
和ffmpeg
的更多信息:https://trac.ffmpeg.org/wiki/Encode/H.264(或输入man x264
)
有关ffmpeg
的更多信息,您可以阅读:https://trac.ffmpeg.org/wiki
【讨论】:
以上是关于选择用于屏幕录制的视频编解码器的主要内容,如果未能解决你的问题,请参考以下文章