diff options
author | metamuffin <metamuffin@disroot.org> | 2023-01-11 23:16:10 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2023-01-11 23:16:10 +0100 |
commit | 43e986b5e626b339095c118fa79ba6cd011aeb9f (patch) | |
tree | aeb70c1233d6bade2d04e86086f48e88b72f3815 /tools | |
parent | 0f944c90380b28e010211f3c8d57423e38bb2c11 (diff) | |
download | jellything-43e986b5e626b339095c118fa79ba6cd011aeb9f.tar jellything-43e986b5e626b339095c118fa79ba6cd011aeb9f.tar.bz2 jellything-43e986b5e626b339095c118fa79ba6cd011aeb9f.tar.zst |
doesnt work but should
Diffstat (limited to 'tools')
-rw-r--r-- | tools/src/bin/gen_meta.rs | 132 |
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 { |