Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >FFmpeg libswscale源码分析2-转码命令行与滤镜图

FFmpeg libswscale源码分析2-转码命令行与滤镜图

作者头像
叶余
发布于 2021-02-04 03:23:59
发布于 2021-02-04 03:23:59
77500
代码可运行
举报
运行总次数:0
代码可运行

本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/14355015.html

libswscale 源码分析系列文章:

1. FFmpeg libswscale源码分析1-API介绍

2. FFmpeg libswscale源码分析2-转码命令行与滤镜图

3. FFmpeg libswscale源码分析3-scale滤镜源码分析

4. FFmpeg libswscale源码分析4-libswscale源码分析

源码分析基于 FFmpeg 4.1 版本。

2. 转码命令行与滤镜图

本节从 ffmpeg 转码命令开始,引入一个完整的示例:hevc yuv422p10le 源软解硬编为 hevc yuv420p10le 视频。

第 2 节、第 3 节、第 4 节是由上到下分层的关系。第 2 节介绍命令行,通过命令行调用 ffmpeg 进程。第 3 节介绍 scale 滤镜,ffmpeg 进程使用了 scale 滤镜,scale 滤镜中会调用 libswscale 库。第 4 节介绍 libswscale 库。

查看 ffmpeg 中 hevc_nvenc 支持的像素格式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@node0 ~]# ffmpeg -hide_banner -h encoder=hevc_nvenc | grep "pixel formats" 
    Supported pixel formats: yuv420p nv12 p010le yuv444p p016le yuv444p16le bgr0 rgb0 cuda

在如下代码 for 循环处打断点,分析滤镜图中的各个滤镜输入输出像素格式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
static int graph_config_links(AVFilterGraph *graph, AVClass *log_ctx)
{
    AVFilterContext *filt;
    int i, ret;

    for (i = 0; i < graph->nb_filters; i++) {
        filt = graph->filters[i];

        if (!filt->nb_outputs) {
            if ((ret = avfilter_config_links(filt)))
                return ret;
        }
    }

    return 0;
}

不显式指定滤镜的转码命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ffmpeg -hide_banner -y -re -i ./hevc_4k_422_10b_5994_60m_vibe.ts 
-c:v hevc_nvenc -preset fast -profile:v main10 -c:a aac -f mpegts /dev/null

滤镜图如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
         yuv422p10le   yuv422p10le    yuv444p16le     yuv444p16le
[buffer] -----> [null] -----> [scale] -----> [format] -----> [buffersink]

ffmpeg 自动插入滤镜,协商滤镜格式。buffer 滤镜输出的格式是 ffmpeg hevc 解码器解码输出的图像像素格式,是 yuv422p10le。buffersink 滤镜的输入格式,是 ffmpeg 在 buffersink 滤镜前插入 format 滤镜,在执行 format 滤镜初始化时,从 hevc_nvenc 编码器支持的像素格式列表中,选定了 yuv444p16le,作为编码器的输入格式。由 scale 滤镜执行像素格式转换操作:yuv422p10le 转为 yuv444p16le。

通过滤镜指定格式 yuv420p10le:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ffmpeg -hide_banner -y -re -i ./hevc_4k_422_10b_5994_60m_vibe.ts -vf format=yuv420p10le 
-c:v hevc_nvenc -preset fast -profile:v main10 -c:a aac -f mpegts /dev/null

滤镜图如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
         yuv422p10le     yuv420p10le      yuv420p10le     p010le           p010le
[buffer] ------> [scale] ------> [format] ------> [scale] ------> [format] ------> [buffersink]

第三个滤镜 format 是我们在命令行中给出的滤镜。第五个滤镜 format 是编码器输入格式滤镜,是 ffmpeg 在滤镜图与编码器间进行像素格式协商时,在 hevc_nvenc 编码器支持的像素格式列表中,选择了 p010le 像素格式作为编码器的输入格式,并在此 format 滤镜前自动插入一个 scale 滤镜执行像素格式转换。

可以看到,一个像素格式转换,在命令行中是由一个 scale 滤镜紧跟一个 format 滤镜实现的,scale + format 滤镜可由用户在命令中显式给出,ffmpeg 也会根据实际情况按需插入。

通过滤镜指定格式 p010le:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ffmpeg -hide_banner -y -re -i ./hevc_4k_422_10b_5994_60m_vibe.ts -vf format=p010le 
-c:v hevc_nvenc -preset fast -profile:v main10 -c:a aac -f mpegts /dev/null

滤镜图如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
         yuv422p10le     p010le           p010le           p010le
[buffer] ------> [scale] ------> [format] ------> [format] ------> [buffersink]

第三个滤镜 format 是我们在命令行中给出的滤镜。第四个滤镜 format 是编码器输入格式滤镜,是 ffmpeg 在滤镜图与编码器间进行像素格式协商时,在 hevc_nvenc 编码器支持的像素格式列表中,选择了 p010le 像素格式作为编码器的输入格式。第二个滤镜 scale 执行实际的像素格式转换操作:yuv422p10le 转 p010le。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-02-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【FFmpeg】ffmpeg 命令行参数 ④ ( ffmpeg 视频参数解析 | 设置视频帧数 | 设置视频码率 | 设置视频帧率 | 设置视频宽高 | 设置视频宽高比 | 设置视频滤镜 )
在 ffmpeg 命令中 , -vframes 参数 的 作用是 指定要输出的视频帧数 , 通过该参数 可以 控制 视频处理的长度 , 即 : 在输出多少帧后 停止处理 视频流 ;
韩曙亮
2024/03/05
8.6K0
【FFmpeg】ffmpeg 命令行参数 ④ ( ffmpeg 视频参数解析 | 设置视频帧数 | 设置视频码率 | 设置视频帧率 | 设置视频宽高 | 设置视频宽高比 | 设置视频滤镜 )
FFmpeg libswscale源码分析3-scale滤镜源码分析
本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/14355017.html
叶余
2021/02/04
6510
FFmpeg原始帧处理-滤镜API用法详解
本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10429145.html
叶余
2019/04/02
4.5K0
FFmpeg原始帧处理-滤镜API用法详解
FFmpeg libswscale源码分析1-API介绍
本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/14349382.html
叶余
2021/02/04
6550
ffmpeg过滤器filter理论与实战
ffmpeg 过滤器,当然也有人称为 ffmpeg 滤镜。(用滤镜听起来好像是给 video 用的,所以不太好,因为 audio 也可以用),ffmpeg 目录下,有个文件夹叫 libavfilter,它可以单独编译为一个库。干嘛用的呢?用于音视频过滤。 比如,我有一个 mp4,想把它缩小一半,输出一个新的 mp4,那么,做缩小动作的,就是 libavfilter。
Gnep@97
2023/12/12
9230
ffmpeg过滤器filter理论与实战
FFmpeg使用手册 - FFmpeg 的基本组成
1 FFmpeg 的基本组成 FFmpeg 的基本组成包含Format、Codec、Filter、Devices、Utils等,结构如图:
用户3765803
2019/03/05
2.9K0
FFmpeg使用手册 - FFmpeg 的基本组成
FFmpeg常用命令行讲解及实战一
上图红框内为编译选项,编译选项支持编解码的格式、封装的格式及网络协议等等第三方包。其中比较常用的:
Gnep@97
2023/11/21
1.8K0
FFmpeg常用命令行讲解及实战一
ffmpeg libswscale实现YUV转RGB
这种复杂的方法可以配置一些sws_getContext()配置不了的参数。比如说设置图像的YUV像素的取值范围是JPEG标准(Y、U、V取值范围都是0-255)还是MPEG标准(Y取值范围是16-235,U、V的取值范围是16-240)
曾大稳
2018/09/11
3.8K0
FFmpeg从入门到精通-云享读书会
FFmpeg是一款开源软件,用于生成处理多媒体数据的各类库和程序。FFmpeg可以转码、处理视频和图片(调整视频、图片大小,去噪等)、打包、传输及播放视频。作为最受欢迎的视频和图像处理软件,它被来自各行各业的不同公司所广泛使用。
DS小龙哥
2022/10/06
5.5K0
FFmpeg从入门到精通-云享读书会
2020 FFmpeg 滤镜详解
在多媒体处理中,术语滤镜(filter)指的是修改未编码的原始音视频数据帧的一种软件工具。
jerrypxiao
2020/09/09
7.3K0
2020 FFmpeg 滤镜详解
FFmpeg命令也就这几类了吧
FFmpeg作为多媒体处理领域的强大开源工具,提供了丰富的音视频处理命令,广泛用于视频转换、格式处理、流媒体传输等。FFmpeg操作基于命令行,灵活而高效,涵盖多种应用场景。本文将为您提供最全的FFmpeg命令讲解,从基础命令结构到各类详细应用示例,帮助您轻松掌握FFmpeg的实用技巧。
程序员的园
2024/11/14
2940
FFmpeg命令也就这几类了吧
FFmpeg 滤镜相关
FFmpeg 除了具有强大的封装/解封装、编/解码功能外,还包含了一个非常强大的组建—滤镜avfilter。avfilter组建经常用于进行多媒体的处理与编辑,FFmpeg中包含多种滤镜。
码客说
2019/10/21
2.8K0
FFmpeg学习笔记汇总
FFmpeg既是一款音视频编解码工具,同时也是一组音视频编解码开发套件,作为编解码开发套件,它为开发者提供了丰富的音视频处理的调用接口。 FFmpeg提供了多种媒体格式的封装和解封装,包括多种音视频编码、多种协议的流媒体、多种色彩格式转换、多种采样率转换、多种码率转换等;FFmpeg框架提供了多种丰富的插件模块,包含封装与解封装的插件、编码与解码的插件等。
天天Lotay
2022/11/14
1.3K0
FFmpeg学习笔记汇总
FFmpeg从入门到精通笔记之四[通俗易懂]
介绍在FFmpeg环境下使用libx264进行H.264(AVC)软编码的操作,H.265(HEVC)的编码操作使用的是libx265,但是参数基本类似。
全栈程序员站长
2022/09/13
2.5K0
ffmpeg对pal8进行scale时丢失透明通道问题分析
通过 ffmpeg 对pal8格式的 png 图片进行缩放时,原始图像的透明通道丢失了,被替换为黑色底。
xiaoxia
2024/11/29
2500
【FFmpeg】ffmpeg 命令行参数 ② ( Windows 环境中 ffmpeg 命令行输出文本搜索 -findstr 用法 | -findstr 搜索文本字符串用法 | 输出命令行到文件中 )
在 Windows 命令行中 , 执行 ffmpeg 命令 , 有可能 在命令行中输出大量信息 ;
韩曙亮
2024/02/23
5690
【FFmpeg】ffmpeg 命令行参数 ② ( Windows 环境中 ffmpeg 命令行输出文本搜索 -findstr 用法 | -findstr 搜索文本字符串用法 | 输出命令行到文件中 )
ffmpeg常用命令集锦
     在实际工作中,通常需要ffmpeg作为工具来验证一个问题,比如播放一个视频,提取一个码流,转码视频,转封格式等,用的时候才发现忘记了相关命令,Google一番花老大的力气才找到自己需要的命令行。本文总结常用的命令,并演示如何通过命令行的help用法去构建新的命令。
用户4148957
2022/06/14
3930
ffmpeg常用命令集锦
刘歧:FFmpeg Filter深度应用
本文来自OnVideo视频创作云平台联合创始人刘歧在LiveVideoStackCon的讲师热身分享,刘歧分享了FFmpeg的基本原理、使用方法及开发方法。在10月19-20日的LiveVideo
LiveVideoStack
2021/09/01
6530
【FFmpeg】ffmpeg 命令行参数 ⑥ ( 使用 FFmpeg 提取 YUV 像素格式数据 | 使用 FFmpeg 提取 RGB 像素格式数据 | RGB 与 YUV 之间的格式转换 )
FFmpeg 是一个非常强大的多媒体处理工具 , 可以用来 处理 / 转换 / 播放 各种音视频格式的数据 , 因此 使用 FFmpeg 自然也可以提取 YUV 像素格式的数据 ;
韩曙亮
2024/03/28
1.4K0
【FFmpeg】ffmpeg 命令行参数 ⑥ ( 使用 FFmpeg 提取 YUV 像素格式数据 | 使用 FFmpeg 提取 RGB 像素格式数据 | RGB 与 YUV 之间的格式转换 )
1. 视频转换
下载:ffmpeg-20200831-4a11a6f-win64-static.zip
jamesjiang
2022/11/20
1.1K0
1. 视频转换
推荐阅读
相关推荐
【FFmpeg】ffmpeg 命令行参数 ④ ( ffmpeg 视频参数解析 | 设置视频帧数 | 设置视频码率 | 设置视频帧率 | 设置视频宽高 | 设置视频宽高比 | 设置视频滤镜 )
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验