3个版本 (1个稳定版)
1.0.0 | 2024年4月25日 |
---|---|
0.1.1 | 2024年2月29日 |
0.1.0 | 2024年2月29日 |
#38 in 视频
14,408 每月下载量
43KB
1K SLoC
Rust的编解码器视频等级工具
如果你必须配置各种类型的编码器,你可能已经遇到了等级表。这些很酷,直到你意识到你必须手动将这些东西复制到你的代码中,或者“只是设置等级5.2”,这...遗憾的是比你想象的要真实。由于我不想这样做,我最终写了一个小助手工具,它将所有这些放入代码中,并进行了合理的检查,以便你可以在运行时找到正确的等级。
use video_levels::hevc::{LevelSelector, Profile, Tier};
let level = LevelSelector::new()
.width(1920)
.height(1080)
.framerate(60.0)
.tier(Tier::Main)
.profile(Profile::Main)
.select();
println!("Level: {:?}", level.unwrap().id());
但是,嘿,你的MediaTek垃圾卸载android手机硬件解码器不支持世界上所有的等级?你想要做的事情的简短版本是:将等级限制到你的配置(宽度、高度、fps等)所需的等级,然后将其限制到一个允许你为你的应用程序留有空间的等级。这就像
use video_levels::hevc::{LevelSelector, Profile, Tier};
let level = LevelSelector::new()
.width(3840)
.height(2160)
.framerate(60.0)
.tier(Tier::Main)
.profile(Profile::Main)
// Clamping between L4 and L5.2
.clamp(Level::L4, Level::L5_2)
.select();
println!("Level: {:?}", level.unwrap().id());
AV1同样简单
use video_levels::AV1::{LevelSelector};
let level = LevelSelector::new()
.width(3840)
.height(2160)
.framerate(60.0)
.select();
println!("Level: {:?}", level.unwrap().id());
为什么?
在看了维基百科和ITU规范后,我想...好吧,我再也不想这样做了
进展
- HEVC
- AV1
- H264(对此感到恐惧lol)
- 将选择器做成一个特例
贡献
伙计,只打开一个带有一些gucchimucchi代码的PR,我会审阅的。
许可证
MIT -> 狂欢吧
致谢
ridley combs 提供帮助
依赖项
~315KB