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 在 视频
143 每月下载次数
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