FFmpeg中的滤镜(十六):视频滤镜 -- colorbalance

本文介绍了一种用于调整视频帧中红、绿、蓝三种主色强度的色彩平衡滤镜。该滤镜能够通过调整阴影、中间色调和亮度来平衡画面的颜色,并提供了具体的参数设置示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 描述

修改输入帧中主色(红、绿、蓝)的强度。
该滤镜可以调整输入帧的阴影、中间色调、亮度来平衡红-蓝绿、绿-品红、蓝-黄等颜色。
取正值时,调整平衡向主色靠近;取负值时调整平衡想补色靠近。
滤镜接受以下选项:

  • rs

  • gs

  • bs
     调整红(red)、绿色(green)、蓝色(blue)的阴影;

  • rm

  • gm

  • bm
     调整红(red)、绿色(green)、蓝色(blue)的中间色调;

  • rh

  • gh

  • bh
     调整红(red)、绿色(green)、蓝色(blue)的亮度;

 选项值的允许范围为[-1.0, 1.0],默认值为0。

  • 示例

    添加红色偏色的阴影:
    colorbalance=rs=.3

在Qt中,你可以通过FFmpeg库来处理视频播放和视频效果调整,如亮度、对比度和饱和度。首先,你需要安装FFmpeg库并与你的Qt项目集成。以下是一个简单的步骤: 1. **安装FFmpeg**: - 官方网站下载适合你系统的预编译版本,或者从源代码编译安装。 -FFmpeg的bin目录添加到系统路径中,以便在Qt程序中能够直接调用。 2. **在Qt中链接FFmpeg**: 使用qmake配置文件(`.pro`),添加FFmpeg动态库依赖,例如: ``` QT += multimedia multimediawidgets LIBS += -L/path/to/ffmpeg/lib -lavcodec -lavformat -lavutil -lswscale -lopenh264 ``` 3. **创建QMediaPlayer实例**: ```cpp QMediaPlayer mediaPlayer; mediaPlayer.setMedia(QMediaContent(QUrl("path_to_your_video"))); mediaPlayer.play(); ``` 4. **视频效果调整**: FFmpeg提供了一些API可以实时改变视频流的属性,比如亮度、对比度和饱和度。在Qt中,你可以通过`AVFilterGraph`和`AVFilterContext`来应用滤镜。下面是一个示例,设置亮度: ```cpp // 创建滤镜图 AVFilterGraph* filter_graph = avfilter_graph_alloc(); // 添加亮度滤镜 const char* brightness_filter_name = "movie"; AVFilter* brightness_filter = avfilter_get_by_name(brightness_filter_name); if (!brightness_filter) { qCritical() << "Failed to find brightness filter."; return; } // 设置滤镜选项 AVFilterPad* input_pad = avfilter_graph_get_input_node(filter_graph, 0); AVFilterPad* output_pad = avfilter_graph_create_output_node(filter_graph, NULL, "output", NULL); av_opt_set(brightness_filter, "in", "video", AV_OPT_SEARCH_CHILDREN); // 连接输入到输出 avfilter_link(input_pad, output_pad, 0, 0); // 实例化滤镜上下文并应用到媒体上下文中 AVFilterContext* filter_ctx = avfilter_graph_create_context(brightness_filter, NULL); if (avfilter_graph_config(filter_graph, NULL) < 0) { qCritical() << "Error configuring filter graph."; return; } auto brightness_param = avfilter_get_private_data(filter_ctx, "param"); if (brightness_param) av_dict_set(&(*brightness_param), " Brightness", "50", 0); // 例如将亮度设为50 // 应用滤镜到媒体上下文 mediaPlayer.setVideoFilterGraph(filter_graph); ``` 对比度和饱和度设置类似,需要对应的滤镜名字(如`contrast`和`colorbalance`),以及相应的参数。 记得处理好内存管理,包括FFmpeg上下文和滤镜图的释放。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值