add support for transcoding to mp3
This commit is contained in:
@@ -6,4 +6,10 @@ matches:
|
|||||||
to:
|
to:
|
||||||
codec: opus
|
codec: opus
|
||||||
bitrate: 160
|
bitrate: 160
|
||||||
bitrate_type: vbr
|
bitrate_type: vbr # or cbr
|
||||||
|
|
||||||
|
# for mp3:
|
||||||
|
# codec: mp3
|
||||||
|
# # one of: 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256 or 320
|
||||||
|
# bitrate: 256
|
||||||
|
# bitrate_type: vbr # or cbr
|
||||||
|
|||||||
@@ -25,8 +25,17 @@ pub enum Transcode {
|
|||||||
#[serde(default = "default_opus_bitrate")]
|
#[serde(default = "default_opus_bitrate")]
|
||||||
bitrate: u16,
|
bitrate: u16,
|
||||||
|
|
||||||
#[serde(default = "default_opus_bitrate_type")]
|
#[serde(default = "bitrate_type_vbr")]
|
||||||
bitrate_type: OpusBitrateType,
|
bitrate_type: BitrateType,
|
||||||
|
},
|
||||||
|
|
||||||
|
#[serde(rename = "mp3")]
|
||||||
|
Mp3 {
|
||||||
|
#[serde(default = "default_mp3_bitrate")]
|
||||||
|
bitrate: u16,
|
||||||
|
|
||||||
|
#[serde(default = "bitrate_type_vbr")]
|
||||||
|
bitrate_type: BitrateType,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -34,6 +43,7 @@ impl Transcode {
|
|||||||
pub fn extension(&self) -> &'static str {
|
pub fn extension(&self) -> &'static str {
|
||||||
match self {
|
match self {
|
||||||
Transcode::Opus { .. } => "opus",
|
Transcode::Opus { .. } => "opus",
|
||||||
|
Transcode::Mp3 { .. } => "mp3",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -42,21 +52,25 @@ fn default_opus_bitrate() -> u16 {
|
|||||||
160
|
160
|
||||||
}
|
}
|
||||||
|
|
||||||
fn default_opus_bitrate_type() -> OpusBitrateType {
|
fn bitrate_type_vbr() -> BitrateType {
|
||||||
OpusBitrateType::Vbr
|
BitrateType::Vbr
|
||||||
|
}
|
||||||
|
|
||||||
|
fn default_mp3_bitrate() -> u16 {
|
||||||
|
256
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for Transcode {
|
impl Default for Transcode {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Transcode::Opus {
|
Transcode::Opus {
|
||||||
bitrate: default_opus_bitrate(),
|
bitrate: default_opus_bitrate(),
|
||||||
bitrate_type: default_opus_bitrate_type(),
|
bitrate_type: bitrate_type_vbr(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, Deserialize)]
|
#[derive(Clone, Debug, Deserialize)]
|
||||||
pub enum OpusBitrateType {
|
pub enum BitrateType {
|
||||||
#[serde(rename = "cbr")]
|
#[serde(rename = "cbr")]
|
||||||
Cbr,
|
Cbr,
|
||||||
#[serde(rename = "vbr")]
|
#[serde(rename = "vbr")]
|
||||||
|
|||||||
23
src/main.rs
23
src/main.rs
@@ -316,14 +316,33 @@ async fn transcode(
|
|||||||
encoder.set_property_from_str(
|
encoder.set_property_from_str(
|
||||||
"bitrate-type",
|
"bitrate-type",
|
||||||
match bitrate_type {
|
match bitrate_type {
|
||||||
config::OpusBitrateType::Vbr => "1",
|
config::BitrateType::Vbr => "1",
|
||||||
config::OpusBitrateType::Cbr => "0",
|
config::BitrateType::Cbr => "0",
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
dest_elems.push(encoder);
|
dest_elems.push(encoder);
|
||||||
dest_elems.push(gmake("oggmux")?);
|
dest_elems.push(gmake("oggmux")?);
|
||||||
}
|
}
|
||||||
|
config::Transcode::Mp3 {
|
||||||
|
bitrate,
|
||||||
|
bitrate_type,
|
||||||
|
} => {
|
||||||
|
let encoder: Element = gmake("lamemp3enc")?;
|
||||||
|
// target: "1" = "bitrate"
|
||||||
|
encoder.set_property_from_str("target", "1");
|
||||||
|
encoder.set_property("bitrate", &i32::from(*bitrate))?;
|
||||||
|
encoder.set_property(
|
||||||
|
"cbr",
|
||||||
|
match bitrate_type {
|
||||||
|
config::BitrateType::Vbr => &false,
|
||||||
|
config::BitrateType::Cbr => &true,
|
||||||
|
},
|
||||||
|
)?;
|
||||||
|
|
||||||
|
dest_elems.push(encoder);
|
||||||
|
dest_elems.push(gmake("id3v2mux")?);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
let file_dest: gstreamer_base::BaseSink = gmake("filesink")?;
|
let file_dest: gstreamer_base::BaseSink = gmake("filesink")?;
|
||||||
|
|||||||
Reference in New Issue
Block a user