ffmpeg“低估了所需的缓冲区大小”

Posted

技术标签:

【中文标题】ffmpeg“低估了所需的缓冲区大小”【英文标题】:ffmpeg "Underestimated required buffer size" 【发布时间】:2021-05-26 23:48:13 【问题描述】:

使用 ffmpeg 将 8K png 流转换为 ProRes 4444 时,我在某些 Windows 机器上看到此错误。该命令看起来像

ffmpeg -f image2pipe -framerate 30000/1001 -i - -c:v prores_ks -y output.mov

还有输出

ffmpeg 版本 git-2020-06-17-0b3bd00 版权所有 (c) 2000-2020 使用 gcc 9.3.1 (GCC) 20200523 构建的 FFmpeg 开发人员 配置:--enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable -libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libsrt --enable-libtheora --enable-libtwolame --enable-libvpx - -enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab - -enable-libvmaf --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-liboam --disable-w32threads --enable-libmfx --enable- ffnvcodec --enable-cuda-llvm --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf libavutil 56 . 55.100 / 56. 55.100 libavcodec 58. 92.100 / 58. 92.100 libavformat 58. 46.101 / 58. 46.101 libavdevice 58. 11.100 / 58. 11.100 libavfilter 7. 86.100 / 7. 86.100 libswscale 5. 8.100 / 5. 8.100 libswresample 3. 8.100 / 3. 8.100 libpostproc 55. 8.100 / 55. 8.100 [image2pipe @ 000002245a96da40] 流#0:没有足够的帧来估计速率;考虑增加 probesize 输入 #0,image2pipe,来自“管道:”:持续时间:N/A,比特率:N/A Stream #0:0: Video: png, rgba(pc), 7680x3840, 29.97 tbr, 29.97 tbn, 29.97 tbc 流映射:Stream #0:0 -> #0:0 (png (native) -> prores (prores_ks)) 帧= 0 fps=0.0 q=0.0 大小= 0kB 时间=-577014:32:22.77 比特率=-0.0kbits/s 速度=N/A 帧=0 fps=0.0 q=0.0 大小= 0kB 时间=-577014:32:22.77 比特率= -0.0kbits/s 速度=N/A 帧= 0 fps=0.0 q=0.0 大小= 0kB 时间=-577014:32:22.77 比特率= -0.0kbits/s 速度=N/A 帧= 0 fps=0.0 q=0.0 大小= 0kB 时间=-577014:32:22.77 比特率= -0.0kbits/s 速度=N/A 帧= 0 fps=0.0 q=0.0 大小= 0kB 时间=-577014:32:22.77 比特率= -0.0kbits/s 速度=N/A [prores_ks @ 000002245aaaf080] 自动选择 4:4:4:4 配置文件,因为使用 输入色彩空间。可以通过 -profile 选项覆盖它。 [prores_ks @ 000002245aaaf700] 自动选择 4:4:4:4 配置文件,因为 使用的输入色彩空间。可以通过 -profile 覆盖 选项。 [prores_ks @ 000002245aa1e7c0] 自动选择的 4:4:4:4 配置文件 因为使用了输入色彩空间。它可以通过 -profile 选项。 [prores_ks @ 000002245aa1d580] 由于使用了输入色彩空间,自动选择了 4:4:4:4 配置文件。它可以被覆盖 通过 -profile 选项。 [prores_ks @ 000002245aa1ec40] 自动选择 4:4:4:4 配置文件,因为使用了输入色彩空间。有可能 通过 -profile 选项覆盖。 [prores_ks@000002245aa1da00] 由于使用了输入色彩空间,自动选择了 4:4:4:4 配置文件。它 可以通过 -profile 选项覆盖。 [prores_ks@ 000002245aa1f540] 自动选择 4:4:4:4 配置文件,因为使用了 输入色彩空间。可以通过 -profile 选项覆盖它。 [prores_ks @ 000002245aa1de80] 自动选择 4:4:4:4 配置文件,因为 使用的输入色彩空间。可以通过 -profile 覆盖 选项。 [prores_ks @ 000002245a972b40] 自动选择 4:4:4:4 配置文件 因为使用了输入色彩空间。它可以通过 -profile 选项。输出#0,mov,到'output.mov':元数据: 编码器:Lavf58.46.101 流 #0:0:视频:prores (prores_ks) (ap4h / 0x68347061), yuva444p10le, 7680x3840, q=2-31, 200 kb/s, 29.97 fps, 30k tbn, 29.97 待定 元数据: 编码器:Lavc58.92.100 prores_ks 帧= 1 fps=0.2 q=0.0 大小= 0kB 时间=00:00:00.00 比特率=N/A 速度= 0x 帧= 2 fps=0.3 q=0.0 大小= 0kB 时间=00:00:00.00 比特率=N/A 速度= 0x 帧= 3 fps=0.4 q=0.0 大小= 0kB 时间=00:00:00.00 比特率=N/A 速度= 0x 帧= 4 fps=0.4 q=0.0 大小= 0kB 时间=00:00:00.00 比特率=N/A 速度= 0x 帧= 5 fps=0.5 q=0.0 大小= 0kB 时间=00:00:00.00 比特率=N/A 速度= 0x [prores_ks @ 000002245aaaf080] 低估所需的缓冲区 尺寸。视频编码失败 [prores_ks @ 000002245aaaf700] 低估了所需的缓冲区大小。 [prores_ks@000002245aa1e7c0] 低估了所需的缓冲区大小。 [prores_ks@000002245aa1d580] 低估了所需的缓冲区大小。 [prores_ks@000002245aa1ec40] 低估了所需的缓冲区大小。 [prores_ks@000002245aa1da00] 低估了所需的缓冲区大小。转换失败!

考虑到我无法访问有问题的机器(用户可以),我该如何调试它? “没有足够的帧来估计速率;考虑增加探针大小”消息是否与问题有关?

谢谢

编辑:我增加了 probesize 并且该警告消失了,但转换一直失败,并显示相同的错误消息“低估所需的缓冲区大小”。我现在可以在我的一台 Windows 机器上重现它。

编辑 2:不是解决方案,但我发现如果使用 ffmpeg 4.2.3 并在 4.3 中引入,这个问题就消失了

【问题讨论】:

蹩脚的解决方法是输入文件而不是管道。 【参考方案1】:

由于 ffmpeg 的错误报告系统似乎不允许新用户(因此报告),我可以建议的唯一解决方案是避免使用 4.3.x 版本并保留在 4.2.3

更新:这个问题正在 ffmpeg 的新版本中得到修复:https://trac.ffmpeg.org/ticket/9173#ticket

【讨论】:

您在使用错误报告系统时遇到了什么问题? @llogan 我注册了它,但从未收到确认电子邮件 我不再参与其中,但绝大多数时间是由于users email host using a blocklist that has the FFmpeg server listed 作为误报。对于某些用户,我可能必须一两个月联系一次阻止列表/主机,并要求他们删除 FFmpeg 服务器 IP 地址。您可以转到#ffmpeg-devel IRC 并要求 michaelni 在邮件日志中查找您的电子邮件以进行 trac 以确认这是问题所在(或使用其他电子邮件)。 Gmail 会发生这种情况吗?当我找到时间时,我会这样做。现在很难回到这个问题,因为解决方法对我有用。谢谢 谢谢@llogan,完成并修复:trac.ffmpeg.org/ticket/9173#ticket

以上是关于ffmpeg“低估了所需的缓冲区大小”的主要内容,如果未能解决你的问题,请参考以下文章

如何摆脱ffmpeg中的“抖动缓冲区已满”错误?

将ffmpeg与python一起使用,在找到END元素之前输入缓冲区已耗尽

FFMPEG:为输出流 0:1 缓冲的数据包过多

FFmpeg 跳过渲染帧

[ffmpeg] h.264解码所用的主要缓冲区介绍

Node.js - 将数据缓冲到 Ffmpeg