use std::io::Write;
use libav_ng::{
avcodec::CodecContext, avformat::FormatContext, avframe::Frame, avpacket::Packet, sws::Sws,
};
use libav_sys_ng::{
AVMediaType_AVMEDIA_TYPE_AUDIO, AVMediaType_AVMEDIA_TYPE_VIDEO, AVPixelFormat_AV_PIX_FMT_RGB24, SWS_BILINEAR, SwsContext, sws_freeContext, sws_getContext, sws_scale
};
fn main() {
let url = if let Some(url) = std::env::args().skip(1).next() {
url
} else {
eprintln!("No input file!");
std::process::exit(1);
};
let mut format_context = FormatContext::open_input(&url).expect("Failed to open file!");
format_context.find_stream_info();
for i in format_context.streams() {
let index = i.index();
let parameters = i.codec_parameters();
let name = parameters.codec_name();
let duration_ms = (i.duration_sec() * 1000.0) as i64;
let (hr, min, sec, msec) = {
const HOUR: i64 = 3600 * 1000;
(
duration_ms / HOUR,
(duration_ms % HOUR) / (60 * 1000),
(duration_ms % (60 * 1000)) / 1000,
duration_ms % 1000,
)
};
let s_type = if parameters.is_audio() {
"audio"
} else if parameters.is_video() {
"video"
} else {
"other"
};
println!("Stream #{index}: {s_type}, {name}, ({hr:02}:{min:02}:{sec:02}:{msec:03})");
if parameters.is_video() {
let (width, height) = parameters.size();
let bps = parameters.bitrate();
println!(" |- size: {width} x {height}; {bps} bps");
} else if parameters.is_audio() {
let bps = parameters.bitrate();
println!(" |- {bps} bps");
}
}
}