#recording #screen-recording #obs #encoding

libobs

libobs的简单、安全视频录制包装器

4个版本

0.1.3 2024年7月25日
0.1.2 2024年7月7日
0.1.1 2024年7月7日
0.1.0 2024年7月7日

106视频

Download history 230/week @ 2024-07-03 49/week @ 2024-07-10 139/week @ 2024-07-24 4/week @ 2024-07-31

143 每月下载次数

GPL-3.0 许可证

465KB
1.5K SLoC

包含 (静态库, 400KB) obs.lib

libobs-rs

通过libobs进行简单、安全的视频录制。

目前仅在Windows上进行了测试。Linux和MacOS可能也适用,但尚未测试。这些将在未来得到支持。

API目前不稳定,将来肯定会进行破坏性修订。

在Linux上构建,您必须安装libobs-dev包以及bindgen依赖项。

sudo apt-get libobs-dev llvm-dev libclang-dev clang

libobs的Windows DLL编译文件可以在https://github.com/joshprk/libobs-rs/releases/tag/deps找到

快速入门

以下是一个示例,它将录制全屏应用程序的视频内容。请注意,API目前非常有限,但您已经可以录制视频和音频,并对输出有完全控制权。如果您需要更多,libobs已经暴露出来。

use std::time::Duration;
use std::thread;

use libobs::wrapper::{
    StartupInfo, ObsContext, OutputInfo, ObsData, VideoEncoderInfo, 
    AudioEncoderInfo, SourceInfo, ObsPath
};

pub fn main() {
    // Start the OBS context
    let startup_info = StartupInfo::default();
    let mut context = ObsContext::new(startup_info).unwrap();

    // Set up output to ./recording.mp4
    let mut output_settings = ObsData::new();
    output_settings
        .set_string("path", ObsPath::from_relative("recording.mp4").build());

    let output_info = OutputInfo::new(
        "ffmpeg_muxer", "output", Some(output_settings), None
    );

    let output = context.output(output_info).unwrap();

    // Register the video encoder
    let mut video_settings = ObsData::new();
    video_settings
        .set_int("bf", 2)
        .set_bool("psycho_aq", true)
        .set_bool("lookahead", true)
        .set_string("profile", "high")
        .set_string("preset", "hq")
        .set_string("rate_control", "cbr")
        .set_int("bitrate", 10000);

    let video_info = VideoEncoderInfo::new(
        ObsContext::get_best_encoder(),
        "video_encoder",
        Some(video_settings),
        None,
    );

    let video_handler = ObsContext::get_video_ptr().unwrap();
    output.video_encoder(video_info, video_handler);
    
    // Register the audio encoder
    let mut audio_settings = ObsData::new();
    audio_settings.set_int("bitrate", 160);

    let audio_info = AudioEncoderInfo::new(
        "ffmpeg_aac", 
        "audio_encoder", 
        Some(audio_settings), 
        None
    );

    let audio_handler = ObsContext::get_audio_ptr().unwrap();
    output.audio_encoder(audio_info, 0, audio_handler);

    // Create the video source using game capture
    let mut video_source_data = ObsData::new();
    video_source_data
        .set_string("capture_mode", "window")
        .set_string("window", "")
        .set_bool("capture_cursor", true);
        
    let video_source_info = SourceInfo::new(
        "game_capture", 
        "video_source", 
        Some(video_source_data), 
        None
    );

    // Register the source and record
    output.source(video_source_info, 0);
    output.start();

    println!("recording for 10 seconds...");
    thread::sleep(Duration::new(10, 0));

    // Open any fullscreen application and
    // Success!
    output.stop();
}

依赖项

~0.7–31MB
~469K SLoC