Skip to main content

oximedia_transcode/presets/
vimeo.rs

1//! Vimeo presets following platform recommendations.
2
3use crate::{PresetConfig, QualityMode};
4
5/// Vimeo SD (H.264/AAC, 480p).
6#[must_use]
7pub fn vimeo_sd() -> PresetConfig {
8    PresetConfig {
9        video_codec: Some("h264".to_string()),
10        audio_codec: Some("aac".to_string()),
11        video_bitrate: Some(2_000_000), // 2 Mbps
12        audio_bitrate: Some(128_000),
13        width: Some(640),
14        height: Some(480),
15        frame_rate: Some((30, 1)),
16        quality_mode: Some(QualityMode::High),
17        container: Some("mp4".to_string()),
18        audio_channel_layout: None,
19    }
20}
21
22/// Vimeo HD (H.264/AAC, 720p).
23#[must_use]
24pub fn vimeo_hd() -> PresetConfig {
25    PresetConfig {
26        video_codec: Some("h264".to_string()),
27        audio_codec: Some("aac".to_string()),
28        video_bitrate: Some(5_000_000), // 5 Mbps
29        audio_bitrate: Some(192_000),
30        width: Some(1280),
31        height: Some(720),
32        frame_rate: Some((30, 1)),
33        quality_mode: Some(QualityMode::High),
34        container: Some("mp4".to_string()),
35        audio_channel_layout: None,
36    }
37}
38
39/// Vimeo Full HD (H.264/AAC, 1080p).
40#[must_use]
41pub fn vimeo_full_hd() -> PresetConfig {
42    PresetConfig {
43        video_codec: Some("h264".to_string()),
44        audio_codec: Some("aac".to_string()),
45        video_bitrate: Some(10_000_000), // 10 Mbps
46        audio_bitrate: Some(192_000),
47        width: Some(1920),
48        height: Some(1080),
49        frame_rate: Some((30, 1)),
50        quality_mode: Some(QualityMode::VeryHigh),
51        container: Some("mp4".to_string()),
52        audio_channel_layout: None,
53    }
54}
55
56/// Vimeo 4K (H.264/AAC, 2160p).
57#[must_use]
58pub fn vimeo_4k() -> PresetConfig {
59    PresetConfig {
60        video_codec: Some("h264".to_string()),
61        audio_codec: Some("aac".to_string()),
62        video_bitrate: Some(40_000_000), // 40 Mbps
63        audio_bitrate: Some(256_000),
64        width: Some(3840),
65        height: Some(2160),
66        frame_rate: Some((30, 1)),
67        quality_mode: Some(QualityMode::VeryHigh),
68        container: Some("mp4".to_string()),
69        audio_channel_layout: None,
70    }
71}
72
73/// Vimeo Pro (H.264/AAC, 1080p, high bitrate for professionals).
74#[must_use]
75pub fn vimeo_pro() -> PresetConfig {
76    PresetConfig {
77        video_codec: Some("h264".to_string()),
78        audio_codec: Some("aac".to_string()),
79        video_bitrate: Some(20_000_000), // 20 Mbps
80        audio_bitrate: Some(320_000),
81        width: Some(1920),
82        height: Some(1080),
83        frame_rate: Some((24, 1)), // Film standard
84        quality_mode: Some(QualityMode::VeryHigh),
85        container: Some("mp4".to_string()),
86        audio_channel_layout: None,
87    }
88}
89
90#[cfg(test)]
91mod tests {
92    use super::*;
93
94    #[test]
95    fn test_vimeo_hd() {
96        let preset = vimeo_hd();
97        assert_eq!(preset.width, Some(1280));
98        assert_eq!(preset.height, Some(720));
99        assert_eq!(preset.video_bitrate, Some(5_000_000));
100    }
101
102    #[test]
103    fn test_vimeo_full_hd() {
104        let preset = vimeo_full_hd();
105        assert_eq!(preset.width, Some(1920));
106        assert_eq!(preset.height, Some(1080));
107        assert_eq!(preset.quality_mode, Some(QualityMode::VeryHigh));
108    }
109
110    #[test]
111    fn test_vimeo_4k() {
112        let preset = vimeo_4k();
113        assert_eq!(preset.width, Some(3840));
114        assert_eq!(preset.height, Some(2160));
115        assert_eq!(preset.video_bitrate, Some(40_000_000));
116    }
117
118    #[test]
119    fn test_vimeo_pro() {
120        let preset = vimeo_pro();
121        assert_eq!(preset.frame_rate, Some((24, 1)));
122        assert_eq!(preset.audio_bitrate, Some(320_000));
123    }
124}