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

J V*_*J V 10 bash ffmpeg

我用 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 $@
Run Code Online (Sandbox Code Playgroud)

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

小智 9

由于除以 2 有时会产生奇数,因此它应该是:

-vf scale="trunc(oh*a/2)*2:720"
Run Code Online (Sandbox Code Playgroud)

这将执行人们想要的-1:720语法(保持原始纵横比)


小智 8

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

-vf scale="-2:720"
Run Code Online (Sandbox Code Playgroud)

我很惊讶地在3 年前的错误报告中发现了这一点。

  • -2 在 ffmpeg 版本 2.3.3 中对我有用 (3认同)

J V*_*J V 7

经过大量实验后,在其他缩放过滤器将宽度和高度四舍五入为 2 之后应用以下过滤器。

scale=trunc(in_w/2)*2:trunc(in_h/2)*2
Run Code Online (Sandbox Code Playgroud)

它基本上是一个除法,圆,乘法,我只是没有正确的语法。