2013-05-06 55 views
6

我需要批量处理一堆视频以将其高度缩放到240,以保持纵横比相同。该得到这份工作几乎完成的命令是:使用libav过滤器缩放视频时出错

$ 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,我尝试使用输出电影,但最终的视频质量真的很差。

编辑#2: 这是不是重复,因为它被错误标记。这个问题比另一个提前得多。

+0

至于复制它并没有真正无论哪个问题是旧的。通常,选票较少的问题会被标记为重复。 – LordNeckbeard 2016-12-08 03:56:18

+0

@LordNeckbeard这也是有道理的,但是与上面的框中SO自己的定义相矛盾,特别是 - “被标记为重复的......这个问题之前已经被问过并且已经有了答案”。 – 2016-12-08 06:03:56

+0

是的,这个问题已被多个用户多次询问。争论谁是第一个是浪费时间。解决方案对于所有人来说都是一样的:作为副作用,有些将被标记为重复,而不管时间顺序如何。更重要的是:1)人们在提问之前不要搜索。 2)人们提出与编程毫无关系的题外话题:Stack Overflow仅用于编程问题。 – LordNeckbeard 2016-12-08 18:29:15

回答

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 
+0

这些缩写代表什么? – Xeoncross 2013-05-06 15:03:12

+0

@StevenPenny这是绝对正确的。当然,宽高比需要倍增而不是分割。谢谢 – 2013-05-07 05:15:12