diff --git a/crunchy-cli-core/src/utils/download.rs b/crunchy-cli-core/src/utils/download.rs index 122d436..85fe3dc 100644 --- a/crunchy-cli-core/src/utils/download.rs +++ b/crunchy-cli-core/src/utils/download.rs @@ -1527,13 +1527,13 @@ struct SyncVideo { fn sync_videos(mut sync_videos: Vec, value: f64) -> Result>> { let mut result = HashMap::new(); - let hasher = HasherConfig::new().to_hasher(); - let start_frame = 50; + let hasher = HasherConfig::new().preproc_dct().to_hasher(); + let start_frame = 300; sync_videos.sort_by_key(|sv| sv.length); let sync_base = sync_videos.remove(0); - let sync_hashes = extract_frame_hashes(&sync_base.path, start_frame, 100, &hasher)?; + let sync_hashes = extract_frame_hashes(&sync_base.path, start_frame, 50, &hasher)?; for sync_video in sync_videos { let mut highest_frame_match = f64::INFINITY; @@ -1558,22 +1558,20 @@ fn sync_videos(mut sync_videos: Vec, value: f64) -> Result = + check_frame_windows(&sync_hashes, &hashes) + .into_iter() + .enumerate() + .collect(); + check_frame_windows_result.sort_by(|(_, a), (_, b)| a.partial_cmp(&b).unwrap()); + if check_frame_windows_result[0].1 <= value { + result.insert( + sync_video.idx, + frame + check_frame_windows_result[0].0 as u64 - start_frame, + ); break; - } else { - let curr_highest_frame_match = *check_frame_windows_result - .iter() - .min_by(|a, b| a.total_cmp(b)) - .unwrap(); - if curr_highest_frame_match < highest_frame_match { - highest_frame_match = curr_highest_frame_match - } + } else if check_frame_windows_result[0].1 < highest_frame_match { + highest_frame_match = check_frame_windows_result[0].1 } frame = (frame + 300 - sync_hashes.len() as u64).min(sync_video.available_frames) @@ -1610,7 +1608,7 @@ fn extract_frame_hashes( .args([ "-vf", format!( - r#"select=between(n\,{}\,{}),setpts=PTS-STARTPTS"#, + r#"select=between(n\,{}\,{}),setpts=PTS-STARTPTS,scale=-1:240"#, start_frame, start_frame + frame_count )