feat: argparse and dry-run.

This commit is contained in:
2026-01-04 01:46:39 +08:00
parent 21e0e96841
commit 5ce56bda36
10 changed files with 656 additions and 90 deletions

49
src/video_merger.rs Normal file
View File

@@ -0,0 +1,49 @@
use crate::dry_run::ShellScript;
use crate::ffmpeg::FFmpegCommand;
use std::io::Result;
use std::path::{Path, PathBuf};
use std::fs;
pub fn merge_video_and_audio(video_path: &Path, audio_path: &Path, dry_run: bool, overwrite: bool) -> Result<PathBuf> {
let origin_video_extension = video_path.extension().unwrap().to_str().unwrap();
let origin_filename = format!("original.{}", &origin_video_extension);
let origin_path = video_path.parent().unwrap().join(origin_filename);
let output_path = video_path.with_extension("mp4");
if dry_run {
let mut script = ShellScript::new();
script.add_comment("Rename original video file");
script.add_variable("VIDEO_BACKUP", &origin_path);
script.add_variable("VIDEO_OUTPUT", &output_path);
script.add_command("mv \"$VIDEO_FILE\" \"$VIDEO_BACKUP\"");
script.add_empty_line();
script.add_comment("Merge video and audio");
crate::dry_run::print_shell_script(&script);
FFmpegCommand::new()
.overwrite(overwrite)
.input_var("VIDEO_BACKUP")
.input_var("AUDIO_AAC")
.codec("copy")
.output_var("VIDEO_OUTPUT")
.execute(true)?;
return Ok(output_path);
}
println!("Renaming original video: {} -> {}", video_path.display(), origin_path.display());
fs::rename(video_path, &origin_path)?;
println!("Merging video and audio:");
println!(" Video: {}", origin_path.display());
println!(" Audio: {}", audio_path.display());
println!(" Output: {}", output_path.display());
FFmpegCommand::new()
.overwrite(overwrite)
.input(&origin_path)
.input(audio_path)
.codec("copy")
.output(&output_path)
.execute(false)?;
println!("Merge completed: {}", output_path.display());
Ok(output_path)
}