ffmpeg-每帧不同数量的宏块
我正在研究MPEG压缩,特别是如何使用以下命令使用ffmpeg“标记”宏块: ffmpeg-调试mb_类型-i input.mp4 out.mp4 从理论上讲,我知道通常宏块是16x16(像素)块 因此,如果帧是例如1920x1080我假设宏块是 (1920*1080)/(16*16)=8100 现在,通过分析ffmpeg报告,我发现每一帧都有许多更少的宏块(用一些“字符”标记以指示其类型) 你能解释一下为什么会这样吗? 是(我的)理论错误吗 我已经看到“可视化”宏块中有一些灰色块。。对应于ffmpeg正在寻找的不满足任何标准的(宏)块。。也许在我的示例中,每个帧都有 8100-#“灰色”宏块ffmpeg-每帧不同数量的宏块,ffmpeg,frame,mpeg,video-compression,Ffmpeg,Frame,Mpeg,Video Compression,我正在研究MPEG压缩,特别是如何使用以下命令使用ffmpeg“标记”宏块: ffmpeg-调试mb_类型-i input.mp4 out.mp4 从理论上讲,我知道通常宏块是16x16(像素)块 因此,如果帧是例如1920x1080我假设宏块是 (1920*1080)/(16*16)=8100 现在,通过分析ffmpeg报告,我发现每一帧都有许多更少的宏块(用一些“字符”标记以指示其类型) 你能解释一下为什么会这样吗? 是(我的)理论错误吗 我已经看到“可视化”宏块中有一些灰色块。。对应于ff
这可能吗?为什么 这与灰色宏块无关,灰色宏块是“跳过”和/或“直接”(wiki页面似乎不是最新的) 使用av_log()进行日志记录,av_log()的行限制为1024个字符。如果减去first-debug mb_类型标头所需的字符: 这是46个字符。1024 - 46 = 978. 它每个宏块记录3个字符,因此978/3=326 mbs适合一行而不需要截断,相当于326*16=5216像素,这对于大多数用例来说应该足够了 此外,看起来来自不同线程的日志消息是混合的。为防止出现这种情况,必须使用-thread\u type none禁用帧和/或切片级线程 您还可以实现自己的avu日志回调来绕过这两个限制,根据当前线程登录到不同的缓冲区
New frame, type: B [h264 @ 000001c0241c1cc0]