输入区域 0:0:1280:675 不在填充区域 0:0:1280:674 内或大小为零
Input area 0:0:1280:675 not within the padded area 0:0:1280:674 or zero-sized
我正在为视频列表设置填充。当分辨率为 854x480 时,它有效,当我切换到 1280x720 时,它不起作用。这很可能是因为奇数,如这个问题所述:
这是我的原始代码(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];"
我改了pad width和pad height的计算方式,还是一样的错误
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,$RES_X),($RES_X-in_w)/2,0)':0,setsar=1$
这是错误:
[Parsed_pad_19 @ 0x558b4fe3bb40] Input area 0:0:1280:675 not within
the padded area 0:0:1280:674 or zero-sized [Parsed_pad_19 @
0x558b4fe3bb40] Failed to configure input pad on Parsed_pad_19 Error
configuring complex filters. Invalid argument
我不明白为什么填充区域不是 padded area 0:0:1280:720
首先。
我应该在哪里添加 ceil() 或 floor() 函数以使其工作?
分析日志我意识到这些行:
... [Parsed_pad_1 @ 0x564355d71aa0] Setting 'width' to value '1280'
[Parsed_pad_1 @ 0x564355d71aa0] Setting 'height' to value '720'
[Parsed_pad_1 @ 0x564355d71aa0] Setting 'x' to value
'if(lt(in_w,1280),(1280-in_w)/2,0)' [Parsed_pad_1 @ 0x564355d71aa0]
Setting 'height' to value '0' [Parsed_setsar_2 @ 0x564355b92140]
Setting 'sar' to value '1' [Parsed_scale_3 @ 0x564355d7dde0] Setting
'w' to value '1280' [Parsed_scale_3 @ 0x564355d7dde0] Setting 'h' to
value '720' [Parsed_scale_3 @ 0x564355d7dde0] Setting
'force_original_aspect_ratio' to value '1' [Parsed_scale_3 @
0x564355d7dde0] w:1280 h:720 flags:'bilinear' interl:0 [Parsed_pad_4 @
0x564355b845a0] Setting 'width' to value '1280' [Parsed_pad_4 @
0x564355b845a0] Setting 'height' to value '720' [Parsed_pad_4 @
0x564355b845a0] Setting 'x' to value
'if(lt(in_w,1280),(1280-in_w)/2,0)' [Parsed_pad_4 @ 0x564355b845a0]
Setting 'height' to value '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,pad=width=$RES_X:height=$RES_Y:x='if(lt(in_w,$RES_X),($RES_X-in_w)/2,0)':y=0,setsar=1[v$i];"
有效。
y= 应该还包含一个 lt() 函数来调整内容到中间,但现在它不会失败。
问题是只有部分参数被显式设置,最后一个参数没有,所以ffmpeg按照参数的顺序,所以它把错误的参数设置为0。
感谢 Gyan 介绍 -report 选项。
就我而言,我的图像与其他图像相比尺寸不同。当我删除它时问题就解决了。
我正在为视频列表设置填充。当分辨率为 854x480 时,它有效,当我切换到 1280x720 时,它不起作用。这很可能是因为奇数,如这个问题所述:
这是我的原始代码(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];"
我改了pad width和pad height的计算方式,还是一样的错误
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,$RES_X),($RES_X-in_w)/2,0)':0,setsar=1$
这是错误:
[Parsed_pad_19 @ 0x558b4fe3bb40] Input area 0:0:1280:675 not within the padded area 0:0:1280:674 or zero-sized [Parsed_pad_19 @ 0x558b4fe3bb40] Failed to configure input pad on Parsed_pad_19 Error configuring complex filters. Invalid argument
我不明白为什么填充区域不是 padded area 0:0:1280:720
首先。
我应该在哪里添加 ceil() 或 floor() 函数以使其工作?
分析日志我意识到这些行:
... [Parsed_pad_1 @ 0x564355d71aa0] Setting 'width' to value '1280' [Parsed_pad_1 @ 0x564355d71aa0] Setting 'height' to value '720' [Parsed_pad_1 @ 0x564355d71aa0] Setting 'x' to value 'if(lt(in_w,1280),(1280-in_w)/2,0)' [Parsed_pad_1 @ 0x564355d71aa0] Setting 'height' to value '0' [Parsed_setsar_2 @ 0x564355b92140] Setting 'sar' to value '1' [Parsed_scale_3 @ 0x564355d7dde0] Setting 'w' to value '1280' [Parsed_scale_3 @ 0x564355d7dde0] Setting 'h' to value '720' [Parsed_scale_3 @ 0x564355d7dde0] Setting 'force_original_aspect_ratio' to value '1' [Parsed_scale_3 @ 0x564355d7dde0] w:1280 h:720 flags:'bilinear' interl:0 [Parsed_pad_4 @ 0x564355b845a0] Setting 'width' to value '1280' [Parsed_pad_4 @ 0x564355b845a0] Setting 'height' to value '720' [Parsed_pad_4 @ 0x564355b845a0] Setting 'x' to value 'if(lt(in_w,1280),(1280-in_w)/2,0)' [Parsed_pad_4 @ 0x564355b845a0] Setting 'height' to value '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,pad=width=$RES_X:height=$RES_Y:x='if(lt(in_w,$RES_X),($RES_X-in_w)/2,0)':y=0,setsar=1[v$i];"
有效。
y= 应该还包含一个 lt() 函数来调整内容到中间,但现在它不会失败。 问题是只有部分参数被显式设置,最后一个参数没有,所以ffmpeg按照参数的顺序,所以它把错误的参数设置为0。
感谢 Gyan 介绍 -report 选项。
就我而言,我的图像与其他图像相比尺寸不同。当我删除它时问题就解决了。