diff --git a/src/main.rs b/src/main.rs index 68f8f61..a3070b7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1687,7 +1687,16 @@ fn create_thumbnails(libs: &[libraries::Library], excluded_dirs: &[String]) { ]); debug!("Generating video thumbnail: {:?}", thumb_path); - generate_video_thumbnail(src, &thumb_path); + if let Err(e) = generate_video_thumbnail(src, &thumb_path) { + let sentinel = unsupported_thumbnail_sentinel(&thumb_path); + error!( + "Unable to thumbnail video {:?}: {}. Writing sentinel {:?}", + src, e, sentinel + ); + if let Err(se) = std::fs::write(&sentinel, b"") { + warn!("Failed to write sentinel {:?}: {}", sentinel, se); + } + } video_span.end(); } else if is_image(&entry) { match generate_image_thumbnail(src, &thumb_path) { diff --git a/src/video/actors.rs b/src/video/actors.rs index c7300ef..7722a5d 100644 --- a/src/video/actors.rs +++ b/src/video/actors.rs @@ -107,19 +107,27 @@ pub async fn create_playlist(video_path: &str, playlist_file: &str) -> Result std::io::Result<()> { + let output = Command::new("ffmpeg") .arg("-ss") .arg("3") .arg("-i") - .arg(path.to_str().unwrap()) + .arg(path) .arg("-vframes") .arg("1") .arg("-f") .arg("image2") .arg(destination) - .output() - .expect("Failure to create video frame"); + .output()?; + + if !output.status.success() { + return Err(std::io::Error::other(format!( + "ffmpeg failed ({}): {}", + output.status, + String::from_utf8_lossy(&output.stderr).trim() + ))); + } + Ok(()) } /// Use ffmpeg to extract a 200px-wide thumbnail from formats the `image` crate