ffmpeg教程笔记(C++ffmpeg库应用开发)命令行使用篇——第四章:Fmpeg转码——ffmpeg软编解码(软件编解码、Software Codec)

FFmpeg 从入门到精通

文章目录

  • 第4章 FFmpeg 转码(重点)
    • 4.1 FFmpeg 软编码 H.264 与 H.265
      • 4.1.1 x264 编码参数简介
      • 4.1.2 H.264 编码举例
        • 1. 编码器预设参数设置 preset
          • ultrafast :最快的编码方式
          • superfast :超级快速的编码方式
          • veryfast :非常快速的编码方式
          • faster :稍微快速的编码方式
          • fast :快速的编码方式
          • medium :折中的编码方式
          • slow :慢的编码方式
          • slower :更慢的编码方式
          • veryslow :非常慢的编码方式
          • placebo:最慢的编码方式
        • 2. H.264 编码优化参数 tune(场景优化)
          • film
          • animation
          • grain
          • stillimage
          • psnr
          • ssim
          • fastdecode
          • zerolatency
        • 3. H.264 profile(档次) 与 level(等级) 设置
        • 4. 控制场景切换关键帧插入参数 sc_threshold(-g参数设置GOP长度)
          • 为什么关键帧均匀分布在视频切片时更加方便?
        • 5. 设置 x264 内部参数 x264opts(设置 x264 内部私有参数)
        • 6.CBR 恒定码率设置参数 nal-hrd
          • `-bufsize`参数的作用

第4章 FFmpeg 转码(重点)

4.1 FFmpeg 软编码 H.264 与 H.265

支持 H.264 的封装格式有很多,如 FLV MP4 HLS(M3U8) MKV TS 等格式;

使用 x264 进行 H.264 编码时,所支持的像素格式主要包括:yuv420p yuvj420p yuv422p yuvj422p yuv444p yuvj444p nv12 nv16 nv21,通过 ffmpeg -h encoder=libx264 可以查看到;

ffmpeg教程笔记(C++ffmpeg库应用开发)命令行使用篇——第四章:Fmpeg转码——ffmpeg软编解码(软件编解码、Software Codec)_第1张图片
ffmpeg教程笔记(C++ffmpeg库应用开发)命令行使用篇——第四章:Fmpeg转码——ffmpeg软编解码(软件编解码、Software Codec)_第2张图片

4.1.1 x264 编码参数简介

在这里插入图片描述

ffmpeg教程笔记(C++ffmpeg库应用开发)命令行使用篇——第四章:Fmpeg转码——ffmpeg软编解码(软件编解码、Software Codec)_第3张图片
在这里插入图片描述

4.1.2 H.264 编码举例

在这里插入图片描述

1. 编码器预设参数设置 preset

查看 x264 preset 设置的详细说明: x264 --full help

在这里插入图片描述

ultrafast :最快的编码方式

在这里插入图片描述

superfast :超级快速的编码方式

在这里插入图片描述

veryfast :非常快速的编码方式

在这里插入图片描述

faster :稍微快速的编码方式

在这里插入图片描述

fast :快速的编码方式

在这里插入图片描述

medium :折中的编码方式

参数全部为默认设置。

slow :慢的编码方式

在这里插入图片描述

slower :更慢的编码方式

在这里插入图片描述

veryslow :非常慢的编码方式

在这里插入图片描述

placebo:最慢的编码方式

在这里插入图片描述


ffmpeg教程笔记(C++ffmpeg库应用开发)命令行使用篇——第四章:Fmpeg转码——ffmpeg软编解码(软件编解码、Software Codec)_第4张图片

ffmpeg教程笔记(C++ffmpeg库应用开发)命令行使用篇——第四章:Fmpeg转码——ffmpeg软编解码(软件编解码、Software Codec)_第5张图片
ffmpeg教程笔记(C++ffmpeg库应用开发)命令行使用篇——第四章:Fmpeg转码——ffmpeg软编解码(软件编解码、Software Codec)_第6张图片

ffmpeg教程笔记(C++ffmpeg库应用开发)命令行使用篇——第四章:Fmpeg转码——ffmpeg软编解码(软件编解码、Software Codec)_第7张图片

2. H.264 编码优化参数 tune(场景优化)

在这里插入图片描述

film

在这里插入图片描述

animation

在这里插入图片描述

grain

在这里插入图片描述

stillimage

在这里插入图片描述

psnr

在这里插入图片描述

ssim

在这里插入图片描述

fastdecode

在这里插入图片描述

zerolatency

在这里插入图片描述在这里插入图片描述


在这里插入图片描述

3. H.264 profile(档次) 与 level(等级) 设置

在这里插入图片描述


在这里插入图片描述




ffmpeg教程笔记(C++ffmpeg库应用开发)命令行使用篇——第四章:Fmpeg转码——ffmpeg软编解码(软件编解码、Software Codec)_第8张图片

4. 控制场景切换关键帧插入参数 sc_threshold(-g参数设置GOP长度)


为什么关键帧均匀分布在视频切片时更加方便?

关键帧(I帧)均匀分布在视频切片中的好处主要体现在两个方面:

  1. 随机访问和搜索性能:每一个关键帧都是完全自我包含的,可以独立于其他帧进行解码。这意味着,如果你想跳转到视频中的某个特定时间点(例如,用户拖动进度条进行快进或者快退),播放器可以直接找到最近的关键帧开始播放,而无需从视频开头一路解码过来。因此,如果关键帧均匀地分布在视频中,将会提高视频的随机访问性能。

  2. 错误恢复:如果视频流在传输过程中出现错误,丢失了一部分数据,那么从下一个关键帧开始的内容仍然可以正常解码播放,因为关键帧不依赖于其他帧。因此,关键帧的存在有助于从错误中恢复。

总的来说,关键帧均匀分布可以改善用户体验,提高视频播放的灵活性,并增强系统的健壮性。但请注意,更多的关键帧也意味着更大的文件大小,因为关键帧通常比P帧和B帧需要更多的数据来存储。因此,在实际应用中,需要在这些因素之间找到一个平衡。

5. 设置 x264 内部参数 x264opts(设置 x264 内部私有参数)

视频中的 b 帧越多,同等码率时的清晰度将会越高,但是 b 帧越多,编码与解码所带来的复杂度也就越高,所以合理地使用 b 帧非常重要,尤其是在进行清晰度与码率衡量时。

6.CBR 恒定码率设置参数 nal-hrd


ffmpeg教程笔记(C++ffmpeg库应用开发)命令行使用篇——第四章:Fmpeg转码——ffmpeg软编解码(软件编解码、Software Codec)_第9张图片

ffmpeg教程笔记(C++ffmpeg库应用开发)命令行使用篇——第四章:Fmpeg转码——ffmpeg软编解码(软件编解码、Software Codec)_第10张图片

-bufsize参数的作用

-bufsize参数在ffmpeg中用于指定码率控制缓冲区的大小。具体来说,它影响了视频编码时的平均位率(average bitrate)的测量窗口。

在编码过程中,每个视频/音频帧不一定需要相同数量的数据。有些帧可能更复杂,需要更多的数据来保持质量,而其他帧可能比较简单,需要的数据较少。因此,编码器会尝试在复杂和简单的帧之间分配比特率,以达到设置的平均比特率。

-bufsize参数定义了这个"平均"是如何计算的。如果你设置的-bufsize较大,那么比特率的平均值将基于更长的时间段进行计算,反之亦然。换句话说,-bufsize越大,允许的瞬时比特率峰值就越高,因为有更大的缓冲区可以在低比特率段中"补偿"。

请注意,这个参数并非在所有编码器中都有同样的效果,部分编码器可能会忽略这个设置,或者对其解释可能有所不同。

你可能感兴趣的:(ffmpeg,音视频,ffmpeg,笔记)