diff --git a/assets/ffplayout.yml b/assets/ffplayout.yml index 0c264f8b..aedbc527 100644 --- a/assets/ffplayout.yml +++ b/assets/ffplayout.yml @@ -62,10 +62,10 @@ processing: is needed, format is 'width:height', for example '100:-1' for proportional scaling. With 'logo_opacity' logo can become transparent. With 'audio_tracks' it is possible to configure how many audio tracks should be processed. 'audio_channels' - can be use, if audio has more channels then only stereo. With 'logo_filter' - 'overlay=W-w-12:12' you can modify the logo position. With 'custom_filter' - it is possible, to apply further filters. The filter outputs should end with - [c_v_out] for video filter, and [c_a_out] for audio filter. + can be use, if audio has more channels then only stereo. With 'logo_position' in format + 'x:y' you set the logo position. With 'custom_filter' it is possible, to apply further + filters. The filter outputs should end with [c_v_out] for video filter, and + [c_a_out] for audio filter. mode: playlist audio_only: false copy_audio: false @@ -78,7 +78,7 @@ processing: logo: /usr/share/ffplayout/logo.png logo_scale: logo_opacity: 0.7 - logo_filter: overlay=W-w-12:12 + logo_position: W-w-12:12 audio_tracks: 1 audio_track_index: -1 audio_channels: 2 diff --git a/lib/src/filter/mod.rs b/lib/src/filter/mod.rs index 289026d9..26b50ae8 100644 --- a/lib/src/filter/mod.rs +++ b/lib/src/filter/mod.rs @@ -314,7 +314,7 @@ fn fade(node: &mut Media, chain: &mut Filters, nr: i32, filter_type: FilterType) if node.seek > 0.0 || node.unit == Ingest { let fade_in = match &ADVANCED_CONFIG.decoder.filters.fade_in { - Some(fade) => custom_format(fade, &[t]), + Some(fade) => custom_format(&format!("{t}{fade}"), &[t]), None => format!("{t}fade=in:st=0:d=0.5"), }; @@ -323,7 +323,10 @@ fn fade(node: &mut Media, chain: &mut Filters, nr: i32, filter_type: FilterType) if (node.out != node.duration && node.out - node.seek > 1.0) || fade_audio { let fade_out = match &ADVANCED_CONFIG.decoder.filters.fade_out { - Some(fade) => custom_format(fade, &[t, &(node.out - node.seek - 1.0).to_string()]), + Some(fade) => custom_format( + &format!("{t}{fade}"), + &[t, &(node.out - node.seek - 1.0).to_string()], + ), None => format!("{t}fade=out:st={}:d=1.0", (node.out - node.seek - 1.0)), }; @@ -350,11 +353,11 @@ fn overlay(node: &mut Media, chain: &mut Filters, config: &PlayoutConfig) { &config.processing.logo.replace('\\', "/").replace(':', "\\\\:"), &config.processing.logo_opacity.to_string(), &scale.to_string(), - &config.processing.logo_filter, + &config.processing.logo_position, ]), None => format!( - "null[v];movie={}:loop=0,setpts=N/(FRAME_RATE*TB),format=rgba,colorchannelmixer=aa={}{scale}[l];[v][l]{}:shortest=1", - config.processing.logo.replace('\\', "/").replace(':', "\\\\:"), config.processing.logo_opacity, config.processing.logo_filter + "null[v];movie={}:loop=0,setpts=N/(FRAME_RATE*TB),format=rgba,colorchannelmixer=aa={}{scale}[l];[v][l]overlay={}:shortest=1", + config.processing.logo.replace('\\', "/").replace(':', "\\\\:"), config.processing.logo_opacity, config.processing.logo_position ) }; diff --git a/lib/src/utils/config.rs b/lib/src/utils/config.rs index 997b7286..4e881550 100644 --- a/lib/src/utils/config.rs +++ b/lib/src/utils/config.rs @@ -253,7 +253,7 @@ pub struct Processing { pub logo: String, pub logo_scale: String, pub logo_opacity: f32, - pub logo_filter: String, + pub logo_position: String, #[serde(default = "default_tracks")] pub audio_tracks: i32, #[serde(default = "default_channels")] @@ -435,10 +435,6 @@ impl PlayoutConfig { } else if config.processing.copy_video { process_cmd.append(&mut vec_strings!["-c:v", "copy"]); } else if let Some(decoder_cmd) = &ADVANCED_CONFIG.decoder.output_cmd { - if !decoder_cmd.contains(&"-r".to_string()) { - process_cmd.append(&mut vec_strings!["-r", &config.processing.fps]); - } - process_cmd.append(&mut decoder_cmd.clone()); } else { let bitrate = format!(