ffmpeg/avconv 强制缩放输出可被 2 整除

ffmpeg/avconv 强制缩放输出可被 2 整除

我使用 avconv(又名 ffmpeg)录制我的桌面,然后将其缩放到 720p。

我最近在我的脚本中添加了一些内容,以便他们可以选择一个带有 xwininfo 的窗口,并且它会具体记录该窗口。

但是,如果输出格式不能被 2 整除,编码器就会出错,我就无法得到我的视频。

有没有办法在 ffmpeg 内部解决这个问题,这样我就不必在 bash 中做大量手动数学运算来设置比例值?

如果宽度/高度不均匀,是否可以使用比例过滤器减去/加上一个宽度/高度?(圆形?)

是否有可能在原始比例之后应用另一个过滤器来实现这一点?(这会使输入大小不均匀且没有缩放的视频四舍五入)

#!/bin/bash
avconv \
-f x11grab -r $fps -s $capturesize -i :0.0$offset \
-vcodec libx264 \
-vf scale=-1:720 \
-pre:v lossless_ultrafast \
-threads 4 \
-y $@

一些旧的邮件列表建议round()在过滤器中使用一个函数,但我似乎无法正确理解语法。如果它有效,那么scale=round(iw,2):round(ih,2)在最后应用过滤器将立即解决我所有的问题。iwih似乎不起作用。

答案1

实际上过滤器可以直接处理它。你只需要将-2而不是传递-1给过滤器:例如

-vf scale="-2:720"

我很惊讶地发现三年前的一个错误报告

答案2

由于除以 2 有时会得到奇数,因此应该是:

-vf scale="trunc(oh*a/2)*2:720"

这执行了语法所需的操作-1:720(保持原始纵横比)

答案3

经过大量实验后,看起来在其他比例过滤器之后应用的以下过滤器会将宽度和高度四舍五入为 2。

scale=trunc(in_w/2)*2:trunc(in_h/2)*2

它基本上是一个除法、四舍五入、乘法的事情,我只是没有正确的语法。

相关内容