aboutsummaryrefslogtreecommitdiff
path: root/remuxer/src/bin/average_cluster_duration.rs
blob: 69bb79c621787f2baf74c6703c1d5170eb67cf7d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/*
    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 <metamuffin.org>
*/

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::<usize>() 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(())
}