微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

输入区域0:0:1280:675不在填充区域0:0:1280:674或零大小

如何解决输入区域0:0:1280:675不在填充区域0:0:1280:674或零大小

我正在为视频列表设置填充。当分辨率为854x480时,它可以工作,而当我切换为1280x720时,它不起作用。如这个问题所述,最可能是由于奇数:FFmpeg pad filter calculating wrong width

这是我的原始代码(创建过滤器复杂部分的bash脚本):

# Resolution
RES_X=1280
RES_Y=720
...
FILTER_COMPLEX_LIST="${FILTER_COMPLEX_LIST}[$i:v]scale=$RES_X:$RES_Y:force_original_aspect_ratio=1,pad=width=$RES_X:height=$RES_Y:x='if(lt(in_w,$RES_X),($RES_X-in_w)/2,0)':0,setsar=1[v$i];"

我更改了焊盘宽度和焊盘高度的计算,但是错误是相同的。

FILTER_COMPLEX_LIST="${FILTER_COMPLEX_LIST}[$i:v]scale=$RES_X:$RES_Y:force_original_aspect_ratio=1,pad=width=ceil($RES_X/2)*2:height=ceil($RES_Y/2)*2:x='if(lt(in_w,setsar=1$

这是错误

[Parsed_pa​​d_19 @ 0x558b4fe3bb40]输入区域0:0:1280:675不在 填充区域0:0:1280:674或零尺寸[Parsed_pa​​d_19 @ 0x558b4fe3bb40]无法在Parsed_pa​​d_19上配置输入键盘错误 配置复杂的过滤器。参数无效

我不明白为什么填充区域最初不是padded area 0:0:1280:720。 我应该在哪里添加ceil()或floor()函数来完成这项工作?

解决方法

分析日志,我意识到了以下几行:

... [Parsed_pa​​d_1 @ 0x564355d71aa0]将“宽度”设置为值“ 1280” [Parsed_pa​​d_1 @ 0x564355d71aa0]将“高度”设置为值“ 720” [Parsed_pa​​d_1 @ 0x564355d71aa0]将“ x”设置为值 'if(lt(in_w,1280),(1280-in_w)/ 2,0)'[Parsed_pa​​d_1 @ 0x564355d71aa0] 将“高度”设置为值“ 0” [Parsed_setsar_2 @ 0x564355b92140] 将“ sar”设置为值“ 1” [Parsed_scale_3 @ 0x564355d7dde0]设置 'w'的值为'1280'[Parsed_scale_3 @ 0x564355d7dde0]将'h'设置为 值'720'[Parsed_scale_3 @ 0x564355d7dde0]设置 'force_original_aspect_ratio'的值设置为'1'[Parsed_scale_3 @ 0x564355d7dde0] w:1280 h:720标志:'bilinear'interl:0 [Parsed_pa​​d_4 @ 0x564355b845a0]将“宽度”设置为值“ 1280” [Parsed_pa​​d_4 @ 0x564355b845a0]将“高度”设置为值“ 720” [Parsed_pa​​d_4 @ 0x564355b845a0]将“ x”设置为值 'if(lt(in_w,1280),(1280-in_w)/ 2,0)'[Parsed_pa​​d_4 @ 0x564355b845a0] 将“高度”设置为值“ 0” ...

...这表明,在代码中

FILTER_COMPLEX_LIST="${FILTER_COMPLEX_LIST}[$i:v]scale=$RES_X:$RES_Y:force_original_aspect_ratio=1,pad=width=$RES_X:height=$RES_Y:x='if(lt(in_w,$RES_X),($RES_X-in_w)/2,0)':0,setsar=1[v$i];"

:0 不会为y设置值,而是为高度设置值。 (在为x设​​置值之后,在行尾附近)。

这很奇怪,因为大多数情况下这段代码都不会失败。 我将这一行更改为

FILTER_COMPLEX_LIST="${FILTER_COMPLEX_LIST}[$i:v]scale=$RES_X:$RES_Y:force_original_aspect_ratio=1,0)':y=0,setsar=1[v$i];"

有效。

y =还应该包含lt()函数以将内容调整为中间,但是现在它不会失败。 问题在于,仅显式设置了一些参数,没有显式设置最后一个参数,因此ffm​​peg遵循参数的顺序,因此将错误的参数设置为0。

感谢Gyan谈及-报告选项。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。