diff --git a/CHANGELOG.md b/CHANGELOG.md index c180497..4db76cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # Unreleased (0.8.1) * Support negative `--preset` args. * Add `--vmaf-fps`: Frame rate override used to analyse both reference & distorted videos. +* Omit data streams when outputting to matroska (.mkv or .webm). * mpeg2video: map `--crf` to ffmpeg `-q` and set default crf range to 2-30. # v0.8.0 diff --git a/src/ffmpeg.rs b/src/ffmpeg.rs index 5352017..bb2dcad 100644 --- a/src/ffmpeg.rs +++ b/src/ffmpeg.rs @@ -132,8 +132,8 @@ pub fn encode( let output_ext = output.extension().and_then(|e| e.to_str()); let add_faststart = output_ext == Some("mp4") && !oargs.contains("-movflags"); - let add_cues_to_front = - matches!(output_ext, Some("mkv") | Some("webm")) && !oargs.contains("-cues_to_front"); + let matroska = matches!(output_ext, Some("mkv") | Some("webm")); + let add_cues_to_front = matroska && !oargs.contains("-cues_to_front"); let audio_codec = audio_codec.unwrap_or(if downmix_to_stereo && has_audio { "libopus" @@ -163,6 +163,7 @@ pub fn encode( .arg2_opt("-vf", vfilter) .arg2("-c:s", "copy") .arg2("-c:a", audio_codec) + .arg_if(matroska, "-dn") // "Only audio, video, and subtitles are supported for Matroska" .arg2_if(downmix_to_stereo, "-ac", 2) .arg2_if(set_ba_128k, "-b:a", "128k") .arg2_if(add_faststart, "-movflags", "+faststart") diff --git a/src/process.rs b/src/process.rs index 9bca974..9a3ab14 100644 --- a/src/process.rs +++ b/src/process.rs @@ -283,6 +283,9 @@ pub trait CommandExt { /// Adds two arguments if `condition` otherwise noop. fn arg2_if(&mut self, condition: bool, a: impl ArgString, b: impl ArgString) -> &mut Self; + /// Adds an argument if `condition` otherwise noop. + fn arg_if(&mut self, condition: bool, a: impl ArgString) -> &mut Self; + /// Convert to readable shell-like string. fn to_cmd_str(&self) -> String; } @@ -305,6 +308,13 @@ impl CommandExt for tokio::process::Command { } } + fn arg_if(&mut self, condition: bool, a: impl ArgString) -> &mut Self { + match condition { + true => self.arg(a.arg_string()), + false => self, + } + } + fn to_cmd_str(&self) -> String { let cmd = self.as_std(); cmd.get_args().map(|a| a.to_string_lossy()).fold(