使用libav过滤器缩放视频时出错

时间:2013-05-06 13:24:47

标签: ffmpeg libav

我需要批量处理一堆视频,将其高度调整为240,保持纵横比相同。获取作业几乎的命令是:

$ avconv -threads 4 -ss 0.0 -i input.avi \
-map 0:0,0:0 -map 0:1,0:1 -vf "scale=-1:240" -y -f mpegts \
-async -1 -vcodec libx264 -vcodec libx264 -flags2 +fast \
-flags +loop -g 30 -bufsize 1024k \
-b 200k -bt 220k -qmax 48 -qmin 2 -r 20 -acodec libmp3lame \
-ab 44k -ar 44100 -ac 2 output.ts

正如您所见,有趣的部分是-vf "scale=-1:240"

这适用于缩放输出宽度为偶数的视频。否则,我收到以下错误消息:

[libx264 @ 0x7fc4f8821e00] width not divisible by 2 (341x240)

我如何克服这个问题?

编辑: 根据此link,我尝试使用-vf "scale=trunc(oh/a/2)*2:240"输出电影,但结果视频质量非常差。

编辑#2: 这是不重复,因为它被错误标记。这个问题的发布时间早于另一个问题。

1 个答案:

答案 0 :(得分:8)

更新;你现在可以使用:

-vf scale=-2:240

Is there a good list of mp4 supported resolutions and a way to have ffmpeg calculate the width after modifying by set height ratio?


该链接实际上说:

scale="854:trunc(ow/a/2)*2"

如果你想缩放,可以正确地将高度缩放到偶数 宽度你必须使用这个成语:

-vf scale="trunc(oh*a/2)*2:240"
#                  ^
#                 /
#       notice ---

数学背后:

iw   ow
-- = --
ih   oh

ow = (iw * oh) / ih
ow = oh * a