linux逐行扫描,FFmpeg怎么区分识别视频是逐行扫描还是隔行扫描

最近遇到要识别隔行扫描的视频加以特殊转码处理的问题。google了一番以后找到两个解决的方式,记录一下。

方法一:使用隔行扫描检查滤镜idet区分隔行扫描和逐行扫描

ffmpeg -filter:v idet \ -frames:v 100 \ -an \ -f rawvideo -y /dev/null \ -i 351.mp4 # Example output (this is not interlaced): # [Parsed_idet_0 @ 0x1bcf720] Single frame detection:TFF:0 BFF:0 Progressive:564 Undetermined:84 # [Parsed_idet_0 @ 0x1bcf720] Multi frame detection:TFF:0 BFF:0 Progressive:623 Undetermined:25 # flags: # -an = discard audio, we don't need it # -f rawvideo = output raw video # -y /dev/null = discard the output # -i ... = the input file to check # -frames:v 100 = extract the first 100 frames # -filter:v idet = insert the "idet" filter, which will output whether it has detected interlaced frames 如果结果中TFF和BFF非常多的话,那就意味着视频是隔行扫描的,如果都是

Progressive的话就是逐行扫描的。

关于TFF、BFF、Progressive三个参数,FFmpeg的帮助文档里有相关的说明(这个正是方法二里面要用到的):

interlaced mode ("P" for "progressive", "T" for top field first, "B" for bottom field first)

TFF:top field first  上场(奇数场)优先

BFF:bottom field first 下场(偶数场)优先

具体可以参考这篇英文文章:

方法二:使用查看视频帧详细信息的showinfo滤镜区分隔行扫描和逐行扫描

ffmpeg -y -i 351.mp4 -vf showinfo -frames:v 2 -f flv /dev/null

[Parsed_showinfo_0 @ 0xf675c0] n:0 pts:0 pts_time:0 pos:324675 fmt:yuv420p sar:1/1 s:1280x720 i:P iskey:1 type:I checksum:A5217CD1 plane_checksum:[308C60A8 4FA1B85C A41363BE]

[Parsed_showinfo_0 @ 0xf675c0] n:1 pts:1200 pts_time:0.04 pos:370498 fmt:yuv420p sar:1/1 s:1280x720 i:P iskey:0 type:B checksum:CF15D48E plane_checksum:[CB69A1EF 637DBF49 5FAF7347]

[Parsed_showinfo_0 @ 0xf675c0] n:2 pts:2400 pts_time:0.08 pos:373819 fmt:yuv420p sar:1/1 s:1280x720 i:P iskey:0 type:B checksum:5974D3B6 plane_checksum:[53AAA123 0C00BF3F 976C7345]

[Parsed_showinfo_0 @ 0xf675c0] n:3 pts:3600 pts_time:0.12 pos:345089 fmt:yuv420p sar:1/1 s:1280x720 i:P iskey:0 type:P checksum:8D43B49A plane_checksum:[FBCBC61A AE12A284 E4DA4BED]

[Parsed_showinfo_0 @ 0xf675c0] n:4 pts:4800 pts_time:0.16 pos:414675 fmt:yuv420p sar:1/1 s:1280x720 i:P iskey:0 type:B checksum:6C5487AC plane_checksum:[22107838 FE5FB347 755C5C1E]

[Parsed_showinfo_0 @ 0xf675c0] n:5 pts:6000 pts_time:0.2 pos:430027 fmt:yuv420p sar:1/1 s:1280x720 i:P iskey:0 type:B checksum:AF33CE8C plane_checksum:[3C499702 6B0DC18A B51375F1]

[Parsed_showinfo_0 @ 0xf675c0] n:6 pts:7200 pts_time:0.24 pos:377169 fmt:yuv420p sar:1/1 s:1280x720 i:P iskey:0 type:P checksum:4606BBA6 plane_checksum:[BF20865F 7FECA5AB 614E8F8D]

这个滤镜会将视频每一帧的详细信息都输出,在做视频详细分析的时候很好用,这里用到的是i参数信息,具体的参数信息可以参考FFmpeg官方文档:

关于i的说明是这样的: ‘i’

interlaced mode ("P" for "progressive", "T" for top field first, "B" for bottom field first)

隔行扫描模式("P"代表逐行,“T”代表上场优先,“B”代表下场优先)

通过提取这个参数的信息即可区分出来视频是隔行还是逐行的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值