大方做网站,eyoucms模板,中国品牌设计,vs网站开发 怎么运行在我们线上视频生产过程中#xff0c;我们用ffmpeg对视频做了resize#xff0c;讲原有的分辨率resize到1280p#xff0c;使用了参数 -vf scale1280:-1#xff0c;作用是将原始视频宽度缩放成1280#xff0c;-1是指高度等比例缩放。 之前一直运行的好好的… 在我们线上视频生产过程中我们用ffmpeg对视频做了resize讲原有的分辨率resize到1280p使用了参数 -vf scale1280:-1作用是将原始视频宽度缩放成1280-1是指高度等比例缩放。 之前一直运行的好好的直到我们出现了一种新的视频分辨率结果就运行不了如下图 排查发现我们出现了一部分原始分辨率为3312x3040的输入视频当宽缩放成1280的时候高恰好等比例缩放成为了1175而奇数分辨率对部分视频编码而言是一个非法参数 原因主要如下 FFmpeg 默认不允许生成视频的分辨率宽度或高度为奇数主要与视频压缩标准和编解码过程中的某些算法要求有关。许多视频编码标准例如H.264和H.265使用了块为基础的编码方法。这些块通常是宽度和高度都是2的倍数的矩形例如4x4, 8x8, 16x16等。当编码器处理视频帧时如果帧的宽度或高度是奇数将不能够将图像完整地分割成标准的块这可能会导致编码过程中出现问题。例如如果有一个奇数宽度的视频帧最右边会有一个无法形成完整块的列像素。这样的非标准块需要编码器进行额外的处理可能会降低编码效率增加复杂性并可能导致兼容性问题。** 解决方案当然很简单那就是将分辨率强行指定成偶数即可在当我思索难道要放弃-1这个好用的自适应参数在指定宽为1280时自己去计算出一个高来的时候。突然发现了-2这个参数。 在ffmpeg的scale 参数中可以使用 -1 和 -2 这样来等比例缩放视频大小但二者略有差异建议使用-2而不是-1之前我们就是使用了-1才出现的问题二者的具体差异如下 -1 在 scale 过滤器中用作自动计算宽度或高度的占位符同时保持源视频的宽高比不变。例如如果你只指定宽度为1280然后将高度设置为-1FFmpeg 会计算出一个高度值使新视频保持原始视频的比例。 ffmpeg -i input.mp4 -vf scale1280:-1 output.mp4-2 的作用与 -1 类似也是用于自动计算另一个尺寸同时保持宽高比。但 -2 的特殊之处在于它会确保计算出的宽度或高度是偶数这是为了满足某些视频编码器的要求它们需要偶数的分辨率尺寸。这对于编码像H.264这样的视频时特别重要因为如前所述这些编码器使用基于块的编码算法其要求块的尺寸通常是16×16像素或其它偶数尺寸能够完全适应视频帧的尺寸。 ffmpeg -i input.mp4 -vf scale1280:-2 output.mp4