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)
参考
- Webm进度条问题分析与解决
- webM文件解析–基于Matroska和EBML
- Matroska Structure(EBML Doc) 文件结构
- WebM Container Guidelines
- OpenCV—Flags for video I/O