add play button to video thumbnails

feat/vaults
Tomáš Mládek 2022-02-03 18:13:09 +01:00
parent b80d547689
commit 7540b31ab8
No known key found for this signature in database
GPG Key ID: ED21612889E75EC5
4 changed files with 20 additions and 0 deletions

1
.gitattributes vendored Normal file
View File

@ -0,0 +1 @@
src/assets/play.png filter=lfs diff=lfs merge=lfs -text

View File

@ -5,6 +5,7 @@ package: target/release/upend webui/public/build/main.js
linuxdeploy-x86_64.AppImage --appdir dist
cp target/release/upend dist/usr/bin/upend
cp -r webui/public dist/usr/bin/webui
cp -r src/assets dist/usr/bin/assets
cp media/upend.png dist/usr/share/icons/upend.png
VERSION="$$(grep '^version' Cargo.toml|grep -Eo '[0-9]+\.[0-9]+\.[0-9]+')" \
linuxdeploy-x86_64.AppImage --appdir dist -d upend.desktop --output appimage

BIN
src/assets/play.png (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -1,10 +1,13 @@
use anyhow::anyhow;
use log::warn;
use std::io::Read;
use std::path::Path;
use std::process::Command;
use anyhow::Result;
use crate::common::get_static_dir;
use super::Previewable;
pub struct VideoPath<'a>(pub &'a Path);
@ -26,9 +29,21 @@ impl<'a> Previewable for VideoPath<'a> {
let duration = String::from_utf8_lossy(&duration_cmd.stdout)
.trim()
.parse::<f64>()?;
let play_button = get_static_dir("assets").map(|d| d.join("play.png")).ok();
let outfile = tempfile::Builder::new().suffix(".webp").tempfile()?;
let thumbnail_cmd = Command::new("ffmpeg")
.args(["-i", &self.0.to_string_lossy()])
.args(if let Some(play_button) = play_button {
vec![
"-i".to_string(),
play_button.to_string_lossy().to_string(),
"-filter_complex".to_string(),
"[0:v][1:v]overlay=(W-w)/2:(H-h)/2".to_string(),
]
} else {
warn!("Could not find play button to overlay for video thumbnail!");
vec![]
})
.args(["-vframes", "1"])
.args(["-ss", &(duration / 2.0).to_string()])
.arg(&*outfile.path().to_string_lossy())