当前位置: 首页 > 知识库问答 >
问题:

使用libav过滤器缩放视频时出错[重复]

江鸿羲
2023-03-14

我需要批量处理一堆视频以将它们的高度缩放到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比例=-1:240

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

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

我如何克服这个问题?

编辑:根据这个链接,我尝试使用scale=trunc(oh/a/2)*2:240“输出一部电影,但结果视频质量很差。

编辑#2:这不是重复项,因为它标记错误。这个问题发布得比另一个问题早得多。

共有1个答案

晋承嗣
2023-03-14

更新;您现在可以使用:

-vf scale=-2:240

是否有一个mp4支持的分辨率列表,以及一种让ffmpeg在按设置的高度比修改后计算宽度的方法

链接实际上说:

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
 类似资料:
  • 我正在尝试创建一个应用程序,可以在其中为录制的视频添加过滤器。基本上,我想复制Instagram视频或Viddy中存在的功能。 我做过研究,但我不能把它全部拼凑起来。我研究过使用GLSurfaceView播放录制的视频,我知道我可以使用NDK进行像素处理,并将其发送回SurfaceView或以某种方式保存。问题是,我不知道如何发送像素数据,因为似乎没有访问它的功能。这个想法来自相机功能“onPre

  • 问题内容: 是否可以将过滤器应用于 AVLayer* 并将其添加为 addSublayer 以进行 查看 ?我想使用Swift改变颜色并为摄像机的视频添加一些噪点,但我不知道该怎么做。 * 我认为,可以像这样添加 filterLayer 和 PreviewLayer : 这可能可以使用我的自定义滤镜创建视频,但是我认为,可以更有效地使用 AVComposition 所以我需要知道: 将滤镜实时应用

  • 问题:是否有一个单独的FFMPEG裁剪过滤器可以用于所有视频,包括(但不限于):856x480、640x480和1280x720? 我们有一个视频处理系统(使用DirectShow),所有输入到这个系统的视频必须是16:9使用MJPEG编解码器。我们使用下面的ffmpeg命令将源视频转换为MJPEG,缩放像素使其为正方形,然后裁剪到16:9的纵横比。这对大多数输入视频都很管用,输出正是我们想要的。

  • 当我用iframe将一些url嵌入页面时,我在chrome控制台中得到以下错误。为什么会这样?

  • 问题内容: 我有几个对象在不同状态下具有不同的纹理,因此我使用了TexturePacker制造的对象,并在需要的地方调整了大小。我必须调整大小,因为我不仅要同时支持720p和1080p,而且我的一些对象是根据板子的宽度和高度来调整大小的图块或光标,因为在我的游戏中这可能会改变,而板子总是占据屏幕的相同百分比。 使用,我可以这样做: 但是,当我使用时,没有设置过滤器的选项。这导致这些大小调整为尖锐,

  • 在我的应用程序中,我想显示来自服务器URI路径的视频,在这里,第一次播放视频,当我想第二次播放视频时,视频没有播放,并显示一个弹出窗口,如无法播放此视频 下面是我的错误 提前谢谢。