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

FFMPEG(libx264)"高度不能被2整除"

凌黎明
2023-03-14

我正在尝试编码一个。mp4视频来自使用FFMPEG的一组帧,使用libx264编解码器。

这是我正在运行的命令:

/usr/local/bin/ffmpeg -r 24 -i frame_%05d.jpg -vcodec libx264 -y -an video.mp4

我有时会遇到以下错误:

[libx264 @ 0xa3b85a0] height not divisible by 2 (520x369)

在搜索了一段时间后,这个问题似乎与缩放算法有关,可以通过添加-vf参数来解决。

然而,在我的情况下,我不想做任何缩放。理想情况下,我希望保持尺寸与框架完全相同。有什么建议吗?是否存在h264强制执行的某种纵横比?

共有3个答案

金高轩
2023-03-14

如果您想设置一些输出宽度并具有与原始比率相同的输出

scale=720:-1 

不要陷入这个问题,那么你可以使用

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

(仅针对正在搜索如何通过缩放实现此目的的用户)

司徒耀
2023-03-14

使用作物过滤器将宽度和高度除以2:

ffmpeg -i input.mp4 -vf "crop=trunc(iw/2)*2:trunc(ih/2)*2" output.mp4

如果您想缩放而不是裁剪更改裁剪缩放

使用比例过滤器。这将使宽度为1280。高度将自动计算以保留长宽比,并且宽度将被2整除:

ffmpeg -i input.mp4 -vf scale=1280:-2 output.mp4

与上面类似,但将高度设为720并自动计算宽度:

ffmpeg -i input.mp4 -vf scale=-2:720 output.mp4

不能对宽度和高度都使用-2,但如果已经指定了一个尺寸,则使用-2是一个简单的解决方案。

吕鹏
2023-03-14

原始问题的答案不应缩放视频,而应修正高度不能被2整除的错误。这可以通过使用此过滤器实现:

-vf "pad=ceil(iw/2)*2:ceil(ih/2)*2"

完整命令:

ffmpeg -i frame_%05d.jpg -vcodec libx264 \
 -vf "pad=ceil(iw/2)*2:ceil(ih/2)*2" -r 24 \
 -y -an video.mp4 

大体上h264需要均匀的尺寸,因此此过滤器将:

  1. 将原始高度和宽度除以2
  2. 将其四舍五入到最近的像素
  3. 再乘以2,使之成为偶数
  4. 将黑色填充像素添加到此数字

您可以通过添加过滤器参数:color=white来更改填充的颜色。参见pad文档。

 类似资料:
  • 我正在尝试在我的库中生成视频的多LPLE变体(Mp4格式),计划的格式副本从1080p到240p不等,流行的大小介于两者之间。为此,我正在拍摄一段具有AxB分辨率的视频,然后运行一段代码(在bash上),该代码将它们缩放到所需的以下大小-426x240 640x360 842x480 1280x720 1920x1080,当然具有不同的比特率,然后再次保存为Mp4。 现在,如果源视频的高度和宽度可

  • 我试图降低视频的维度: FFMPEG(libx264)“不能被2整除的高度”

  • 算法有点棘手。它拒绝会导致分布不均匀的值(因为2^31不能被n整除)。一个值被拒绝的概率取决于n。最坏情况为n=2^30+1,拒绝概率为1/2,循环终止前的预期迭代次数为2。 算法: 代码测试和的情况。然后设置最高有效位,并将条件中的结果变为负值。 null

  • 问题是当我尝试缩放视频并保持纵横比时 我也尝试-S 240x135但总是相同的错误... 但如果我尝试240x180,问题是我需要保持纵横比,因为我需要缩放=240:-1 错误我所拥有的

  • 我已经开始为绘制温度数据编程这个应用程序,当屏幕调整大小时,画布也应该调整大小。它初始化正确,但当我想调整窗口大小时,draw()方法只会根据它绑定的stackpanes高度值调整高度大小,但它将完全忽略宽度。听者甚至不会开火。这我觉得很奇怪。此外,我必须为StackPane设置最小大小,否则将不会绘制任何东西。我没有使用FXML。 编辑我将第58行从setRight()更改为setCenter,

  • 因此,我试图在Jasmin中创建一个简单的for循环,每次hello world通过该循环时,它都会打印出来。问题是,每当我试图通过添加一个来增加它时,我会得到这样的错误:“错误:无法初始化主类测试由:java.lang.verifyerror:(class:test,method:main signature:([ljava/lang/string;)V)不一致的堆栈高度1!=2”当我不试图添加