选择用于屏幕录制的视频编解码器

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 上使用 ffmpegGNU 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

有关libx264ffmpeg 的更多信息:https://trac.ffmpeg.org/wiki/Encode/H.264(或输入man x264

有关ffmpeg的更多信息,您可以阅读:https://trac.ffmpeg.org/wiki

【讨论】:

以上是关于选择用于屏幕录制的视频编解码器的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 上使用 ProRes 编解码器录制视频?

视音频编解码基本术语及解释

带有“jpeg”视频编解码器的 3GP 视频

ffmpeg用于将视频编码为H264编解码器格式

WebRTC 视频编解码类型的选择 VP8 H264 还是其他?(openh264编码,ffmpeg解码)

WebRTC 视频编解码类型的选择 VP8 H264 还是其他?(openh264编码,ffmpeg解码)