WebM视频解析与修复

WebM文件解析

  • 下载github仓,cmake cmd编译得到带有webm_parser_demo项目的工程
  • 修改 struct webm::MasterValueParser::HasTag 声明为public,工程编译通过,得到webm_parser_demo.exe
  • 用exe解析webm文件,命令行使用“>” 将打印内容输出到文件

修复webm视频

方案1:fix-webm-duration,重新录制

  • 此方案录得数据有问题,仅web可以正常播放;webm_parser_demo工具无法解析全文,FFmpeg也无法拷贝、重新编码

方案2:ffmpeg拷贝,重新编码

  • FFmpeg -i [source path] -vcodec copy -acodec copy [dest path]
  • 解析修复后文件,与原文件对比得出结论:
    • 原文件缺少Cue模块
    • “DocTypeVersion:4” 时,Cluster头放在此段BlockGroup后方,原文件数据是可用的

具体文件分析过程

  • analyse webmParse2:
    track2 data length every frame : 6653- 5569 = 1084 4182-3123 = 1059
    track1 data length every frame : 44499-34189 = 10310 33116-22225 = 10891
    track1 count : 1800 // 图轨
    track2 count : 3349 // 音轨
  • webmParse:
    track1: 246 / 10 = 24.6 FPS 246 / 24 = 10.25 (s)
    max timecode : 10751 + (1905 - 1872) = 10784 / 8879 + 1905 = 10784
  • webmParse1:
    track1: 883 / 39 = 22.64 FPS 883 / 24 = 36.79(s)
    max timecode : 36153 + 3624 = 39777
  • webmParse2:
    track1: 1800 / 60 = 30 FPS
    ​max timecode : 56402 + 3634 = 60036

OpenCV处理视频

video = cv2.VideoCapture()
ret, frame = video.read()
nFps = video.get(cv2.CAP_PROP_FPS)
frameCount = video.get(cv2.CAP_PROP_FRAME_COUNT)

参考

  1. Webm进度条问题分析与解决
  2. webM文件解析–基于Matroska和EBML
  3. Matroska Structure(EBML Doc) 文件结构
  4. WebM Container Guidelines
  5. OpenCV—Flags for video I/O
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值