diff options
author | metamuffin <metamuffin@disroot.org> | 2023-10-02 13:45:30 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2023-10-02 13:45:30 +0200 |
commit | a7513d5f0db18570cc7db405810ce66cab6475e4 (patch) | |
tree | 350581a2ef1b4ff0ba6b2b867fa918ed39d70647 /transcoder/src | |
parent | 3da60b245427a7409e17638bd78783a7ff7154f7 (diff) | |
download | jellything-a7513d5f0db18570cc7db405810ce66cab6475e4.tar jellything-a7513d5f0db18570cc7db405810ce66cab6475e4.tar.bz2 jellything-a7513d5f0db18570cc7db405810ce66cab6475e4.tar.zst |
broken transcode
Diffstat (limited to 'transcoder/src')
-rw-r--r-- | transcoder/src/lib.rs | 1 | ||||
-rw-r--r-- | transcoder/src/snippet.rs | 36 |
2 files changed, 23 insertions, 14 deletions
diff --git a/transcoder/src/lib.rs b/transcoder/src/lib.rs index 167303d..240d37a 100644 --- a/transcoder/src/lib.rs +++ b/transcoder/src/lib.rs @@ -4,5 +4,6 @@ Copyright (C) 2023 metamuffin <metamuffin.org> */ #![feature(async_closure)] +#![feature(exit_status_error)] pub mod image; pub mod snippet; diff --git a/transcoder/src/snippet.rs b/transcoder/src/snippet.rs index 56bd523..5afeb15 100644 --- a/transcoder/src/snippet.rs +++ b/transcoder/src/snippet.rs @@ -4,10 +4,14 @@ Copyright (C) 2023 metamuffin <metamuffin.org> */ -use jellybase::{cache::async_cache_file, AssetLocationExt}; +use jellybase::cache::async_cache_file; use jellycommon::AssetLocation; +use log::info; use std::process::Stdio; -use tokio::{fs::File, process::Command}; +use tokio::{ + io::copy, + process::{ChildStdin, Command}, +}; #[derive(Debug)] pub enum Encoding { @@ -19,16 +23,15 @@ pub enum Encoding { }, } -pub async fn transcode(asset: AssetLocation, enc: Encoding) -> anyhow::Result<AssetLocation> { - let original_path = asset.path(); - let asset = asset.clone(); +pub async fn transcode( + key: &str, + enc: Encoding, + input: impl FnOnce(ChildStdin), +) -> anyhow::Result<AssetLocation> { Ok(async_cache_file( - &[ - "snip-tc", - original_path.as_os_str().to_str().unwrap(), - &format!("{enc:?}"), - ], - move |output| async move { + &["snip-tc", key, &format!("{enc:?}")], + move |mut output| async move { + info!("transcoding snippet {key}"); let args = match enc { Encoding::Video { codec, @@ -50,14 +53,19 @@ pub async fn transcode(asset: AssetLocation, enc: Encoding) -> anyhow::Result<As let mut proc = Command::new("ffmpeg") .stdin(Stdio::piped()) .stdout(Stdio::piped()) - .args(&["-f", "mkv", "-i", "pipe:0"]) + .args(&["-f", "matroska", "-i", "pipe:0"]) .args(args) - .args(&["-f", "mkv", "pipe:1"]) + .args(&["-f", "webm", "pipe:1"]) .spawn()?; - let mut stdin = proc.stdin.take().unwrap(); + let stdin = proc.stdin.take().unwrap(); let mut stdout = proc.stdout.take().unwrap(); + input(stdin); + copy(&mut stdout, &mut output).await?; + + proc.wait().await.unwrap().exit_ok()?; + info!("done"); Ok(()) }, ) |