mirror of
https://github.com/crunchy-labs/crunchy-cli.git
synced 2026-01-21 12:12: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 log::{debug, error, info, warn};
|
||||||
use std::borrow::Cow;
|
use std::borrow::Cow;
|
||||||
use std::io::Read;
|
use std::path::{Path, PathBuf};
|
||||||
use std::path::Path;
|
|
||||||
use std::process::{Command, Stdio};
|
use std::process::{Command, Stdio};
|
||||||
|
|
||||||
#[derive(Debug, clap::Parser)]
|
#[derive(Debug, clap::Parser)]
|
||||||
|
|
@ -93,10 +92,19 @@ impl Execute for Download {
|
||||||
.extension()
|
.extension()
|
||||||
.unwrap_or_default()
|
.unwrap_or_default()
|
||||||
.is_empty()
|
.is_empty()
|
||||||
|
&& self.output != "-"
|
||||||
{
|
{
|
||||||
bail!("No file extension found. Please specify a file extension (via `-o`) for the output file")
|
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())?;
|
let _ = FFmpegPreset::ffmpeg_presets(self.ffmpeg_preset.clone())?;
|
||||||
if self.ffmpeg_preset.len() == 1
|
if self.ffmpeg_preset.len() == 1
|
||||||
&& self.ffmpeg_preset.get(0).unwrap() == &FFmpegPreset::Nvidia
|
&& self.ffmpeg_preset.get(0).unwrap() == &FFmpegPreset::Nvidia
|
||||||
|
|
@ -249,7 +257,7 @@ impl Execute for Download {
|
||||||
&self,
|
&self,
|
||||||
format.stream,
|
format.stream,
|
||||||
format.subtitles.get(0).cloned(),
|
format.subtitles.get(0).cloned(),
|
||||||
path.as_path(),
|
path.to_path_buf(),
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
|
|
@ -264,7 +272,7 @@ async fn download_ffmpeg(
|
||||||
download: &Download,
|
download: &Download,
|
||||||
variant_data: VariantData,
|
variant_data: VariantData,
|
||||||
subtitle: Option<StreamSubtitle>,
|
subtitle: Option<StreamSubtitle>,
|
||||||
target: &Path,
|
mut target: PathBuf,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
let (input_presets, mut output_presets) =
|
let (input_presets, mut output_presets) =
|
||||||
FFmpegPreset::ffmpeg_presets(download.ffmpeg_preset.clone())?;
|
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")?;
|
let mut video_file = tempfile(".ts")?;
|
||||||
download_segments(ctx, &mut video_file, None, variant_data).await?;
|
download_segments(ctx, &mut video_file, None, variant_data).await?;
|
||||||
let subtitle_file = if let Some(ref sub) = subtitle {
|
let subtitle_file = if let Some(ref sub) = subtitle {
|
||||||
|
|
@ -291,11 +293,22 @@ async fn download_ffmpeg(
|
||||||
None
|
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" {
|
if target.extension().unwrap_or_default().to_string_lossy() == "mp4" {
|
||||||
vec![
|
vec![
|
||||||
"-i".to_string(),
|
"-i".to_string(),
|
||||||
sub_file.to_string_lossy().to_string(),
|
sub_file.to_string_lossy().to_string(),
|
||||||
|
"-movflags".to_string(),
|
||||||
|
"faststart".to_string(),
|
||||||
"-c:s".to_string(),
|
"-c:s".to_string(),
|
||||||
"mov_text".to_string(),
|
"mov_text".to_string(),
|
||||||
"-disposition:s:s:0".to_string(),
|
"-disposition:s:s:0".to_string(),
|
||||||
|
|
@ -331,7 +344,7 @@ async fn download_ffmpeg(
|
||||||
.arg("-y")
|
.arg("-y")
|
||||||
.args(input_presets)
|
.args(input_presets)
|
||||||
.args(["-i", video_file.path().to_string_lossy().as_ref()])
|
.args(["-i", video_file.path().to_string_lossy().as_ref()])
|
||||||
.args(subtitle_preset)
|
.args(subtitle_presets)
|
||||||
.args(output_presets)
|
.args(output_presets)
|
||||||
.arg(target.to_str().unwrap())
|
.arg(target.to_str().unwrap())
|
||||||
.spawn()?;
|
.spawn()?;
|
||||||
|
|
@ -340,6 +353,12 @@ async fn download_ffmpeg(
|
||||||
ffmpeg.wait()?;
|
ffmpeg.wait()?;
|
||||||
info!("Output file generated");
|
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(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue