Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ffmpeg-每帧不同数量的宏块_Ffmpeg_Frame_Mpeg_Video Compression - Fatal编程技术网

ffmpeg-每帧不同数量的宏块

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

我正在研究MPEG压缩,特别是如何使用以下命令使用ffmpeg“标记”宏块:

ffmpeg-调试mb_类型-i input.mp4 out.mp4

从理论上讲,我知道通常宏块是16x16(像素)块

因此,如果帧是例如1920x1080我假设宏块是

(1920*1080)/(16*16)=8100

现在,通过分析ffmpeg报告,我发现每一帧都有许多更少的宏块(用一些“字符”标记以指示其类型)

你能解释一下为什么会这样吗? 是(我的)理论错误吗

我已经看到“可视化”宏块中有一些灰色块。。对应于ffmpeg正在寻找的不满足任何标准的(宏)块。。也许在我的示例中,每个帧都有

8100-#“灰色”宏块


这可能吗?为什么

这与灰色宏块无关,灰色宏块是“跳过”和/或“直接”(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]