-
-
Notifications
You must be signed in to change notification settings - Fork 1
Examples Remux
Complete working configurations for real cases. Each recipe gives the situation, the exact WebUI settings, what to expect, and the CLI equivalent.
Every one of these assumes you have read Remux Mode. Fields not mentioned are left at their defaults.
Throughout, Source is the release you are keeping and Language is the release you are taking tracks from.
The most common job. Two releases of the same season, same edit, and you want the good video with the Italian audio added.
| Field | Value |
|---|---|
| Source | /media/Series.ENG |
| Language | /media/Series.ITA |
| Destination | /media/out |
| Target language | ita |
| Match pattern | S(\d+)E(\d+) |
Everything else off. No analysis, no conversion, pure remux.
Expect: each output has the English video, all original English audio and subtitles, plus the Italian audio and subtitle tracks. Check FINAL RESULT in the detail panel lists both languages. Processing is fast, roughly disk speed.
RemuxForge.Cli --mode remux -s "/media/Series.ENG" -l "/media/Series.ITA" -t ita -d "/media/out"You already have the audio you want; you just need a subtitle track from another release.
| Field | Value |
|---|---|
| Source | /media/Series |
| Language | /media/Series.SUBS |
| Destination | /media/out |
| Target language | ita |
| Subtitles only | on |
Expect: audio is untouched on both sides. Only Italian subtitle tracks are added.
RemuxForge.Cli --mode remux -s "/media/Series" -l "/media/Series.SUBS" -t ita -d "/media/out" -soSymptom: audio is fine at the start and progressively drifts, seconds off by the end of the episode. One release is a 25 fps PAL transfer, the other is 23.976.
| Field | Value |
|---|---|
| Speed | Source 23.976 - Lang 25 |
| Audio format | FLAC |
| Audio scope | Lang |
The preset converts the Language timeline to the Source timeline. The inverse case uses Source 25 - Lang 23.976. Frame rates help choose the initial preset; they are not used to infer a ratio automatically, so telecined, bobbed and variable-frame-rate inputs remain supported when their timeline ratio is known.
Audio format and scope are required whenever speed correction runs with imported Language audio: the stretch is materialised by FFmpeg onto those tracks. FLAC keeps it lossless.
Expect: the Stretch column shows the factor, and the detail panel reports audio stretch materialized. The video is not re-encoded. Verify by listening near the end of the episode: a wrong factor still sounds correct for the first minute.
RemuxForge.Cli --mode remux -s "/media/EN" -l "/media/IT" -t ita -d "/media/out" \
--speed-correction manual --stretch-factor 1001/960 \
--audio-format flac --audio-scope langSymptom: audio is out by a fixed amount for the whole episode. One release starts with a distributor logo the other lacks.
| Field | Value |
|---|---|
| Frame-sync (visual comparison) | on |
Expect: analysis takes a while (it decodes frames from both files). The detail panel then reports:
Frame-sync: applied
Frame-sync offset: -1042
Confidence: 0.94
Checkpoints: 6/7 valid
The Delay column fills with the offset. Treat confidence below ~0.7 as suspect, spot-check that episode by ear, and see recipe 5 if the drift is not actually constant.
RemuxForge.Cli --mode remux -s "/media/EN" -l "/media/IT" -t ita -d "/media/out" -fsSymptom: audio syncs for a while, then goes wrong, then comes back. One release has scenes the other does not: a TV cut against a home-video cut, a different opening, a missing recap.
Frame-sync cannot fix this. It produces one number and the required offset changes mid-file.
| Field | Value |
|---|---|
| Deep analysis (full analysis) | on |
| Audio format | FLAC |
| Audio scope | Lang |
Why the audio format: Deep analysis rebuilds the imported audio onto the corrected timeline, so it requires a format and a scope of Lang or All whenever Language audio is imported. The requirement applies to the whole batch, including episodes whose analysis produces no operations. FLAC keeps it lossless.
Expect: analysis is slow. The Deep column shows the operation count and the detail panel lists them:
Deep analysis: applied
Edit operations: 3
Cut src 00:01:30.000 duration 22.5s
Insert src 00:12:04.100 duration 8.0s
If it reports 0 operations and a constant delay, Frame-sync would have produced the same result in far less time, and without re-encoding the audio.
RemuxForge.Cli --mode remux -s "/media/EN" -l "/media/IT" -t ita -d "/media/out" \
-da --audio-format flac --audio-scope langExtends recipe 5. The Italian release is missing the original opening entirely, so the imported dub has nothing to cover the first 90 seconds and you would get silence there.
| Field | Value |
|---|---|
| Deep analysis | on |
| Audio format | FLAC |
| Audio scope | Lang |
| Audio source fill | on |
| Threshold | 500 |
| Source language | eng |
| Mode |
Start + Insert silence
|
Expect: where the dub does not cover the timeline and the gap exceeds 500 ms, the English audio from the Source is spliced in instead of silence. AUDIO PROCESSING in the detail panel reports source-fill with the segments used, or source-fill configured, no fill above threshold if nothing qualified.
Note that imported subtitles are not concatenated: they keep their calculated delay.
Threshold is a judgement call: too low and you splice at inaudible gaps, too high and real holes go unfilled. 100–500 ms is sensible.
RemuxForge.Cli --mode remux -s "/media/EN" -l "/media/IT" -t ita -d "/media/out" \
-da --audio-format flac --audio-scope lang \
--audio-source-fill-threshold-ms 500 --audio-source-fill-language eng \
--audio-source-fill-modes start,insert-silenceThe source has six audio tracks and twelve subtitle languages. The required result is Japanese audio, the imported Italian, and Italian and English subtitles only.
| Field | Value |
|---|---|
| Target language | ita |
| Keep audio | jpn |
| Keep sub | ita,eng |
Expect: result audio = jpn + imported ita. Result subtitles = source ita, eng + imported ita.
Remember that empty means keep everything, not keep nothing. Leaving Keep audio blank here would carry all six source tracks through.
RemuxForge.Cli --mode remux -s "/media/Source" -l "/media/IT" -t ita -d "/media/out" \
-ksa jpn -kss ita,engThe donor release has both a DTS-HD MA track and a compatibility AC-3 track in your target language. You only want the lossless one.
| Field | Value |
|---|---|
| Target language | ita |
| Audio codec | DTS-HD MA |
Expect: only the DTS-HD MA Italian track is imported; the AC-3 one is ignored.
Two aliasing traps worth knowing:
- Bare
DTSmatches only the DTS core, not DTS-HD MA. UseDTS-HD MAfor MA specifically, orDTS-HDfor MA and HR together. -
ATMOSmatches both TrueHD and E-AC-3, since Atmos ships in either.
Full alias table in Codec and Language Reference.
RemuxForge.Cli --mode remux -s "/media/Source" -l "/media/IT" -t ita -d "/media/out" \
-ac "DTS-HD MA"Symptom: imported subtitles appear in the wrong position, or partly off screen. The donor is 720p and the source is 1080p, so the subtitle coordinate space does not match.
| Field | Value |
|---|---|
| Frame-sync | on |
| Rewrite subtitle canvas | on |
Frame-sync (or Deep analysis) is mandatory here. Canvas rewrite consumes the geometry that visual analysis produced; with neither enabled it is silently ignored with a warning in the log.
Expect: PGS, ASS/SSA and VobSub tracks get their geometry rewritten. Read the log: unsafe cases fall back to the untransformed track and only say so there. ASS with rotation or shear tags under non-uniform scaling is skipped, because a coordinate rewrite cannot preserve the intended transform.
Play the output to confirm. An unsafe case falls back to the untransformed track, so the output file list looks the same either way.
RemuxForge.Cli --mode remux -s "/media/1080p" -l "/media/720p" -t ita -d "/media/out" \
-fs --subtitle-canvas-rewriteThe scan matched nothing, or only some episodes. The filenames are not SxxExx.
| Filenames | Pattern | ID |
|---|---|---|
Bleach.12x08.mkv |
(\d+)x(\d+) |
12_08 |
Episode 366.mkv |
[Ee]p(?:isode)?[ ._-]?(\d+) |
366 |
366.mkv |
(\d{3}) |
366 |
[Group] Bleach - 366 [1080p].mkv |
- (\d+) |
366 |
Set Match pattern, press OK, press F5, and read the log counts. Scanning is cheap, iterate.
The gotcha: episode IDs are compared as strings. S12E08 yields 12_08 and S12E8 yields 12_8, which do not pair. If the two releases pad differently, either write a pattern that normalises it away or fix one side with Bulk Rename.
Also check the last pattern above: (\d{3}) applied to Bleach.1080p.366.mkv matches 108 before it ever reaches 366. Anchor on something distinctive.
RemuxForge.Cli --mode remux -s "/media/EN" -l "/media/IT" -t ita -d "/media/out" \
-m "[Ee]p(?:isode)?[ ._-]?(\d+)"The donor's dub is a 24-bit lossless track and you want to halve its size without audible loss.
| Field | Value |
|---|---|
| Target language | ita |
| Audio format | FLAC |
| Audio scope | Lang |
| 24bit -> 16bit | on |
The 24→16 toggle only appears with FLAC or LPCM and a scope other than Disabled.
Expect: the imported track is re-encoded to 16-bit FLAC using soxr at precision 28 with shibata noise-shaping dither. Source tracks are untouched because scope is Lang. AUDIO PROCESSING reports codec conversion.
FLAC compression level is set globally in Settings ▸ Audio (default 8).
RemuxForge.Cli --mode remux -s "/media/Source" -l "/media/IT" -t ita -d "/media/out" \
--audio-format flac --audio-scope lang --audio-24-to-16You want the merged result smaller, and you accept the quality cost and the hours.
First create the profile, Settings ▸ Encoding profiles ▸ [New] (Remux mode only):
| Field | Value |
|---|---|
| Name | hevc-slow-crf22 |
| Codec | libx265 |
| Preset | slow |
| Tune |
animation (or default) |
| Bit depth | 10-bit: yuv420p10le |
| Rate mode | crf |
| CRF | 22 |
Then in the configuration: Video encoding = hevc-slow-crf22.
Expect: each episode merges, then re-encodes. Status shows Encoding, and the detail panel reports the outcome:
ENCODING
Profile: hevc-slow-crf22
Size: 4.21 GB -> 2.05 GB (reduction 51%)
Run one episode with F9 first. Check the size, the time and the picture before committing a season. There is no hardware encoding. GPU support is limited to optional FFmpeg decode and Vulkan visual analysis.
RemuxForge.Cli --mode remux -s "/media/EN" -l "/media/IT" -t ita -d "/media/out" \
-ep hevc-slow-crf22No second release is involved; the job removes unwanted tracks from files that are already in place.
| Field | Value |
|---|---|
| Source | /media/Series |
| Language | (empty) |
| Destination | /media/out |
| Keep audio | jpn,ita |
| Keep sub | ita |
With Language empty, Source is used as the language folder too, so nothing new is imported and the Keep filters do the work.
Expect: outputs contain the original video, Japanese and Italian audio only, Italian subtitles only. Fast, a pure remux.
RemuxForge.Cli --mode remux -s "/media/Series" -t ita -d "/media/out" -ksa jpn,ita -kss itaFor when you have no spare disk space, or the files are already where you want them.
| Field | Value |
|---|---|
| Destination | (empty) |
| Overwrite source | on |
Expect: each source file is replaced by the result. The merge goes to a temporary file and is swapped in, so an interruption does not leave a corrupt file. But once it succeeds the original is gone.
Do this only after you have analysed the batch and read FINAL RESULT on several rows. Under Docker the media mount has to be :rw.
RemuxForge.Cli --mode remux -s "/media/Series" -l "/media/IT" -t ita -oThese are not exclusive. A realistic hard case might be recipes 5, 6, 7 and 11 at once: Deep analysis with source fill, keeping only the Japanese source audio, converting the imported dub to 16-bit FLAC.
Two constraints apply:
- Frame-sync and Deep analysis are mutually exclusive. Speed correction combines with either.
-
Audio source fill requires an audio format, a scope of
LangorAll, a threshold, a source language and at least one mode.
Analyze the files first and inspect the selected row's detail panel to confirm the planned result before processing.
- Remux Mode · Remux Synchronization · Remux Audio and Video
- CLI Reference: every flag used above, in full
- Troubleshooting