From ba1c0aaaa408da6ea5b39230b85cf6bc95720f4b Mon Sep 17 00:00:00 2001 From: ByteDream Date: Thu, 23 Mar 2023 13:39:05 +0100 Subject: [PATCH] Enable stdout output --- crunchy-cli-core/src/archive/command.rs | 1 + crunchy-cli-core/src/download/filter.rs | 12 +++++++++--- crunchy-cli-core/src/utils/download.rs | 7 ++++++- crunchy-cli-core/src/utils/format.rs | 8 ++++---- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/crunchy-cli-core/src/archive/command.rs b/crunchy-cli-core/src/archive/command.rs index 3583996..46aafda 100644 --- a/crunchy-cli-core/src/archive/command.rs +++ b/crunchy-cli-core/src/archive/command.rs @@ -108,6 +108,7 @@ impl Execute for Archive { .to_string_lossy() != "mkv" && !is_special_file(PathBuf::from(&self.output)) + && self.output != "-" { bail!("File extension is not '.mkv'. Currently only matroska / '.mkv' files are supported") } diff --git a/crunchy-cli-core/src/download/filter.rs b/crunchy-cli-core/src/download/filter.rs index 81b8fa9..382eec5 100644 --- a/crunchy-cli-core/src/download/filter.rs +++ b/crunchy-cli-core/src/download/filter.rs @@ -333,9 +333,15 @@ impl Filter for DownloadFilter { .total_cmp(&b.format.sequence_number) }); for data in input { - let mut downloader = DownloadBuilder::new() - .default_subtitle(self.download.subtitle.clone()) - .build(); + let mut download_builder = + DownloadBuilder::new().default_subtitle(self.download.subtitle.clone()); + // set the output format to mpegts / mpeg transport stream if the output file is stdout. + // mp4 isn't used here as the output file must be readable which isn't possible when + // writing to stdout + if self.download.output == "-" { + download_builder = download_builder.output_format(Some("mpegts".to_string())) + } + let mut downloader = download_builder.build(); downloader.add_format(DownloadFormat { video: (data.video, data.format.audio.clone()), audios: vec![(data.audio, data.format.audio.clone())], diff --git a/crunchy-cli-core/src/utils/download.rs b/crunchy-cli-core/src/utils/download.rs index ce0c443..397d60f 100644 --- a/crunchy-cli-core/src/utils/download.rs +++ b/crunchy-cli-core/src/utils/download.rs @@ -317,7 +317,12 @@ impl Downloader { let progress_handler = progress!("Generating output file"); let ffmpeg = Command::new("ffmpeg") - .stdout(Stdio::null()) + // pass ffmpeg stdout to real stdout only if output file is stdout + .stdout(if dst.to_str().unwrap() == "-" { + Stdio::inherit() + } else { + Stdio::null() + }) .stderr(Stdio::piped()) .args(command_args) .output()?; diff --git a/crunchy-cli-core/src/utils/format.rs b/crunchy-cli-core/src/utils/format.rs index 15acc85..8c7283a 100644 --- a/crunchy-cli-core/src/utils/format.rs +++ b/crunchy-cli-core/src/utils/format.rs @@ -223,12 +223,12 @@ impl Format { pub fn visual_output(&self, dst: &Path) { info!( - "Downloading {} to '{}'", + "Downloading {} to {}", self.title, - if is_special_file(&dst) { - dst.to_str().unwrap() + if is_special_file(&dst) || dst.to_str().unwrap() == "-" { + dst.to_string_lossy().to_string() } else { - dst.file_name().unwrap().to_str().unwrap() + format!("'{}'", dst.to_str().unwrap()) } ); tab_info!(