Roku Family HD All Subtitle Convert Audio Conform Profile¶
Generated from stock preset pack roku-family-all-sub-convert-audio-conform.
Dependencies¶
| Tool | Needed | Why |
|---|---|---|
ffmpeg |
required | scenario execution, encode/transcode, and mux packaging |
ffprobe |
required | criteria probing and stream/metadata inspection |
E2E Verification¶
This profile is considered e2e-verified when its mapped suites pass in CI.
| Suite | What it proves | Toolchain version report |
|---|---|---|
tests/e2e/run_profile_actions_e2e.sh |
action-level output behavior, guardrails, and subtitle-intent pathways | tests/e2e/.reports/latest/run_profile_actions_e2e_toolchain_versions.md |
- Combined toolchain snapshot: Latest E2E Toolchain Report
Input Envelope¶
| Field | Value |
|---|---|
| Codec | any |
| Bit depth | any |
| Color space | any |
| Min resolution | 352x240 |
| Max resolution | 1920x1080 |
Scenario Map¶
| Scenario | Command |
|---|---|
RES_JUST_RIGHT |
transcode_h264_1080_all_sub_convert_audio_conform_profile.sh |
ELSE |
profile_guardrail_skip.sh (profile guardrail skip) |
Runtime Behavior¶
- Scenario
RES_JUST_RIGHTuses action scripttranscode_h264_1080_all_sub_convert_audio_conform_profile.sh. - Scenario
ELSEuses action scriptprofile_guardrail_skip.sh.
Action summary from transcode_h264_1080_all_sub_convert_audio_conform_profile.sh:
- Default subtitle behavior is
all_sub_preserve + subtitle_convert. - Text subtitles are normalized into
mov_textwhen MP4 remains viable. - Bitmap subtitles fall back to MKV preservation by default.
- Preserves AAC and Dolby-family audio streams by default.
- Conforms DTS-family and PCM-family audio streams when needed.
- Preserved non-MP4-safe audio forces MKV output.
- Uses proper zscale+tonemap when available for HDR->SDR conversion.
- Falls back to an SDR-signaled compatibility transcode when tonemap filters are unavailable.
aggressive_vmafis supported for SDR reference inputs only; HDR/HLG inputs fall back to standard encode because this lane intentionally changes dynamic range.
Operator knobs from transcode_h264_1080_all_sub_convert_audio_conform_profile.sh:
VFO_ENCODER_MODE=auto|hw|cpuVFO_MP4_STREAM_MODE=fmp4_faststart|fmp4|faststartVFO_SUBTITLE_SELECTION_SCOPE=all_sub_preserveVFO_SUBTITLE_MODE=subtitle_convertVFO_SUBTITLE_CONVERT_BITMAP_POLICY=preserve_mkv|failVFO_QUALITY_MODE=standard|aggressive_vmafVFO_QUALITY_VMAF_MIN=94VFO_QUALITY_VMAF_MAX_PASSES=4
Starting Inputs And Expected Outputs¶
| Aspect | What this profile expects / does |
|---|---|
| Starting containers | mkv, mp4, mov, mxf (anything ffmpeg can demux) |
| Required codec envelope | any / any-bit / any |
| Required resolution range | 352x240 to 1920x1080 |
| If criteria do not match | candidate is routed to another profile or skipped |
| If criteria match | scenario order is evaluated and first match executes |
| Output intent | profile-specific output written by selected scenario command |
Flow¶
flowchart LR
classDef gate fill:#fff7ed,stroke:#f59e0b,color:#7c2d12,stroke-width:1.5px;
classDef stage fill:#e0f2fe,stroke:#0284c7,color:#0c4a6e,stroke-width:1.2px;
classDef output fill:#dcfce7,stroke:#16a34a,color:#14532d,stroke-width:1.2px;
classDef skip fill:#f3f4f6,stroke:#6b7280,color:#1f2937,stroke-width:1.2px;
A[Input candidate: mkv / mp4 / mov / mxf]:::stage --> B[Probe codec bits color resolution]:::stage
B --> C{Matches profile criteria envelope?}:::gate
C -->|No| Z[Handled by other profile or skipped]:::skip
C -->|Yes| D{Evaluate scenarios in order}:::gate
D --> E[First match: RES_JUST_RIGHT]:::stage
E --> F[Execute: transcode_h264_1080_all_sub_convert_audio_conform_profile.sh]:::stage
F --> G[Write profile output artifact]:::output
Source¶
- Preset file:
services/vfo/presets/roku-family-all-sub-convert-audio-conform/vfo_config.preset.conf - Generated by:
infra/scripts/generate-profile-docs.sh