diff --git a/crates/ec-node/src/main.rs b/crates/ec-node/src/main.rs index b4b68b3..3b1be70 100644 --- a/crates/ec-node/src/main.rs +++ b/crates/ec-node/src/main.rs @@ -6312,6 +6312,10 @@ async fn wt_publish(args: WtPublishArgs) -> Result<()> { if args.transcode { cmd.args([ + "-map", + "0:v:0", + "-map", + "0:a:0?", "-c:v", "libx264", "-preset", @@ -6332,8 +6336,10 @@ async fn wt_publish(args: WtPublishArgs) -> Result<()> { "1", "-c:a", "aac", + "-profile:a", + "aac_low", "-b:a", - "128k", + "160k", "-ac", "2", "-ar", diff --git a/evolution/proposals/ECP-0077-explicit-aac-transcode-profile.md b/evolution/proposals/ECP-0077-explicit-aac-transcode-profile.md new file mode 100644 index 0000000..fd22aaf --- /dev/null +++ b/evolution/proposals/ECP-0077-explicit-aac-transcode-profile.md @@ -0,0 +1,27 @@ +# ECP-0077: Explicit AAC-LC Live Audio Profile In `wt-publish` + +## Context + +Live OTA inputs expose multiple AC-3 audio tracks (5.1 + stereo language variants). Browser watcher behavior is more stable when the published relay stream has a single explicit AAC-LC stereo track shape. + +## Decision + +In `ec-node wt-publish` transcode mode, force explicit stream mapping and AAC profile: + +- `-map 0:v:0` +- `-map 0:a:0?` +- `-c:a aac` +- `-profile:a aac_low` +- `-b:a 160k` +- `-ac 2` +- `-ar 48000` + +## Rationale + +- Removes ambiguity from ffmpeg auto stream selection when multiple audio tracks exist. +- Keeps audio encoding browser-friendly and deterministic. +- Preserves optional audio behavior (`0:a:0?`) for edge cases where input temporarily lacks audio. + +## Reversibility + +- Revert to ffmpeg auto mapping/profile by removing explicit `-map` and `-profile:a` flags.