mirror of
https://github.com/crunchy-labs/crunchy-cli.git
synced 2026-01-21 04:02:00 -06:00
(Re-)add download pipe to stdout
This commit is contained in:
parent
6d1f8d49f6
commit
08c4e30a06
1 changed files with 31 additions and 12 deletions
|
|
@ -19,8 +19,7 @@ use crunchyroll_rs::{
|
|||
};
|
||||
use log::{debug, error, info, warn};
|
||||
use std::borrow::Cow;
|
||||
use std::io::Read;
|
||||
use std::path::Path;
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::process::{Command, Stdio};
|
||||
|
||||
#[derive(Debug, clap::Parser)]
|
||||
|
|
@ -93,10 +92,19 @@ impl Execute for Download {
|
|||
.extension()
|
||||
.unwrap_or_default()
|
||||
.is_empty()
|
||||
&& self.output != "-"
|
||||
{
|
||||
bail!("No file extension found. Please specify a file extension (via `-o`) for the output file")
|
||||
}
|
||||
|
||||
if self.subtitle.is_some() {
|
||||
if let Some(ext) = Path::new(&self.output).extension() {
|
||||
if ext.to_string_lossy() != "mp4" {
|
||||
warn!("Detected a non mp4 output container. Adding subtitles may take a while")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let _ = FFmpegPreset::ffmpeg_presets(self.ffmpeg_preset.clone())?;
|
||||
if self.ffmpeg_preset.len() == 1
|
||||
&& self.ffmpeg_preset.get(0).unwrap() == &FFmpegPreset::Nvidia
|
||||
|
|
@ -249,7 +257,7 @@ impl Execute for Download {
|
|||
&self,
|
||||
format.stream,
|
||||
format.subtitles.get(0).cloned(),
|
||||
path.as_path(),
|
||||
path.to_path_buf(),
|
||||
)
|
||||
.await?;
|
||||
}
|
||||
|
|
@ -264,7 +272,7 @@ async fn download_ffmpeg(
|
|||
download: &Download,
|
||||
variant_data: VariantData,
|
||||
subtitle: Option<StreamSubtitle>,
|
||||
target: &Path,
|
||||
mut target: PathBuf,
|
||||
) -> Result<()> {
|
||||
let (input_presets, mut output_presets) =
|
||||
FFmpegPreset::ffmpeg_presets(download.ffmpeg_preset.clone())?;
|
||||
|
|
@ -276,12 +284,6 @@ async fn download_ffmpeg(
|
|||
}
|
||||
}
|
||||
|
||||
if let Some(ext) = target.extension() {
|
||||
if ext.to_string_lossy() != "mp4" && subtitle.is_some() {
|
||||
warn!("Detected a non mp4 output container. Adding subtitles may take a while")
|
||||
}
|
||||
}
|
||||
|
||||
let mut video_file = tempfile(".ts")?;
|
||||
download_segments(ctx, &mut video_file, None, variant_data).await?;
|
||||
let subtitle_file = if let Some(ref sub) = subtitle {
|
||||
|
|
@ -291,11 +293,22 @@ async fn download_ffmpeg(
|
|||
None
|
||||
};
|
||||
|
||||
let subtitle_preset = if let Some(sub_file) = &subtitle_file {
|
||||
let stdout_tempfile = if target.to_string_lossy() == "-" {
|
||||
let file = tempfile(".mp4")?;
|
||||
target = file.path().to_path_buf();
|
||||
|
||||
Some(file)
|
||||
} else {
|
||||
None
|
||||
};
|
||||
|
||||
let subtitle_presets = if let Some(sub_file) = &subtitle_file {
|
||||
if target.extension().unwrap_or_default().to_string_lossy() == "mp4" {
|
||||
vec![
|
||||
"-i".to_string(),
|
||||
sub_file.to_string_lossy().to_string(),
|
||||
"-movflags".to_string(),
|
||||
"faststart".to_string(),
|
||||
"-c:s".to_string(),
|
||||
"mov_text".to_string(),
|
||||
"-disposition:s:s:0".to_string(),
|
||||
|
|
@ -331,7 +344,7 @@ async fn download_ffmpeg(
|
|||
.arg("-y")
|
||||
.args(input_presets)
|
||||
.args(["-i", video_file.path().to_string_lossy().as_ref()])
|
||||
.args(subtitle_preset)
|
||||
.args(subtitle_presets)
|
||||
.args(output_presets)
|
||||
.arg(target.to_str().unwrap())
|
||||
.spawn()?;
|
||||
|
|
@ -340,6 +353,12 @@ async fn download_ffmpeg(
|
|||
ffmpeg.wait()?;
|
||||
info!("Output file generated");
|
||||
|
||||
if let Some(mut stdout_file) = stdout_tempfile {
|
||||
let mut stdout = std::io::stdout();
|
||||
|
||||
std::io::copy(&mut stdout_file, &mut stdout)?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue