aboutsummaryrefslogtreecommitdiff
path: root/tools/src
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2023-01-11 23:16:10 +0100
committermetamuffin <metamuffin@disroot.org>2023-01-11 23:16:10 +0100
commit43e986b5e626b339095c118fa79ba6cd011aeb9f (patch)
treeaeb70c1233d6bade2d04e86086f48e88b72f3815 /tools/src
parent0f944c90380b28e010211f3c8d57423e38bb2c11 (diff)
downloadjellything-43e986b5e626b339095c118fa79ba6cd011aeb9f.tar
jellything-43e986b5e626b339095c118fa79ba6cd011aeb9f.tar.bz2
jellything-43e986b5e626b339095c118fa79ba6cd011aeb9f.tar.zst
doesnt work but should
Diffstat (limited to 'tools/src')
-rw-r--r--tools/src/bin/gen_meta.rs132
1 files changed, 67 insertions, 65 deletions
diff --git a/tools/src/bin/gen_meta.rs b/tools/src/bin/gen_meta.rs
index b09f4a1..e7aa559 100644
--- a/tools/src/bin/gen_meta.rs
+++ b/tools/src/bin/gen_meta.rs
@@ -16,89 +16,91 @@ struct Args {
#[clap(short, long)]
title: String,
#[clap(short = 'i', long)]
- inputs: Vec<PathBuf>,
+ input: PathBuf,
}
fn main() -> anyhow::Result<()> {
let args = Args::parse();
- let mut source = vec![];
- for fname in args.inputs {
- let mut tracks = BTreeMap::new();
- let mut input = File::open(fname.clone()).unwrap();
- for tag in WebmIterator::new(&mut input, &[MatroskaSpec::TrackEntry(Master::Start)]) {
- let tag = tag?;
- match tag {
- MatroskaSpec::TrackEntry(master) => {
- let (
- mut index,
- mut language,
- mut codec,
- mut kind,
- mut sample_rate,
- mut channels,
- mut width,
- mut height,
- ) = (None, None, None, None, None, None, None, None);
- for c in master.get_children() {
- match c {
- MatroskaSpec::CodecID(b) => codec = Some(b),
- MatroskaSpec::Language(v) => language = Some(v),
- MatroskaSpec::TrackNumber(v) => index = Some(v),
- MatroskaSpec::TrackType(v) => kind = Some(v),
- MatroskaSpec::Audio(master) => {
- for c in master.get_children() {
- match c {
- MatroskaSpec::Channels(v) => channels = Some(v as usize),
- MatroskaSpec::SamplingFrequency(v) => sample_rate = Some(v),
- _ => (),
- }
+ let mut tracks = BTreeMap::new();
+ let mut input = File::open(args.input.clone()).unwrap();
+ for tag in WebmIterator::new(&mut input, &[MatroskaSpec::TrackEntry(Master::Start)]) {
+ let tag = tag?;
+ match tag {
+ MatroskaSpec::TrackEntry(master) => {
+ let (
+ mut index,
+ mut language,
+ mut codec,
+ mut kind,
+ mut sample_rate,
+ mut channels,
+ mut width,
+ mut height,
+ mut name,
+ ) = (None, None, None, None, None, None, None, None, None);
+ for c in master.get_children() {
+ match c {
+ MatroskaSpec::CodecID(b) => codec = Some(b),
+ MatroskaSpec::Language(v) => language = Some(v),
+ MatroskaSpec::TrackNumber(v) => index = Some(v),
+ MatroskaSpec::TrackType(v) => kind = Some(v),
+ MatroskaSpec::Audio(master) => {
+ for c in master.get_children() {
+ match c {
+ MatroskaSpec::Channels(v) => channels = Some(v as usize),
+ MatroskaSpec::SamplingFrequency(v) => sample_rate = Some(v),
+ _ => (),
}
}
- MatroskaSpec::Video(master) => {
- for c in master.get_children() {
- match c {
- MatroskaSpec::PixelWidth(v) => width = Some(v as usize),
- MatroskaSpec::PixelHeight(v) => height = Some(v as usize),
- _ => (),
- }
+ }
+ MatroskaSpec::Video(master) => {
+ for c in master.get_children() {
+ match c {
+ MatroskaSpec::PixelWidth(v) => width = Some(v),
+ MatroskaSpec::PixelHeight(v) => height = Some(v),
+ _ => (),
}
}
- _ => (),
}
+ MatroskaSpec::Name(v) => name = Some(v),
+ _ => (),
}
- tracks.insert(
- index.unwrap(),
- match kind.ok_or(anyhow!("track type required"))? {
- 1 => SourceTrack::Video {
- language: language.unwrap(),
- codec: codec.unwrap(),
- width: width.unwrap(),
- height: height.unwrap(),
- },
- 2 => SourceTrack::Audio {
- channels: channels.unwrap(),
- codec: codec.unwrap(),
- sample_rate: sample_rate.unwrap(),
- language: language.unwrap(),
- },
- _ => bail!("invalid track type"),
- },
- );
}
- MatroskaSpec::Tags(Master::End) => break,
- _ => (),
+ tracks.insert(
+ index.unwrap(),
+ match kind.ok_or(anyhow!("track type required"))? {
+ 1 => SourceTrack::Video {
+ language: language.unwrap_or("none".to_string()),
+ codec: codec.unwrap(),
+ width: width.unwrap(),
+ height: height.unwrap(),
+ },
+ 2 => SourceTrack::Audio {
+ channels: channels.unwrap(),
+ codec: codec.unwrap(),
+ sample_rate: sample_rate.unwrap(),
+ language: language.unwrap(),
+ },
+ 17 => SourceTrack::Subtitles {
+ language: name.unwrap(),
+ codec: codec.unwrap(),
+ },
+ _ => bail!("invalid track type"),
+ },
+ );
}
+ MatroskaSpec::Tags(Master::End) => break,
+ _ => (),
}
- source.push(Source {
- file: fname.clone(),
- tracks,
- })
}
let k = serde_json::to_string_pretty(&ItemInfo {
title: args.title,
- source,
+ source: Source {
+ path: args.input.clone(),
+ tracks,
+ },
})?;
if args.write_json {