视频特效滤镜 via FFmpeg Filter

本文详细介绍FFmpeg视频特效滤镜的实现原理,包括视频特效定义、FFmpeg filter架构、av_filter_base类及其子类的使用,以及如何通过FFmpeg进行视频尺寸、位置、亮度、色度等参数处理,实现缩放、旋转、黑白、油画等效果。

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

视频特效定义

视频特效(Video effects 或 Visual effects)是对每帧图像进行各种数字化处理达到的效果。如对画面的尺寸、位置、亮度及色度等参数进行处理,就可获得缩放、旋转、黑白、油画等各种效果。

常见的特效技术有:缩放、旋转、裁剪、叠加、老电影、黑白、淡入淡出、水印、去噪、慢动作、2D 转 3D 等等。

FFmpeg filter

关于 FFmpeg filter 的架构,请参考我的另一篇文章 音频特效插件 via FFmpeg

av_filter_base 类

用 FFmpeg 的 filter 开发时主要区别就是把不同的 filter description string 传到 filtergraph 中,然后设定 sink 端 prefer 的参数,其他部分几乎是一样的,所以我把 filter 的使用封装成了一个 av_filter_base 类,代码请参考 这里

av_filter_base::video_filter_init_begin 函数

创建 video source 和 sink filter。

int video_filter_init_begin(AVCodecContext *dec_ctx, AVRational stream_time_base)
{
   
   
    int hr = -1;
    m_filter_graph = avfilter_graph_alloc();
    RETURN_IF_NULL(m_filter_graph);
    
    char args[512] = {
   
   0};
    _snprintf_s(args, sizeof(args),
        "video_size=%dx%d:pix_fmt=%d:time_base=%d/%d:pixel_aspect=%d/%d",
        dec_ctx->width, dec_ctx->height, dec_ctx->pix_fmt,
        stream_time_base.num, stream_time_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值