mp4_describe/
mp4_describe.rs

1// Please put your sample video at examples/sample.mp4
2// This example sends the mp4 video content to Gemini API and asks AI to describe the video.
3
4use base64::{engine::general_purpose, Engine as _};
5use gemini_rust::{Content, Gemini};
6use std::env;
7use std::fs::File;
8use std::io::Read;
9
10#[tokio::main]
11async fn main() -> Result<(), Box<dyn std::error::Error>> {
12    // Read mp4 video file
13    let mut file = File::open("examples/sample.mp4")?;
14    let mut buffer = Vec::new();
15    file.read_to_end(&mut buffer)?;
16    let b64 = general_purpose::STANDARD.encode(&buffer);
17
18    // Get API key
19    let api_key = env::var("GEMINI_API_KEY")?;
20    let gemini = Gemini::pro(api_key);
21
22    // Example 1: Add mp4 blob using Message struct
23    let video_content = Content::inline_data("video/mp4", b64.clone());
24    let response1 = gemini
25        .generate_content()
26        .with_user_message("Please describe the content of this video (Message example)")
27        .with_message(gemini_rust::Message {
28            content: video_content,
29            role: gemini_rust::Role::User,
30        })
31        .execute()
32        .await?;
33
34    println!("AI description (Message): {}", response1.text());
35
36    // Example 2: Add mp4 blob directly using builder's with_inline_data
37    let response2 = gemini
38        .generate_content()
39        .with_user_message("Please describe the content of this video (with_inline_data example)")
40        .with_inline_data(b64, "video/mp4")
41        .execute()
42        .await?;
43
44    println!("AI description (with_inline_data): {}", response2.text());
45    Ok(())
46}