gpt4 book ai didi

video - FFmpeg av_read_frame 不能正确读取帧?

转载 作者:行者123 更新时间:2023-12-04 22:47:22 30 4
gpt4 key购买 nike

好的,所以我下载了一些 .yuv 格式的原始 UHD 序列,并在 .mp4 容器中使用 ffmpeg 对它们进行编码(h264 4:4:4,100% 质量,25fps)。当我使用 ffprobe 找出编码了多少帧时,我得到 600,所以这是 24 秒的视频。
但是,当我通过 av_read_frame() 运行这些编码的视频序列时在 av_read_frame() 之前,我只得到了大约 40-50% 的帧处理。返回错误代码 -12 .所以我猜测流中间有一些数据包被 av_read_frame() 读取。并强制函数返回 -12 .
我的问题是,我应该如何处理这个问题,以便我可以编码全部帧数(600)?当av_read_frame()返回不同于 0 的值我应该av_free_packet()并继续阅读下一帧?由于av_read_frame()返回值 < 0对于错误代码,该错误代码用于 EOF所以我可以隔离文件代码的结尾?

最佳答案

虽然很难说你的解码出了什么问题,但还是 -12不是无法理解的魔数(Magic Number)。

printf("%s\n", av_err2str(-12));

这将打印 Cannot allocate memory ,这是真正的问题。

当从 av_read_frame() 获得正返回值时,继续下去就好了。
av_free_packet()已弃用,使用 av_packet_unref()相反,在每个 av_read_frame() 的末尾环形。
while(av_read_frame(fmt_ctx, &pkt) >= 0) {
// decode packet and other stuff
av_packet_unref(&pkt);
}

最后,通常不需要担心 EOF,因为 av_decode_video2()或其他解码函数将设置一个 int 参数为适当的值,指示是否有要解压缩的帧。

如果您使用的是相当新的 ffmpeg(>=3.1) 解码/编码 API 或确实需要处理 EOF,请将返回值与 AVERROR_EOF 进行比较.

关于video - FFmpeg av_read_frame 不能正确读取帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38713338/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com