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

news/2024/7/10 22:32:28 标签: ffmpeg, 笔记

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 可以查看到;

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

4.1.1 x264 编码参数简介

在这里插入图片描述

在这里插入图片描述

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

4.1.2 H.264 编码举例

在这里插入图片描述

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

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

在这里插入图片描述

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长度)

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

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

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

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

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

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

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

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

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

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

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

-bufsize参数的作用

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

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

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

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


http://www.niftyadmin.cn/n/5321243.html

相关文章

微服务治理:为什么要分析微服务的依赖关系?

在微服务架构中,单个服务相互协作以交付功能。这些协作会在服务之间形成依赖关系,其中一个服务依靠另一个服务来完成自己的任务。虽然依赖关系使功能得以实现,但不受控制的依赖关系可能会导致一系列挑战: 复杂性: 错综复杂的依赖…

NetCore部署微服务(三)

接上文,服务端部署完成之后,同样我们也需要修改一下客户端代码 Blocking Queries 1.1 服务发现 在客户端代码中使用Nuget安装consul包 修改配置文件,我们首先需要把consul的请求地址配置在配置文件中 修改control方法 using Consul; usin…

jmeter--1.安装

目录 1. jmeter和jdk下载地址 2. jdk环境变量配置 3. Jmeter的环境变量配置 1. jmeter和jdk下载地址 链接:https://pan.baidu.com/s/1C8ItsR8ZUGJO9uyTJ-9QtQ?pwdx5m5 提取码:x5m5 2. jdk环境变量配置 2.1 我的电脑右键属性-->高级系统设置--&…

AI Table应用程序接口表的格式说明和作用

AI Table 首先全拼不是AI人工智能表,而是Application Interface Table应用程序接口表。此表按照AUTOSAR的格式规范去定义,并且使用此Excel 表格生成相应的应用软件组件Arxml文件。下面就让我们按照AUTOSAR_EXP_AIUserGuide.pdf文档官方解释描述文件去看看…

go语言的http post推送

go语言的网络功能比较强大,使用go语言实现http 协议的推送非常简单,这里做了个简单的post推送示例。 代码 package mainimport ("bytes""fmt""io/ioutil""crypto/tls""net/http""flag" …

华为VRP常见基本命令

vrp网络设备命令⭐⭐⭐⭐⭐ 基本命令 <Huawei>用户模式&#xff0c;只能做一些查看的操作 <Huawei>system-view # 进入系统模式 [Huawei] 系统模式基本命令操作 [Huawei]sysname R1 #修改设备名称 [R1]interface GigabitEthernet 0/0/0 #进入接口模式&…

使用 LLVM clang C/C++ 编译器编译 OpenSSL 3.X库

1、下载 OpenSSL 3.X 库的源代码放到待编译目录 2、解压并接入 OpenSSL 3.X 库源码的根目录 3、复制 ./Configure 一个取名为 ./Configure-clang 4、修改 ./Configure-clang 找到配置段&#xff1a; CC CXX CPP LD 把它们改成 CC > "/usr/bin/clang-…

自动化测试框架pytest系列之8个常用的装饰器函数

自动化测试框架pytest系列之基础概念介绍(一)-CSDN博客 自动化测试框架pytest系列之21个命令行参数介绍(二)-CSDN博客 自动化测试框架pytest系列之强大的fixture功能&#xff0c;为什么fixture强大&#xff1f;一文拆解它的功能参数。(三)-CSDN博客 接上文 3.5 pytest的8…