求助:ffmpeg av_seek_frame解码指定帧时花屏或马赛克的问题

chenshi_liteng 2010-08-11 06:49:22
我刚接触ffmpeg,现在用它解码碰到一个问题:调用av_seek_frame,设置标志为AVSEEK_FLAG_ANY之后解码指定的一帧出来的数据是花屏或马赛克, 不设这个标志时解出来的数据是正常的,但不同帧号时解出来的数据都是一样的,好像是只解了keyframe那一帧的数据.
我测试了一下,不调用av_seek_frame时在一个while循环中不停解码单帧然后保存为图片,出来的数据都是对的.
请各位高手指点一下,到底是为什么啊,在下感激不尽了^_^
...全文
1396 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
chilli211 2010-08-21
  • 打赏
  • 举报
回复
根据AVPacket.dts判断选定帧,使用编码函数编码出来的是完整图像,马赛克问题好似和编解码器有关系。
UDX协议 2010-08-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 warsour 的回复:]
av_seek_frame是这样的,原理很简单,视频里是有很多关键帧的,关键帧是清晰的,而关键帧后面的帧是啥p帧啊B帧的,这些帧都是根据前面关键帧来的,是不完整的图像,所以你要先跳到最接近的关键帧,然后慢慢解出你需要的帧
[/Quote]

答案
chenshi_liteng 2010-08-17
  • 打赏
  • 举报
回复
是用 AVPacket.dts 还是 AVStream.cur_dts来判断当前时间戳呢,怎么感觉 好像都不太准确啊
lius1984 2010-08-16
  • 打赏
  • 举报
回复
随便用吧。。
chenshi_liteng 2010-08-16
  • 打赏
  • 举报
回复
明白了, 那如果我要前后逐帧seek的话,是不是只能先seek到关键帧,然后多次调用解码函数,直到解到需要的那一帧?
那怎么判断当前解码的是哪一帧呢?根据时间戳吗
warsour 2010-08-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 cactusnb 的回复:]

借问一下各位,ffmpeg要遵循什么协议啊?可以自由商用吗?:)
[/Quote]

不能商用的,ffmpeg有个黑名单,很多知名的播放器都上过榜,比如暴风^_^
cactusnb 2010-08-14
  • 打赏
  • 举报
回复
借问一下各位,ffmpeg要遵循什么协议啊?可以自由商用吗?:)
lius1984 2010-08-14
  • 打赏
  • 举报
回复
设置标志为AVSEEK_FLAG_BACKWARD。 ffmpeg的使用可参考我的blog
warsour 2010-08-12
  • 打赏
  • 举报
回复
av_seek_frame是这样的,原理很简单,视频里是有很多关键帧的,关键帧是清晰的,而关键帧后面的帧是啥p帧啊B帧的,这些帧都是根据前面关键帧来的,是不完整的图像,所以你要先跳到最接近的关键帧,然后慢慢解出你需要的帧

2,554

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧