能否在不指定时基的情况下用FFmpeg为单帧程序化应用滤镜?
单个AVFrame应用FFmpeg滤镜无需指定真实时基的合规配置方式
buffer滤镜作为滤镜链的输入源,初始化时确实要求必须指定time_base参数,不过如果你的场景里无法获取真实时基,完全可以用合法的默认占位值来配置,这不是临时变通,而是符合FFmpeg规则的解决方案:
- 直接指定通用的默认时基,比如
1/90000(FFmpeg内部常用的默认时基)或者1/1,这类值都是合法的分数格式,能通过buffer滤镜的参数校验。 - 如果使用的滤镜不涉及时间相关处理(比如缩放、格式转换、色彩调整等),这个占位时基不会影响最终的帧处理结果。
具体代码示例
将参数配置修改为:
const AVFilter *buffersrc = avfilter_get_by_name("buffer"); // ... snprintf(args, sizeof(args), "video_size=%dx%d:pix_fmt=%d:time_base=1/1:pixel_aspect=1/1", frame->width, frame->height, frame->format);
补充说明
buffer滤镜要求time_base只是为了完成初始化阶段的参数校验,对于单帧处理场景,你还可以将输入AVFrame的pts设为0,进一步避免时间相关的潜在问题——毕竟单帧本身不存在时间序列的依赖。
内容的提问来源于stack exchange,提问作者Dan M.
相关产品推荐
相关产品推荐

