deepshrink_core/
options.rs1#[derive(Debug, Clone, Copy, PartialEq, Eq)]
9pub enum VideoCodec {
10 H264,
11 H265,
12}
13
14impl VideoCodec {
15 pub fn encoder(self) -> &'static str {
17 match self {
18 VideoCodec::H264 => "libx264",
19 VideoCodec::H265 => "libx265",
20 }
21 }
22
23 pub fn mp4_tag(self) -> Option<&'static str> {
25 match self {
26 VideoCodec::H264 => None,
27 VideoCodec::H265 => Some("hvc1"),
29 }
30 }
31
32 pub fn label(self) -> &'static str {
34 match self {
35 VideoCodec::H264 => "H.264",
36 VideoCodec::H265 => "H.265",
37 }
38 }
39
40 pub fn crf_search_bounds(self) -> (u8, u8) {
44 match self {
45 VideoCodec::H264 => (18, 32),
46 VideoCodec::H265 => (22, 36),
47 }
48 }
49}
50
51#[derive(Debug, Clone, Copy, PartialEq, Eq)]
53pub enum AudioCodec {
54 Aac,
55 Opus,
56 Mp3,
57}
58
59impl AudioCodec {
60 pub fn encoder(self) -> &'static str {
61 match self {
62 AudioCodec::Aac => "aac",
63 AudioCodec::Opus => "libopus",
64 AudioCodec::Mp3 => "libmp3lame",
65 }
66 }
67
68 pub fn extension(self) -> &'static str {
70 match self {
71 AudioCodec::Aac => "m4a",
72 AudioCodec::Opus => "opus",
73 AudioCodec::Mp3 => "mp3",
74 }
75 }
76
77 pub fn label(self) -> &'static str {
79 match self {
80 AudioCodec::Aac => "AAC",
81 AudioCodec::Opus => "Opus",
82 AudioCodec::Mp3 => "MP3",
83 }
84 }
85}
86
87#[derive(Debug, Clone, Copy, PartialEq, Eq)]
89pub enum AudioChoice {
90 Keep,
92 Bitrate(u64),
94 Drop,
96}
97
98#[derive(Debug, Clone, Copy, PartialEq, Eq)]
100pub enum ResolutionOpt {
101 Auto,
103 Height(u32),
105}
106
107#[derive(Debug, Clone, Copy, PartialEq, Eq)]
109pub enum FpsOpt {
110 Auto,
111 Cap(u32),
112}
113
114#[derive(Debug, Clone, Copy, PartialEq, Eq)]
116pub enum QualityPreset {
117 Fast,
118 Balanced,
119 Max,
120}
121
122impl QualityPreset {
123 pub fn encoder_preset(self) -> &'static str {
125 match self {
126 QualityPreset::Fast => "veryfast",
127 QualityPreset::Balanced => "medium",
128 QualityPreset::Max => "slow",
129 }
130 }
131
132 pub fn default_crf(self, codec: VideoCodec) -> u8 {
136 match codec {
137 VideoCodec::H264 => match self {
138 QualityPreset::Fast => 25,
139 QualityPreset::Balanced => 23,
140 QualityPreset::Max => 20,
141 },
142 VideoCodec::H265 => match self {
143 QualityPreset::Fast => 30,
144 QualityPreset::Balanced => 28,
145 QualityPreset::Max => 24,
146 },
147 }
148 }
149}