ffmpeg - 在 FFmpeg 中获取宏块信息
问题描述
我有一个 .mp4 文件,其中包含 h.264 视频和 AAC 音频。我想在解码时提取每帧的宏块和运动矢量信息。请在下面找到我的伪代码。
avformat_open_input(file_name) //opening file
avcodec_open2(pCodecContext, pCodec, NULL) // opening decoder
while (response >= 0) // reading each frame
{
response = avcodec_receive_frame(pCodecContext, pFrame);
if (response == AVERROR(EAGAIN) || response == AVERROR_EOF || response < 0) {
break;
}
// extract macroblock of pFrame here
av_frame_unref(pFrame);
}
我在其他帖子中看到提到我们可以通过 MpegEncContext 结构获取 MB 信息,但我很困惑,以及如何实例化该结构的对象,结构的 MB 数据如何为每一帧更新。?
最终,我想使用 SAD(绝对差之和)比较一帧与另一帧的宏块,并在宏块级别有任何失真时触发警报。
如果有人对此提供帮助,我将不胜感激。
解决方案
您可以从 AVFrame 结构中获取 MB 信息(MV 和其他)。在 AVFrame 中有一个成员 int16_t (*motion_val[2])[2] 可以获取 MV。
推荐阅读
- amazon-web-services - 无服务器框架的 Lambda 函数别名?
- node.js - 如何遍历多个用户以及 FireStore 中的一个用户
- android - Android 10 NFC 应用程序 - 在 MS Intune Kiosk 模式下手机睡眠时停止工作
- python - Python 多处理装饰器在酸洗时失败
- powershell - Powershell 错误 + 无法将值“System.String”转换为类型“System.Management.Automation.SwitchParameter”
- c# - DateTimePicker 和 PostgreSQL 数据表搜索
- python - 如何在不阻塞 PyQt 主程序的情况下制作弹出窗口?
- mysql - 选择有该产品的店铺(mysql查询)
- python - 带有管道的 Sklearn RFE
- powerbi - 没有日期列的 Power BI 中的累积总计