data-juicer 视频宽高比过滤器 video_aspect_ratio_filter 实战指南:范围过滤与 any/all 策略解析

发布时间:2026/10/4 10:39:46
data-juicer 视频宽高比过滤器 video_aspect_ratio_filter 实战指南:范围过滤与 any/all 策略解析 人工智能大模型数据工程数据清洗数据增强数据质检【免费下载链接】data-juicerData processing for and with foundation models! ➡️ ➡️ 项目地址https://gitcode.com/gh_mirrors/da/data-juicer点击查看免费下载导读video_aspect_ratio_filter是>self.min_ratio Fraction(str(min_ratio).replace(:, /)) self.max_ratio Fraction(str(max_ratio).replace(:, /))关键点使用标准库fractions.Fraction将字符串解析为精确有理数避免浮点误差例如16/9不会被近似为1.77777778参与区间比较时天然精确冒号与斜杠两种写法等价9:21会被替换为9/21后解析比较基准是W/H宽 ÷ 高9/21 ≈ 0.429表示竖屏下限21/9 ≈ 2.333表示横屏上限。默认范围9/21 ~ 21/9恰好覆盖绝大多数横竖屏视频可视为通用构图合理区间。any_or_all多视频样本的保留策略当一条样本的videos字段含多个视频时用any_or_all决定聚合逻辑video_aspect_ratio_filter.pyif any_or_all not in [any, all]: raise ValueError( fKeep strategy [{any_or_all}] is not supported. fCan only be one of [any, all].) self.any any_or_all any传入非法策略会直接抛出ValueError起到参数校验作用any默认至少一个视频宽高比落在区间内即保留样本all全部视频宽高比都落在区间内才保留样本只要有一个越界就删除。该策略在process_single中落地video_aspect_ratio_filter.pykeep_bools np.array([...]) # 每个视频一个布尔值 if len(keep_bools) 0: return True # 样本中没有任何视频视为保留 if self.any: return keep_bools.any() # any 策略 else: return keep_bools.all() # all 策略注意一个边界行为样本没有任何视频video_aspect_ratios为空数组时直接返回True保留即该算子不会因无视频而丢弃样本——这符合 filter 算子的保守语义需要剔除无视频样本时请搭配其他算子。继承自基类的扩展参数除了表格中的参数VideoAspectRatioFilter还继承了Filter基类的一组通用参数base_op.py可用于微调范围判断语义min_closed_interval默认True最小值是否为闭区间即val min_val而非val min_valmax_closed_interval默认True最大值是否为闭区间即val max_val而非val max_valreversed_range默认False是否反转目标区间即从[min, max]反转为(-∞, min) ∪ (max, ∞)用于剔除落在区间内的视频这类反向需求stats_export_path可将每个样本的宽高比统计导出到指定路径便于事后审计video_key默认videos自定义视频字段名np/batch_size/skip_op_error等运行时参数亦可通过 kwargs 传入。这些参数统一作用于基类的get_keep_boolean方法base_op.py实现了区间端点开闭与反转的统一处理def get_keep_boolean(self, val, min_valNone, max_valNone): res_bool True if min_val is not None: res_bool res_bool and (val min_val if self.min_closed_interval else val min_val) if max_val is not None: res_bool res_bool and (val max_val if self.max_closed_interval else val max_val) if self.reversed_range: res_bool not res_bool return res_bool底层实现原理统计计算与过滤两阶段与>VideoAspectRatioFilter(min_ratio3/4, max_ratio16/9, any_or_allany)输入3 条样本每条含 2 个视频——Sample 1video1.mp416:9 video2.mp43:4Sample 2video2.mp43:4 video3.mp4181:320Sample 3video1.mp416:9 video3.mp4181:320输出3 条样本全部保留。因为每个样本都至少有一个视频的宽高比落在 [3/4, 16/9] 区间内Sample 2 虽含越界的 video30.566 0.75但 video20.75落在边界上满足条件。解释any策略下只要样本中存在一个满足条件的视频该样本就不会被删除。test_all全部视频满足才保留VideoAspectRatioFilter(min_ratio3/4, max_ratio16/9, any_or_allall)输入同上 3 条样本输出仅保留 Sample 1video1 的 1.778 与 video2 的 0.75 均落在 [0.75, 1.778] 内Sample 2、Sample 3 因分别包含越界的 video30.566 0.75而被移除。解释all策略对样本内每个视频都执行区间判定任一视频越界即删除整条样本适合对构图一致性要求极高的场景如要求样本内所有视频共享同一构图风格。单元测试验证从源码到测试的闭环单元测试 覆盖了 4 个典型场景可直接作为该算子的行为规范test_default_params使用默认参数min_ratio9/21, max_ratio21/9, any_or_allany三个单视频样本16:9、3:4、181:320全部保留验证默认范围足够宽容test_any3/4 ~ 16/9any三条双视频样本全部保留test_all3/4 ~ 16/9all仅保留 Sample 1test_parallelnp2并行模式下验证结果与串行一致16:9 与 3:4 保留181:320 被过滤确认算子支持多进程执行。测试框架通过dataset.map(op.compute_stats)dataset.filter(op.process)模拟真实执行路径并额外为数据集添加stats空列与生产流程中的两阶段调用完全一致。在数据配方recipe中的集成方式方式一YAML 配置推荐在数据处理配置中以列表项形式声明该算子。data-juicer 自带的 config_all.yaml 中给出了标准写法- video_aspect_ratio_filter: # filter samples according to the aspect ratios of videos (a fraction of width by height, rw/h) in them min_ratio: 9/21 # the minimum aspect ratio to keep samples, supported format is a string, such as 9:21 or 9/21. max_ratio: 21/9 # the maximum aspect ratio to keep samples, supported format is a string, such as 21:9 or 21/9. any_or_all: any # keep this sample when any/all videos meet the filter condition需要自定义时例如只想保留横屏 16:9 附近的视频并严格要求样本内所有视频一致- video_aspect_ratio_filter: min_ratio: 16/9 max_ratio: 16/9 any_or_all: all方式二Python API直接实例化算子并作用到NestedDataset与单元测试路径一致from data_juicer.core.data import NestedDataset as Dataset from data_juicer.ops.filter.video_aspect_ratio_filter import VideoAspectRatioFilter dataset Dataset.from_list([ {videos: [/path/to/video1.mp4, /path/to/video2.mp4]}, {videos: [/path/to/video3.mp4]}, ]) op VideoAspectRatioFilter(min_ratio3/4, max_ratio16/9, any_or_allall) dataset dataset.map(op.compute_stats) dataset dataset.filter(op.process)方式三完整流程执行在整体处理流程中将算子配置写入 YAML 后通过tools/process_data.py运行python tools/process_data.py --config your_recipe.yaml该算子可安全地与video_duration_filter、video_resolution_filter等视频算子串联由于注册了LOADED_VIDEOS与同类视频算子相邻放置时可触发 op fusion减少重复视频解码。使用建议与注意事项区间端点为闭区间默认min_closed_intervalTrue、max_closed_intervalTrue即min_ratio与max_ratio本身满足条件若需开区间或反向过滤保留区间外视频请传入基类参数min_closed_intervalFalse、max_closed_intervalFalse、reversed_rangeTrue。多视频样本务必显式指定策略any_or_all默认any行为较宽松对构图一致性有强要求的场景应使用all。无视频样本默认保留该算子不会过滤掉videos为空的样本如需剔除请搭配其它校验算子。CPU 轻量宽高比直接读自视频流编码上下文不解码帧内容标签为cpu无需 GPU可放心在多进程np下并行执行。边界区间选择默认9/21 ~ 21/9近似覆盖 0.43 ~ 2.33 的宽高比范围适合通用清洗针对特定任务如短视频竖屏 9:16、长视频横屏 16:9应缩小范围以提升数据纯度。相关资源算子源码单元测试算子列表总览Filter 基类实现完整配置参考测试视频样本video1.mp4、video2.mp4、video3.mp4赞分享人工智能大模型数据工程数据清洗数据增强数据质检【免费下载链接】data-juicerData processing for and with foundation models! ➡️ ➡️ 项目地址https://gitcode.com/gh_mirrors/da/data-juicer点击查看免费下载相关推荐10分钟掌握Kibana搜索过滤时间范围与地理过滤实战指南10分钟掌握Kibana搜索过滤时间范围与地理过滤实战指南 你是否还在为海量日志数据筛选发愁是否因找不到特定区域异常而抓狂本文将通过时间范围与地理过滤两大前端数据可视化数据分析后端可观测性如何从图片快速生成 draw.io 可编辑图表Next AI Draw.io 文件上传指南如何从图片快速生成 draw.io 可编辑图表Next AI Draw.io 文件上传指南 手头有一张 AWS 架构图想改两个节点、换一种配色却发现原图只AI 应用大模型前端后端MCP 服务FlutterFire实时数据过滤客户端与服务器端过滤策略对比FlutterFire实时数据过滤客户端与服务器端过滤策略对比 你是否在开发Flutter应用时遇到过实时数据处理的性能瓶颈当用户规模增长简单的数据获取方后端移动开发上一篇终极指南深度剖析恶意软件家族威胁图谱从Gamaredon到Turla的完整解析下一篇immudb日志系统设计结构化日志与性能监控创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询