#mp4 #h264 #media #2d-vector #encoding

gridvid

用于从2D向量渲染MP4视频的包装库

4个版本 (2个破坏性更新)

0.3.0 2023年4月21日
0.2.0 2023年4月5日
0.1.1 2023年3月10日
0.1.0 2023年3月10日

#367 in 视频

MIT许可证

44KB
369

gridvid

Gridvid是一个使用最小接口从2D向量渲染MP4视频的Rust包装库。

外部向量映射到X轴,内部向量映射到Y轴。

基本用法

    use gridvid::Encoder;

    // Create a 2D Vec of any element type, bool in this example
    let mut grid: Vec<Vec<bool>> = vec![vec![false; 10]; 10];

    // fn to map grid element reference to RGB tuple `(u8, u8, u8)`
    let convert = |&b: &bool| if b { (0, 0, 255) } else { (0, 0, 0) };

    // Initialize video encoder
    let mut video = Encoder::new("/tmp/output.mp4", Box::new(convert)).build()?;

    // Update the grid as desired, adding a new frame for each grid state
    for i in 0..grid.len() {
        grid[i][i] = true;
        video.add_frame(&grid)?;
    }

    // Write encoded video to output file
    video.close()?;

以下示例渲染并导出以下内容

输出

选项摘要

use gridvid::{Encoder, Gridlines, Scaling};

let mut video = Encoder::new(filename, Box::new(convert))
    .fps(20)    // Set video frame rate to 20 fps

    // Video Frame Scaling options
    .scale(Scaling::Uniform(16))        // Upscale by a factor of 16
    .scale(Scaling::MaxSize(720, 480))  // Scale to 720x480, keeping aspect ratio
    .scale(Scaling::Stretch(720, 480))  // Stretch to 720x480, ignoring aspect ratio

    // Gridline options
    .gridlines(Gridlines::Show((255,255,255)))  // Set gridline color to white
    .gridlines(Gridlines::Hide)                 // Hide gridlines
    .build()?;

编码器默认值

  • 视频帧率是4 fps
  • 黑色网格线:Gridlines(0,0,0)
  • 视频缩放到720x720:MaxSize(720, 720)

文档

https://docs.rs/gridvid/

来自examples/game_of_life.rs的示例输出

许可证

从版本0.2.0开始,根据MIT许可证授权。

依赖关系

~6.5–10MB
~164K SLoC