/* This file is part of jellything (https://codeberg.org/metamuffin/jellything) which is licensed under the GNU Affero General Public License (version 3); see /COPYING. Copyright (C) 2025 metamuffin */ use anyhow::{Result, anyhow}; use jellyremuxer::demuxers::{Demuxer, DemuxerNew, matroska::MatroskaDemuxer}; use std::{env::args, fs::File}; fn main() -> Result<()> { env_logger::init_from_env("LOG"); let path = args().nth(1).ok_or(anyhow!("first arg is input path"))?; let file = File::open(path)?; let mut reader = MatroskaDemuxer::new(Box::new(file)); let info = reader.info()?; reader.seek_cluster(None)?; let mut num_clusters = 0; let mut last_ts = 0; let mut total_size = 0; while let Some((_, cluster)) = reader.read_cluster()? { last_ts = cluster.timestamp * info.timestamp_scale; num_clusters += 1; total_size += cluster .simple_blocks .iter() .map(|b| b.data.len()) .sum::() as u64 } let average_duration = (last_ts / num_clusters) as f64 / 1_000_000_000.; let average_size = (total_size / num_clusters) as f64 / 1_000_000.; println!("{average_duration:>6.02}s {average_size:>6.02}MB"); Ok(()) }