当前位置: 首页 > 工具软件 > WebM > 使用案例 >

WebM视频解析与修复

盛嘉
2023-12-01

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
 类似资料: