#等级 #编解码器 #辅助工具

video-levels

视频编解码器等级的辅助工具

3个版本 (1个稳定版)

1.0.0 2024年4月25日
0.1.1 2024年2月29日
0.1.0 2024年2月29日

#38 in 视频

Download history 3473/week @ 2024-04-16 5249/week @ 2024-04-23 3902/week @ 2024-04-30 1755/week @ 2024-05-07 4820/week @ 2024-05-14 12901/week @ 2024-05-21 5848/week @ 2024-05-28 7273/week @ 2024-06-04 9476/week @ 2024-06-11 3490/week @ 2024-06-18 9495/week @ 2024-06-25 3113/week @ 2024-07-02 4870/week @ 2024-07-09 1047/week @ 2024-07-16 3866/week @ 2024-07-23 3203/week @ 2024-07-30

14,408 每月下载量

MIT 许可证

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,我会审阅的。

KADSBUGGEL

许可证

MIT -> 狂欢吧

致谢

ridley combs 提供帮助

依赖项

~315KB