fix: conditionally disable audio track merging

This commit is contained in:
uku 2025-05-19 19:24:11 +02:00
parent 0475c52529
commit dd2616f0e5
Signed by: uku
SSH key fingerprint: SHA256:4P0aN6M8ajKukNi6aPOaX0LacanGYtlfjmN+m/sHY/o
2 changed files with 30 additions and 13 deletions

View file

@ -94,6 +94,7 @@ struct Tyrolienne {
step: Step,
progress: usize,
total: usize,
can_merge: bool,
video_path: Option<PathBuf>,
out_filename: Option<String>,
out_codec: ffmpeg::Codec,
@ -116,7 +117,7 @@ impl Tyrolienne {
config: self.config.clone(),
out_filename: self.out_filename.clone(),
out_codec: self.out_codec,
merge_tracks: self.merge_tracks,
merge_tracks: self.can_merge && self.merge_tracks,
video_path: self.video_path.clone(),
folder: self.folder.clone(),
}
@ -190,7 +191,10 @@ impl AsyncComponent for Tyrolienne {
adw::SwitchRow {
set_title: "Merge audio tracks",
set_active: true,
#[watch]
set_sensitive: model.can_merge,
#[watch]
set_active: model.can_merge && model.merge_tracks,
connect_active_notify[sender] => move |s| sender.input(Message::SetMergeTracks(s.is_active())),
},
@ -246,6 +250,7 @@ impl AsyncComponent for Tyrolienne {
step: Step::Waiting,
progress: 0,
total: 1,
can_merge: false,
video_path: None,
out_filename: None,
out_codec: ffmpeg::Codec::VP9,
@ -306,6 +311,8 @@ impl AsyncComponent for Tyrolienne {
.await;
if let Some(file) = file {
let meta = ffmpeg::get_video_meta(file.path()).await;
self.can_merge = meta.map(|m| m.audio_streams == 2).unwrap_or(false);
self.video_path = Some(file.path().to_owned());
}
}