Skip to content

Commit

Permalink
⏳ Add fps_changer module
Browse files Browse the repository at this point in the history
  • Loading branch information
tgotwig committed May 26, 2024
1 parent fb969ed commit a41a981
Show file tree
Hide file tree
Showing 3 changed files with 100 additions and 93 deletions.
98 changes: 98 additions & 0 deletions src/commanders/fps_changer.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
use super::fps_reader::get_fps;
use crate::{
commanders,
helpers::{
io_helper::path_bufs_to_sorted_strings, str_helper::gen_input_file_content_for_ffmpeg,
},
};
use std::{
collections::{HashMap, HashSet},
path::{Path, PathBuf},
};

pub fn change_fps(
files_to_merge: Vec<PathBuf>,
tmp_dir: &Path,
fps_from_cli: f32,
) -> (Vec<PathBuf>, Vec<std::string::String>, std::string::String) {
let mut new_files_to_merge = Vec::new();
let mut map: HashMap<&PathBuf, f32> = HashMap::new();

for file_to_merge in &files_to_merge {
map.insert(file_to_merge, get_fps(file_to_merge));
}

let fps_goal = if fps_from_cli != 0. {
fps_from_cli
} else {
*map.values()
.min_by(|x, y| x.partial_cmp(y).unwrap())
.unwrap()
};

let set: HashSet<String> = map.values().map(|value| value.to_string()).collect();
let files_to_merge = if set.len() > 1 {
println!("----------------------------------------------------------------");
println!("🔎 FPS mismatches detected");
println!();
println!("Will be merged directly: \n");
let mut output = Vec::new();
for (key, value) in &map {
if value == &fps_goal {
output.push(format!(
"- {} ({} fps)",
key.file_name().unwrap().to_string_lossy(),
value
));
}
}
output.sort();
for line in output {
println!("{}", line);
}
println!();
println!("Will be merged indirectly, generating new files from listed below with {} fps and merges with listed above:", fps_goal);
println!();
let mut output = Vec::new();
for (key, value) in &map {
if value != &fps_goal {
output.push(format!(
"- {} ({} fps)",
key.file_name().unwrap().to_string_lossy(),
value
));
}
}
output.sort();
for line in output {
println!("{}", line);
}
println!("----------------------------------------------------------------");
println!("🚀 Start FPS Changer, calling:");
println!();
for file_to_merge in files_to_merge {
let fps = get_fps(&file_to_merge);

if fps != fps_goal {
let new_file_to_merge =
commanders::fps_adjuster::adjust_fps(file_to_merge, &fps_goal, tmp_dir);
new_files_to_merge.push(new_file_to_merge);
} else {
new_files_to_merge.push(file_to_merge);
}
}

new_files_to_merge
} else {
files_to_merge
};

let files_to_merge_as_strings = path_bufs_to_sorted_strings(&files_to_merge);
let ffmpeg_input_content = gen_input_file_content_for_ffmpeg(&files_to_merge_as_strings);

(
files_to_merge,
files_to_merge_as_strings,
ffmpeg_input_content,
)
}
1 change: 1 addition & 0 deletions src/commanders/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ mod _cmd;

pub mod chapterer;
pub mod fps_adjuster;
pub mod fps_changer;
pub mod fps_reader;
pub mod merger;
pub mod selector;
94 changes: 1 addition & 93 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,19 @@
mod cli;
mod commanders;
mod helpers;
use crate::commanders::fps_reader::get_fps;
use crate::commanders::fps_changer::change_fps;
use crate::commanders::selector::select;
use crate::helpers::str_helper::create_order_of_merging;
use cli::Cli;
use core::time;
use helpers::io_helper::create;
use helpers::io_helper::create_tmp_dir;
use helpers::io_helper::exit_when_ffmpeg_not_available;
use helpers::io_helper::path_bufs_to_sorted_strings;
use helpers::io_helper::remove_file;
use helpers::str_helper::gen_input_file_content_for_ffmpeg;
use helpers::str_helper::split;
use path_slash::PathExt;
use std::collections::HashMap;
use std::collections::HashSet;
use std::io::Error;
use std::path::Path;
use std::path::PathBuf;
use std::thread;
use system_shutdown::shutdown;

Expand Down Expand Up @@ -98,90 +93,3 @@ fn main() -> Result<(), Error> {
Ok(())
}
}

pub fn change_fps(
files_to_merge: Vec<PathBuf>,
tmp_dir: &Path,
fps_from_cli: f32,
) -> (Vec<PathBuf>, Vec<std::string::String>, std::string::String) {
let mut new_files_to_merge = Vec::new();
let mut map: HashMap<&PathBuf, f32> = HashMap::new();

for file_to_merge in &files_to_merge {
map.insert(file_to_merge, get_fps(file_to_merge));
}

let fps_goal = if fps_from_cli != 0. {
fps_from_cli
} else {
*map.values()
.min_by(|x, y| x.partial_cmp(y).unwrap())
.unwrap()
};

let set: HashSet<String> = map.values().map(|value| value.to_string()).collect();
let files_to_merge = if set.len() > 1 {
println!("----------------------------------------------------------------");
println!("🔎 FPS mismatches detected");
println!();
println!("Will be merged directly: \n");
let mut output = Vec::new();
for (key, value) in &map {
if value == &fps_goal {
output.push(format!(
"- {} ({} fps)",
key.file_name().unwrap().to_string_lossy(),
value
));
}
}
output.sort();
for line in output {
println!("{}", line);
}
println!();
println!("Will be merged indirectly, generating new files from listed below with {} fps and merges with listed above:", fps_goal);
println!();
let mut output = Vec::new();
for (key, value) in &map {
if value != &fps_goal {
output.push(format!(
"- {} ({} fps)",
key.file_name().unwrap().to_string_lossy(),
value
));
}
}
output.sort();
for line in output {
println!("{}", line);
}
println!("----------------------------------------------------------------");
println!("🚀 Start FPS Changer, calling:");
println!();
for file_to_merge in files_to_merge {
let fps = get_fps(&file_to_merge);

if fps != fps_goal {
let new_file_to_merge =
commanders::fps_adjuster::adjust_fps(file_to_merge, &fps_goal, tmp_dir);
new_files_to_merge.push(new_file_to_merge);
} else {
new_files_to_merge.push(file_to_merge);
}
}

new_files_to_merge
} else {
files_to_merge
};

let files_to_merge_as_strings = path_bufs_to_sorted_strings(&files_to_merge);
let ffmpeg_input_content = gen_input_file_content_for_ffmpeg(&files_to_merge_as_strings);

(
files_to_merge,
files_to_merge_as_strings,
ffmpeg_input_content,
)
}

0 comments on commit a41a981

Please sign in to comment.