#[allow(unused_imports)]
use crate::prelude::*;
#[allow(unused_imports)]
use serde::{Deserialize, Serialize};
#[allow(unused_imports)]
use std::collections::HashMap;
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct Audio {
pub bitrate: i64,
pub channels: i64,
pub codec: String,
pub container: String,
pub content_type: String,
pub duration: f64,
pub file_name: String,
pub file_size: i64,
#[serde(skip_serializing_if = "Option::is_none")]
pub media_type: Option<String>,
pub sample_rate: i64,
pub url: String,
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct AudioTrack {
pub bitrate: i64,
pub channels: i64,
pub codec: String,
pub sample_rate: i64,
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct HTTPValidationError {
#[serde(skip_serializing_if = "Option::is_none")]
pub detail: Option<Vec<Option<ValidationError>>>,
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct Input {
pub tracks: Vec<Track>,
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct Keyframe {
pub duration: f64,
pub timestamp: f64,
pub url: String,
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct MetadataInput {
#[serde(skip_serializing_if = "Option::is_none")]
pub extract_frames: Option<bool>,
pub media_url: String,
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct MetadataOutput {
pub media: MediaProperty,
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct Output {
pub thumbnail_url: String,
pub video_url: String,
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct Resolution {
pub aspect_ratio: String,
pub height: i64,
pub width: i64,
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct Track {
pub id: String,
pub keyframes: Vec<Keyframe>,
#[serde(rename = "type")]
pub ty: String,
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct ValidationError {
pub loc: Vec<serde_json::Value>,
pub msg: String,
#[serde(rename = "type")]
pub ty: String,
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct Video {
#[serde(skip_serializing_if = "Option::is_none")]
pub audio: Option<Option<AudioTrack>>,
pub bitrate: i64,
pub codec: String,
pub container: String,
pub content_type: String,
pub duration: f64,
#[serde(skip_serializing_if = "Option::is_none")]
pub end_frame_url: Option<String>,
pub file_name: String,
pub file_size: i64,
pub format: VideoFormat,
pub fps: i64,
pub frame_count: i64,
#[serde(skip_serializing_if = "Option::is_none")]
pub media_type: Option<String>,
pub resolution: Resolution,
#[serde(skip_serializing_if = "Option::is_none")]
pub start_frame_url: Option<String>,
pub timebase: String,
pub url: String,
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct VideoFormat {
pub bitrate: i64,
pub container: String,
pub level: f64,
pub pixel_format: String,
pub profile: String,
pub video_codec: String,
}
#[derive(Debug, Serialize, Deserialize, Default)]
pub struct WaveformInput {
pub media_url: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub points_per_second: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub precision: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub smoothing_window: Option<i64>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct WaveformOutput {
pub duration: f64,
pub points: i64,
pub precision: i64,
pub waveform: Vec<f64>,
}
#[derive(Debug, Serialize, Deserialize, smart_default::SmartDefault)]
#[allow(non_camel_case_types)]
pub enum MediaProperty {
#[default]
Video(Video),
Audio(Audio),
}
pub fn waveform(params: WaveformInput) -> FalRequest<WaveformInput, WaveformOutput> {
FalRequest::new("fal-ai/ffmpeg-api/waveform", params)
}