FFmpeg过滤器之crop

crop过滤器使用

FFmpeg crop滤镜详解

这段代码创建并配置了一个crop(裁剪)滤镜,用于从视频帧中提取特定区域。下面我将全面解析这个滤镜的功能和用法。

1. 基本功能

crop滤镜的主要作用:

  • 从输入视频帧中裁剪出指定矩形区域
  • 可以精确控制裁剪的位置和尺寸
  • 支持动态表达式计算裁剪参数

2. 代码解析

c 复制代码
AVFilter* crop_filter = avfilter_get_by_name("crop");
AVFilterContext* crop_filter_ctx;
ret = avfilter_graph_create_filter(&crop_filter_ctx, crop_filter, "crop", 
                                 "out_w=iw:out_h=ih/2:x=0:y=0", 
                                 NULL, filter_graph);
各参数说明:
  1. 滤镜参数字符串解析 :
    • out_w=iw:输出宽度=输入宽度(input width)
    • out_h=ih/2:输出高度=输入高度的一半
    • x=0:从x=0位置开始裁剪
    • y=0:从y=0位置开始裁剪
  2. 特殊变量 :
    • iw:输入宽度(input width)
    • ih:输入高度(input height)
    • ow:输出宽度(output width)
    • oh:输出高度(output height)

3. 参数详解

crop滤镜支持以下主要参数:

参数名 说明 默认值 示例值
out_w 输出区域宽度(ow) iw 640, iw/2
out_h 输出区域高度(oh) ih 480, ih*0.8
x 裁剪区域左上角x坐标 0 10, (iw-ow)/2
y 裁剪区域左上角y坐标 0 20, (ih-oh)/2
keep_aspect 是否保持宽高比 0 1

4. 本示例效果

当前配置 "out_w=iw:out_h=ih/2:x=0:y=0" 表示:

  • 保持原始宽度不变
  • 高度减半
  • 从画面左上角(0,0)开始裁剪
  • 最终效果:保留视频的上半部分

5. 常见使用场景

  1. 裁剪特定区域:
c 复制代码
"out_w=400:out_h=300:x=100:y=50"
  1. 居中裁剪:
c 复制代码
"out_w=iw/2:out_h=ih/2:x=(iw-ow)/2:y=(ih-oh)/2"
  1. 去除黑边:
c 复制代码
"out_w=iw-100:out_h=ih-40:x=50:y=20"

6. 动态表达式

crop滤镜支持使用表达式,可以实现动态裁剪效果:

  1. 随时间变化的裁剪:
c 复制代码
"out_w=iw/2:out_h=ih/2:x='t*10%iw':y=0"
  1. 基于内容的智能裁剪:
c 复制代码
"out_w=min(iw,ih):out_h=ow:x=(iw-ow)/2:y=(ih-oh)/2"

7. 注意事项

  1. 边界检查 :
    • 确保 x+out_w ≤ iw
    • 确保 y+out_h ≤ ih
    • 否则会裁剪失败
  2. 性能影响 :
    • 裁剪操作本身计算量不大
    • 但会改变视频分辨率,影响后续处理
  3. 像素格式 :
    • 裁剪对所有像素格式都有效
    • 但YUV格式需要注意色度平面的对齐

8. 错误处理建议

改进后的错误处理:

c 复制代码
if (ret < 0) {
    char errbuf[128];
    av_strerror(ret, errbuf, sizeof(errbuf));
    fprintf(stderr, "无法创建crop滤镜: %s\n", errbuf);
    return ret;
}

9. 实际应用案例

在本demo中,crop滤镜的配置与后续的vflip滤镜配合使用:

  1. 先用crop保留上半部分
  2. 然后用vflip垂直翻转
  3. 最后用overlay叠加到原视频上
  4. 形成"水中倒影"效果

10. 与其他滤镜的对比

  1. vs scale​滤镜 :
    • crop是空间域操作,选择画面区域
    • scale是尺寸变换,会重采样图像
  2. vs pad​滤镜 :
    • crop是减少画面区域
    • pad是增加画面区域(加黑边)
  3. vs cropdetect​滤镜 :
    • crop是主动裁剪
    • cropdetect是自动检测可裁剪区域

11. 高级用法示例

实现画中画效果:

c 复制代码
// 主视频流
[main_input] -> [main_process]

// 子视频流
[sub_input] -> crop=out_w=iw/3:out_h=ih/3:x=0:y=0 -> [sub_scaled]

// 合并
[main_process] -> [overlay];
[sub_scaled] -> [overlay];
[overlay] -> output

这个crop滤镜是FFmpeg视频处理中非常基础和重要的操作,掌握它可以实现各种画面选取和重构效果。

参考资料:https://github.com/0voice

相关推荐
ofoxcoding1 天前
Gemini TTS 与 ElevenLabs 语音合成实测:同一段视频旁白效果对比
ai·ffmpeg·音视频
_大峰_2 天前
索尼 A7M4 误删视频恢复实战:基于原始卡镜像重建 MP4 数据
ffmpeg·数据恢复·音视频·mp4·exfat
Anhty2 天前
3 款手机音频剪辑 APP 横评,短视频配音后期,免费工具怎么选?
功能测试·ffmpeg·音视频
VidDown3 天前
自动给视频挑一张能看的封面:帧评分、构图与批量生成
python·ffmpeg·音视频·视频
可乐鸡翅yeah_4 天前
HLS 业务 Referer‑Policy 网页元标签引发播放异常排错
前端·javascript·网络·ffmpeg·php·音视频
开开心心就好5 天前
本地文件搜索工具推荐,占用小速度还快
智能手机·ffmpeg·ocr·word·音视频·网络攻击模型·安全架构
我科绝伦(Huanhuan Zhou)5 天前
oracle坏块导致备份不了
数据库·oracle·ffmpeg
RS迷途小书童5 天前
Python+FFmpeg提取大疆无人机MP4内嵌mov_text遥测SRT字幕并做完整性校验
python·ffmpeg·大疆·srt字幕·dji
开开心心就好5 天前
视频压缩工具推荐,画质效果很能打
智能手机·ffmpeg·ocr·word·排序算法·音视频·散列表
可乐鸡翅yeah_6 天前
业务中 M3U8 水印相关坑,硬水印和动态水印区别
前端·网络·数据库·ffmpeg·m3u8在线