我有一个带有 VP8 轨道的 .webm 文件,由外部服务(TokBox 归档)从 WebRTC 流中记录。流是自适应的,因此轨道中的每一帧都可以有不同的分辨率。大多数播放器(在 webkit 浏览器中)使用轨道描述中的视频分辨率(始终为 640x480)并将帧缩放到此分辨率。Firefox 和 VLC 播放器使用真实帧分辨率,分别改变视频分辨率。
我想实现两个目标:
- 在 Internet Explorer 9+ 中播放此视频,无需安装额外的插件。
- 将帧分辨率更改为一种固定分辨率,因此视频在不同浏览器中的外观相同。
所以,我的计划是:
- 从源 webm 文件中提取帧到具有真实帧分辨率的图像(例如 PNG 或 BMP)(我该怎么做?)
- 查找图像的最大宽度和最大高度
- 为图像添加黑色填充,因此较小的帧将位于新帧的中心(大小为 MAX_WIDHTxMAX_HEIGHT)
- 使用 ffmpeg 将图像组合到 h264 轨道
一切都正确吗?我怎样才能做到这一点?这个算法可以以某种方式优化吗?
我尝试使用 ffmpeg 提取图像,但它不使用轨道头中的分辨率解析真实的帧分辨率。我认为一些 libwebm 函数可以帮助我(解析帧头和提取图像)。也许有人有一些代码片段可以做到这一点?
示例.webm(下载源,不要播放google转换的版本):https ://drive.google.com/file/d/0BwFZRvYNn9CKcndhMzlVa0psX00/view?usp=sharing
TokBox 支持的自适应流官方说明:https: //support.tokbox.com/hc/en-us/community/posts/206241666-Archived-video-resolution-is-supposed-to-be-720x1280-but-reports -as-640x480