66 lines
2.3 KiB
Rust
66 lines
2.3 KiB
Rust
use crate::otel::global_tracer;
|
|
use crate::video::ffmpeg::{Ffmpeg, GifType};
|
|
use crate::{is_video, update_media_counts};
|
|
use log::{info};
|
|
use opentelemetry::trace::{Tracer};
|
|
use std::path::{Path, PathBuf};
|
|
use std::{fs};
|
|
use walkdir::WalkDir;
|
|
|
|
pub mod actors;
|
|
pub mod ffmpeg;
|
|
|
|
pub async fn generate_video_gifs() {
|
|
tokio::spawn(async {
|
|
info!("Starting to make video gifs");
|
|
|
|
let start = std::time::Instant::now();
|
|
let tracer = global_tracer();
|
|
tracer.start("creating video gifs");
|
|
|
|
let gif_base_path = &dotenv::var("GIFS_DIRECTORY").unwrap_or(String::from("gifs"));
|
|
let gif_directory: &Path = Path::new(gif_base_path);
|
|
fs::create_dir_all(gif_base_path).expect("There was an issue creating directory");
|
|
|
|
let files = PathBuf::from(dotenv::var("BASE_PATH").unwrap());
|
|
|
|
let ffmpeg = Ffmpeg;
|
|
for file in WalkDir::new(&files)
|
|
.into_iter()
|
|
.filter_map(|entry| entry.ok())
|
|
.filter(|entry| entry.file_type().is_file())
|
|
.filter(is_video)
|
|
.filter(|entry| {
|
|
let path = entry.path();
|
|
let relative_path = &path.strip_prefix(&files).unwrap();
|
|
let thumb_path = Path::new(gif_directory).join(relative_path);
|
|
let gif_path = thumb_path.with_extension("gif");
|
|
!gif_path.exists()
|
|
})
|
|
{
|
|
let path = file.path();
|
|
let relative_path = &path.strip_prefix(&files).unwrap();
|
|
let gif_path = Path::new(gif_directory).join(relative_path);
|
|
let gif_path = gif_path.with_extension("gif");
|
|
if let Some(parent_dir) = gif_path.parent() {
|
|
fs::create_dir_all(parent_dir).unwrap_or_else(|_| panic!("There was an issue creating gif directory {:?}",
|
|
gif_path));
|
|
}
|
|
info!("Generating gif for {:?}", path);
|
|
|
|
ffmpeg
|
|
.generate_video_gif(
|
|
path.to_str().unwrap(),
|
|
gif_path.to_str().unwrap(),
|
|
GifType::Overview,
|
|
)
|
|
.await
|
|
.expect("There was an issue generating the gif");
|
|
}
|
|
|
|
info!("Finished making video gifs in {:?}", start.elapsed());
|
|
|
|
update_media_counts(&files);
|
|
});
|
|
}
|