You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用FFmpeg转换YUV至MP4时遇缓冲区大小无效错误求助

解决FFmpeg转换YUV到MP4时的缓冲区大小错误

嘿,这个问题我之前帮不少人排查过——你遇到的Invalid buffer size错误,核心原因是你命令里指定的视频参数(分辨率、像素格式)和实际输入的YUV文件不匹配。

咱们拆解下错误信息:

[rawvideo @ 0000023f70bf8d20] Invalid buffer size, packet size 2649600 < expected frame_size 3110400

你命令里指定的是1920x1080 yuv420p,这种规格的单帧YUV大小是 1920×1080×1.5 = 3110400 字节(YUV420p的每帧字节数计算规则是宽×高×1.5,因为Y通道占1份,U/V各占0.5份)。但FFmpeg实际读取到的帧只有2649600字节,反推一下,这个大小对应的分辨率是 2649600 ÷1.5 = 1766400 像素,比如1600×1104(1600×1104刚好等于1766400)——显然和你指定的1920x1080对不上,所以FFmpeg才会报错。

给你两个靠谱的解决方案:

方案1:确认并修正输入YUV的真实参数

首先得搞清楚你的inputfile.yuv的准确属性:

  • 如果是你自己生成的YUV,回忆下生成时用的分辨率、像素格式;如果是别人提供的,直接问对方要准确参数。
  • 假设实际分辨率是1600x1104,修改后的命令如下:
ffmpeg -f rawvideo -vcodec rawvideo -s 1600x1104 -r 25 -pix_fmt yuv420p -i inputfile.yuv -c:v libx264 -preset ultrafast -qp 0 output.mp4

方案2:尝试自动探测(仅部分场景有效)

要是实在不知道准确参数,可以试试让FFmpeg自动探测,但这个方法不是万能的——毕竟rawvideo是无容器的裸数据,没有元数据可以读取,成功率取决于文件本身:

ffmpeg -i inputfile.yuv -c:v libx264 -preset ultrafast -qp 0 output.mp4

如果自动探测失败,还是得回到方案1,必须明确输入YUV的参数才能正常转换。

额外小提示

  • 不同YUV像素格式的帧大小计算规则不一样:yuv422p是宽×高×2,yuv444p是宽×高×3,要是你指定的像素格式也错了,也会触发类似错误。
  • 如果你是从其他视频转成YUV的,建议检查转YUV时的命令,确保前后参数一致,避免出现这类不匹配的问题。

内容的提问来源于stack exchange,提问作者simu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:30:48