gpt4 book ai didi

ffmpeg - ffmpeg 中的逐行或隔行检测

转载 作者:行者123 更新时间:2023-12-03 14:12:07 28 4
gpt4 key购买 nike

我正在尝试使用 ffmpeg 编写解码器,并且我想显示有关视频流的一些信息。只有在解码帧后,我才能检测帧是逐行扫描还是隔行扫描(tff,bff)。 IE,

avcodec_decode_video2(pCodecCtx, pFrame, &gotFrame, &packet);
.....(assume we have a frame)
.....
// print information
printf("prog=%d inter=%d", !pFrame->interlaced_frame, pFrame->interlaced_frame);

这很好用。

但我想知道是否有办法从 AVFormatContext、AVCodecCtx 或 AVCodec 结构或其他一些函数中检测到这一点。这将非常有用,例如,如果文件是隔行扫描的,我想中止解码。我不想解码帧来获取这条信息。

我正在尝试支持 MPEG2、H.264/AVC 和 HEVC 编解码器(基本流或 MP4 容器中)。

对不起,如果这是一个微不足道的问题!非常感谢!

最佳答案

ffmpeg 可以在“idet”(隔行检测)模式下运行,并给出它在文件中找到的帧类型的摘要。我用:

$ ffmpeg -filter:v idet -frames:v 360 -an -f rawvideo -y /dev/null -i HitchhikersGuide.mp4
(带有 idet 过滤器的 ffmpeg,采样 360 帧,阻塞音频,使用 rawvideo 格式,将输出发送到/dev/null,输入文件 HitchhikersGuide.mp4)
生成包含(部分)的报告:
[Parsed_idet_0 @ 0x7fd5f3c121c0] Repeated Fields: Neither:   360 Top:     0 Bottom:     0
[Parsed_idet_0 @ 0x7fd5f3c121c0] Single frame detection: TFF: 30 BFF: 0 Progressive: 330 Undetermined: 0
[Parsed_idet_0 @ 0x7fd5f3c121c0] Multi frame detection: TFF: 22 BFF: 0 Progressive: 338 Undetermined: 0
在这种情况下,92% 的采样帧是逐行扫描的,8% 是隔行扫描的,因此大多数服务将其称为隔行扫描视频。 TFF 和 BFF 分别是 Top-Field-First 和 Bottom-Field-First,都表示隔行扫描帧。
请注意,可以将隔行视频编码为逐行扫描,也可以将逐行视频编码为隔行扫描,并且此方法将仅报告编码。如果您想知道视频最初是隔行扫描还是逐行扫描,那么您需要目视检查它并寻找交替行彼此不完全对齐的“梳理”效果(尤其是当相机快速移动时) ),如果你看到梳理,那么原始视频是隔行扫描的。

关于ffmpeg - ffmpeg 中的逐行或隔行检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24945378/

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