M: what would the ffmpeg settings (and multipass methodology, if called for) require to encode a personal dvd rip to the 1080p quality used by the YTS or YIFY groups online? they seem to know what they're doing and i'd like to stick my copy of yakuza apocalypse on my personal streaming box.
G: To encode a personal DVD rip to
YTS/YIFY-style 1080p quality using ffmpeg,
you’ll want to mimic their style of high compression at decent
quality. This typically involves:
ffmpeg -y -i input.vob -vf "scale=1920:1080" \
-c:v libx264 -preset slow -b:v 2000k -pass 1 -an \
-f mp4 /dev/null-preset slow: good balance of speed and quality.-b:v 2000k: target average bitrate; adjust as
needed.-an: skip audio on 1st pass.-f mp4 /dev/null: discard output for first pass.ffmpeg -i input.vob -vf "scale=1920:1080" \
-c:v libx264 -preset slow -b:v 2000k -pass 2 \
-c:a aac -b:a 128k -movflags +faststart output.mp4-movflags +faststart: enables web streaming (important
for your streaming box).-c:a aac -b:a 128k: good enough audio for DVD
sources.Many YIFY encodes now use CRF instead of 2-pass because it’s faster and quality-adaptive.
ffmpeg -i input.vob -vf "scale=1920:1080" \
-c:v libx264 -preset slow -crf 20 \
-c:a aac -b:a 128k -movflags +faststart output.mp4-preset slow or -preset slower
if you're patient.| Feature | Add this to ffmpeg |
|---|---|
| Subtitles (hardcoded) | -vf "subtitles=input.srt" |
| Deinterlace | -vf "yadif" |
| HQ scaling | -vf "scale=1920:1080:flags=lanczos" |
| Better audio | -c:a aac -b:a 192k |
| Keep stereo only | -ac 2 |
ffmpeg -i input.vob -vf "yadif,scale=1920:1080:flags=lanczos,subtitles=movie.srt" \
-c:v libx264 -preset slow -crf 20 \
-c:a aac -b:a 128k -movflags +faststart yakuza_apocalypse_1080p.mp4| Feature | Recommendation |
|---|---|
| Resolution | 1080p, upscale if needed |
| Bitrate | ~2000 kbps or CRF 20–21 |
| Codec (video) | H.264 (x264) |
| Codec (audio) | AAC 128–192 kbps |
| Passes | 2-pass for filesize targeting or CRF for speed |
| Output | .mp4, with faststart |
| File Size Goal | 1.5–2.0 GB for 90–120 mins |
Let me know if you want a version specifically tailored to your Yakuza Apocalypse rip's actual specs.
M: assume it's larger that 720; i've got a copy of spaceballs as well on bluray.
G: Perfect—if you're working with Blu-ray sources (like Spaceballs) or DVD rips that are already 720p+, you're now in HD preservation mode, not SD upscaling. In that case, we aim for:
ffmpeg -i input.mkv \
-vf "scale=-2:1080" \
-c:v libx264 -preset slow -crf 20 \
-c:a aac -b:a 128k -ac 2 \
-movflags +faststart \
spaceballs_1080p_ytsstyle.mp4| Option | Meaning |
|---|---|
scale=-2:1080 |
Downscale height to 1080, auto-calculate width (must be multiple of 2) |
-crf 20 |
Target visual quality (lower = better/larger, 18–22 sweet spot) |
-preset slow |
Slower = better compression; use medium if you’re
impatient |
-c:a aac -b:a 128k |
YIFY-style stereo audio (up it to 192k if desired) |
-movflags +faststart |
Enables fast seeking/streaming |
-ac 2 |
Force stereo if source has more channels (YIFY typically does this) |
Use this if you're trying to hit a target size like 1.5 GB for ~95 minutes:
ffmpeg -y -i input.mkv -vf "scale=-2:1080" \
-c:v libx264 -preset slow -b:v 1800k -pass 1 -an \
-f mp4 /dev/nullffmpeg -i input.mkv -vf "scale=-2:1080" \
-c:v libx264 -preset slow -b:v 1800k -pass 2 \
-c:a aac -b:a 128k -ac 2 -movflags +faststart \
spaceballs_1080p_ytsstyle.mp4
1800kis just an example; tweak based on runtime and target file size.
To hit a specific size (e.g. 1.5 GB), use this formula:
target_bitrate_kbps = ((file_size_MB * 8192) / duration_seconds) - audio_bitrate_kbps
Example for 95 mins (5700s):
((1500 * 8192) / 5700) - 128 ≈ 2035 kbps for video-c:a aac -b:a 384k-c:a aac -b:a 192k -ac 2.srt):
-vf "subtitles=subs.srt"-map 0 -c:s mov_text| Feature | YIFY Recommendation |
|---|---|
| Resolution | 1080p max |
| Video codec | H.264 (libx264), CRF 20–22 |
| Audio codec | AAC (stereo 128–192k) or 5.1 (384k) |
| Preset | Slow or slower for best compression |
| Format | MP4 with +faststart |
| File size goal | ~1.5–2.5 GB for 90–120 min |
| Subtitle style | Often baked-in or soft .srt |
Let me know if you'd like to automate batch encoding or retain chapter markers.
M: will this method maintain any chapters or subtitles or other metadata from a container file? and can it work directly from a bluray mounted up on an external drive?
G: Excellent questions. Let's address both clearly:
By default, the basic ffmpeg commands I
gave do not retain chapters or internal metadata, and
only retain subtitles if hardcoded (burned in) or
explicitly extracted.
To retain everything (or selectively), you must:
-map and -c copy (for lossless copy of
streams you’re keeping)Example to keep:
ffmpeg -i input.mkv \
-map 0 \
-c:v libx264 -crf 20 -preset slow \
-c:a aac -b:a 128k \
-c:s mov_text \
-movflags +faststart \
spaceballs_1080p_withsubs.mp4Notes:
-map 0: include all streams (video, audio, subtitles,
chapters).-c:s mov_text: re-encode subtitles to MP4-compatible
format (required for softsubs).If you want full metadata (like title, language tags, chapters), MKV is a better target format:
ffmpeg -i input.mkv \
-map 0 \
-c:v libx264 -crf 20 -preset slow \
-c:a aac -b:a 128k \
-c:s copy \
spaceballs_1080p.mkvThis:
Yes—you can encode directly from a mounted Blu-ray disc (or ISO), assuming the disc is decrypted.
.m2ts files or generate an MKV.libaacs and libbdplus with
appropriate decryption keys on Linux (complex, not always
reliable).ffmpeg -i /path/to/BDMV/STREAM/00001.m2ts \
-vf "scale=-2:1080" \
-c:v libx264 -preset slow -crf 20 \
-c:a aac -b:a 192k \
-movflags +faststart \
spaceballs_1080p.mp4But:
.m2ts files don’t contain global chapters or softsubs;
these are stored elsewhere in the disc structure.So, the best practical method is:
Use MakeMKV to rip the movie:
.mkv with chapters, subtitles, all audio
tracks.Use FFmpeg to transcode that
.mkv:
ffmpeg -i movie.mkv \
-map 0 \
-c:v libx264 -crf 20 -preset slow \
-c:a aac -b:a 128k \
-c:s mov_text \
-movflags +faststart \
movie_1080p.mp4If targeting MP4 and softsubs are problematic, either hardcode subtitles or switch to MKV output to preserve all features.
| Question | Answer |
|---|---|
| Retain subtitles? | Yes, use -map 0 -c:s mov_text (MP4) or
-c:s copy (MKV) |
| Retain chapters and metadata? | Yes, but only if you use -map 0 and output to MKV or
ensure MP4 supports it |
| Can you encode directly from BD? | Yes, if decrypted—use .m2ts or rip to
.mkv via MakeMKV for best compatibility |
| Best method? | Rip with MakeMKV → Encode with ffmpeg → Output to MP4 or MKV depending on your needs |
Let me know your platform and whether you prefer MP4 or MKV, and I’ll tailor the command even more specifically.
M: please answer that again for the 2-pass version
G: Certainly. Here's the full answer tailored specifically for 2-pass encoding, while ensuring you retain subtitles, chapters, and metadata wherever possible.
You want to:
.mkv.Assume you're working from a .mkv or .m2ts
that already contains the full stream set.
ffmpeg -y -i input.mkv \
-map 0 \
-vf "scale=-2:1080" \
-c:v libx264 -b:v 1800k -preset slow -pass 1 \
-an -f mp4 /dev/null-map 0: includes all streams (video,
audio, subtitles, chapters).-vf scale=-2:1080: scales to 1080p while preserving
correct aspect ratio (width auto-adjusted).-an: no audio in pass 1.-f mp4 /dev/null: discard output.ffmpeg -i input.mkv \
-map 0 \
-vf "scale=-2:1080" \
-c:v libx264 -b:v 1800k -preset slow -pass 2 \
-c:a aac -b:a 128k -ac 2 \
-c:s mov_text \
-movflags +faststart \
spaceballs_1080p_ytsstyle.mp4| Flag | Purpose |
|---|---|
-map 0 |
Includes all metadata and stream types (subs, chapters, tags) |
-c:s mov_text |
Converts subs to MP4-compatible softsubs (for
.mp4 container) |
-movflags +faststart |
Web-optimized header placement for fast seeking |
-ac 2 |
Downmix to stereo (YIFY-style) |
-vf "scale=-2:1080,subtitles=input.mkv"That replaces the previous -vf, and you omit
-c:s.
Use this if you want full softsubs + chapters with better compatibility:
ffmpeg -i input.mkv \
-map 0 \
-vf "scale=-2:1080" \
-c:v libx264 -b:v 1800k -preset slow -pass 2 \
-c:a aac -b:a 128k -ac 2 \
-c:s copy \
spaceballs_1080p_ytsstyle.mkv-c:s copy: Keeps original subtitles unchanged
(e.g., PGS, SRT).If your Blu-ray is:
.m2ts file (usually largest one in
BDMV/STREAM/)Then yes—you can 2-pass encode directly:
ffmpeg -y -i /mnt/blu-ray/BDMV/STREAM/00001.m2ts \
-vf "scale=-2:1080" \
-c:v libx264 -b:v 1800k -preset slow -pass 1 \
-an -f mp4 /dev/nullThen:
ffmpeg -i /mnt/blu-ray/BDMV/STREAM/00001.m2ts \
-vf "scale=-2:1080" \
-c:v libx264 -b:v 1800k -preset slow -pass 2 \
-c:a aac -b:a 128k -ac 2 \
-movflags +faststart \
spaceballs_1080p.mp4📛 But:
.m2tsfiles do not include global chapters or subtitle tracks in an easy way. You're better off ripping to.mkvwith MakeMKV first.
| Feature | Use This |
|---|---|
| Retain subs & chapters (MP4) | -map 0 -c:s mov_text |
| Retain all metadata (MKV) | -map 0 -c:s copy |
| Burn-in subtitles | -vf "scale=-2:1080,subtitles=..." |
| From decrypted Blu-ray | Yes, but better via MakeMKV → MKV → ffmpeg |
| Output compatibility | MP4 for devices, MKV for richer features |
Let me know your source file type, desired container (MP4/MKV), and subtitle needs, and I’ll write you an exact command.
M: oookay, you just gave me something to chew on... i didn't know there were non-text subtitles available at this point. that leads to two questions: 1, what are the bmp limitations? 2, are we getting to the point where you can have, like, a sing-along subtitle movie yet? like, something not really more complex than an animated gif?
G: Great—you're touching on a really rich topic here. Let's split your two questions up and tackle them cleanly.
On Blu-ray discs, the subtitles are often stored as bitmap images, not text. The most common format is PGS (Presentation Graphic Stream).
These are:
| Limitation | Explanation |
|---|---|
| 🧱 Not editable | They're images—so you can't correct typos or restyle easily. |
| 🔍 Not searchable/selectable | You can't copy/paste or search subtitle text. |
| 🎯 Positioning is fixed | You can’t reposition them (e.g., move from bottom to top). |
| 🔥 Can’t animate | PGS is static per-frame—no movement, no transitions. |
| 💾 Harder to compress | Larger than text subs in file size. |
| ⚙️ Some players don’t support them | Especially browser-based players or hardware streamers. |
Short answer: Yes — but only in certain formats and environments.
You’re talking about something like:
| Format | Supports animation? | Notes |
|---|---|---|
| ASS (.ass) | ✅ Yes | Very powerful—timed karaoke, motion, colors, fade-in/out, transforms |
| SSA | ⚠️ Limited | Predecessor to ASS, supports styles but limited animation |
| SRT | ❌ No | Plain text, no styling beyond timing |
| PGS | ❌ Not really | Can emulate some effects by pre-rendering bitmaps, but no real animation |
| WebVTT | ⚠️ Basic styling | No animation per se, but can interact with JavaScript+CSS in browsers |
.assDialogue: 0,0:00:01.00,0:00:03.00,Default,,0,0,0,,{\k50}Some {\k50}body {\k100}once {\k100}told {\k100}me...
This creates a progressive karaoke highlight effect in players like mpv or VLC.
You can do:
Think of it like CSS meets subtitles.
| Goal | Possible Method |
|---|---|
| Sing-along subtitle with glow | .ass subtitles (used with ffmpeg,
mpv, etc.) |
| Animated bouncing ball | Bake effect into video layer (not subtitles) |
| Karaoke with accurate timing | ffmpeg with .ass +
-vf ass=karaoke.ass |
| Browser-based singalong | Use WebVTT + JavaScript + CSS animation |
| Streamer-friendly karaoke | Burn .ass subs into video permanently |
ffmpeg -i input.mkv -vf "ass=karaoke.ass" \
-c:v libx264 -crf 20 -preset slow \
-c:a aac -b:a 128k \
out_with_karaoke.mp4This will burn the karaoke animation into the video, playable anywhere.
Let me know if you want to convert .srt into karaoke
.ass, or try to animate a sample subtitle file.
M: well, i've got a bit of time while i run a test first-pass; give me a good brief list of the ASS format's capacity and syntax, something like a cheat sheet. ... then give me an bit of history explaining why they went with an extension that's vaguely obscene.
G: Absolutely. Here's your ASS subtitle format cheat sheet, followed by a fun little history sidebar about that infamous extension.
ASS = Advanced SubStation Alpha, a powerful subtitle format capable of rich styling, positioning, and animation. It's the go-to for anime fansubs and karaoke.
[Script Info]
Title: Example
ScriptType: v4.00+
[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, ..., Bold, Italic, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,40,&H00FFFFFF,&H000000FF, ..., -1,0,1,1,0,2,10,10,10,1
[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:01.00,0:00:03.00,Default,,0,0,0,,Hello {\i1}world{\i0}!
Text field)| Tag | Effect | Example |
|---|---|---|
{\i1} / {\i0} |
Italic on/off | {\i1}italic{\i0} |
{\b1} / {\b0} |
Bold on/off | {\b1}bold |
{\u1} / {\u0} |
Underline | {\u1}underline |
{\fs40} |
Font size | {\fs24} |
{\c&HFF0000&} |
Primary color (BGR, hex) | Red |
{\1c&HFF0000&} |
Same as above (explicit layer) | |
{\pos(x,y)} |
Static position | {\pos(320,240)} |
{\move(x1,y1,x2,y2,start,end)} |
Animate movement | |
{\fade(a1,a2,a3,a4,a5,a6,a7)} |
Fade in/out (alpha) | |
{\an#} |
Alignment (1–9 like numpad) | {\an2} = top-center |
{\k50} |
Karaoke timing (50 centiseconds) | {\k30}Hi {\k40}there |
Styles are defined in [V4+ Styles] and referenced by
name in each dialogue line. You can predefine color, font, outline, and
alignment.
Common border styles:
1: Outline + shadow3: Opaque box background| Tag | Meaning |
|---|---|
{\k} |
Basic karaoke (non-syllable) timing |
{\kf} |
"Fill" effect, expands during the timing |
{\ko} |
Outline karaoke (less common) |
Used with specialized tools like Aegisub or scripting.
Style: Default,Arial,40,&H00FFFFFF,&H00000000,&H00000000,&H64000000,-1,0,0,1,2,2,2,10,10,10,1
This gives:
\an2)It’s not a joke. But... it became one.
.ass file on disk..ass)
plays into the joke. It used to describe itself as "a free,
cross-platform open source tool for editing ASS files," with full
awareness of the double meaning.{\k}, {\pos},
{\c} inside subtitle lines.If you want, I can throw together a few working samples with animated karaoke effects or show you how to use Aegisub to edit them visually.
M: explain further the karaoke timing effects and attributes. are they relative, absolute, or what?
G: Great follow-up. Karaoke effects
in the ASS format—using {\k}, {\kf}, and
{\ko}—are precisely timed subtitle
animation tools, primarily used in karaoke fansubs and sing-along
features. They break a single subtitle line into timed segments, where
each segment corresponds to a part of the text (often a syllable).
Let's dig deep and answer your core question: Are they
relative, absolute, or what?
The answer is: they’re relative, but within an absolute
window.
| Tag | Meaning |
|---|---|
{\kN} |
Basic karaoke. Highlights segment for N × 10ms (centiseconds) |
{\kfN} |
"Fill" karaoke. Fills left to right as it progresses |
{\koN} |
Outline karaoke. Animates only the outline (rarely used) |
All N values are in centiseconds (1/100th of a
second).
Each dialogue line has a start and end timestamp:
e.g., 0:01:00.00 to 0:01:08.00.
Inside that window, {\k} segments divide up the
total time in relative pieces.
Dialogue: 0,0:01:00.00,0:01:08.00,Default,,0,0,0,,{\k30}Some {\k40}body {\k50}once {\k60}told {\k70}me
\kN is a unit lasting N × 10ms.30 + 40 + 50 + 60 + 70 = 250 → 2.5
seconds0:01:00.00
to 0:01:08.00 (8 seconds total), but the highlight
animation runs for 2.5 seconds at the start, unless
overridden.So:
\k segments define a relative
timeline (like slicing a pie).| Time | Text rendered |
|---|---|
| 0:01:00 | “Some” appears and highlights for 0.3s |
| 0:01:00.3 | “body” appears and highlights for 0.4s |
| 0:01:00.7 | “once” appears and highlights for 0.5s |
| 0:01:01.2 | “told” appears and highlights for 0.6s |
| 0:01:01.8 | “me” appears and highlights for 0.7s |
| 0:01:02.5 → 0:01:08.0 | Full line remains visible (no animation) |
\k duration is shorter than line duration?Then only that early part gets the highlight
animation.
The line remains visible (unstyled) for the rest of its duration.
This is common: you might want 2–3 seconds of karaoke effect, but keep the lyrics visible for 6–8 seconds.
\kf and
\ko?{\kf} – Karaoke Fill:Same syntax:
Dialogue: 0,0:00:10.00,0:00:14.00,Default,,0,0,0,,{\kf20}Some {\kf20}body {\kf40}once {\kf20}told {\kf20}me
Total animation lasts 1.2 seconds.
{\ko} – Outline Only:\kf, but only affects the text
border, not fill color.| Feature | Answer |
|---|---|
\k, \kf, \ko values |
Relative within the line—each segment defines a piece of time |
| Anchor point | Absolute start time of the line (not global or overlapping) |
| Total animated time | Sum of all \kN → defines animation span from start
time |
| Display time | From line's start to end → may be longer than animation window |
\kN values fits the actual
song rhythm.Let me know if you want a live example with \k vs
\kf, or a sample file to tinker with.
M: okay, i'm poking at aegisub, and it's... not quite intuitive, but that's usually a backfilled idea once you understand it. but i'm having trouble figuring out how to time out the karaoke. where's that in the programe - if it exists at all
G: You're right—Aegisub can feel like using a spaceship dashboard when you just want to highlight some syllables. But once you find the karaoke tools, it becomes a powerhouse.
Here’s exactly how to find and use karaoke timing in Aegisub, step by step:
| pipe character.Example:
"Some|body|once|told|me"
You should see this in the Text field (not {\k} tags
yet).
You have two paths depending on what you want:
Use the Audio Timing tools to assign timing
visually to each | segment.
Load your audio:
.mp3, .wav, or .flac
file into Aegisub.Enable Karaoke Mode:
Ctrl+4 (or
View > Audio > Show Karaoke Mode).Select your subtitle line (with |
pipes).
Use mouse & keyboard to assign timing:
K to commit each boundary.Result: Aegisub will replace the
|with appropriate{\k}tags, auto-calculated based on segment duration.
Once you’re happy, click away or hit Enter. You’ll now see something like:
{\k30}Some {\k40}body {\k50}once {\k60}told {\k70}me
Each number matches the segment's time (in 1/100th of a second).
The visual waveform editing is faster and more
accurate than trying to guess durations or manually assign
{\k} tags.
Make sure:
| characters to divide
syllables (Aegisub uses these as karaoke boundaries).Audio > Spectrum Display for better syllable
visualization (looks like Audacity’s spectral view).| Step | Action |
|---|---|
| 1 | Load audio into Aegisub |
| 2 | Add ` |
| 3 | Enable Karaoke Mode (Ctrl+4 or
Audio > Karaoke Mode) |
| 4 | Select the line, and visually assign time to each syllable |
| 5 | Press K to confirm splits, Enter to save |
Would you like a small .ass file with karaoke already
done so you can reverse-engineer it? I can provide a line or two of
sample timing if that helps.
M: okay, here's a question - with the two pass version of the reencoding, does there have to be a pipe or something? where does the info from the first pass go?
G: Excellent and very practical
question. The magic of 2-pass encoding in
ffmpeg lies in how it handles the pass
data—and no pipe is needed. Here's how it
works:
During the first pass, ffmpeg creates a
log file (usually called
ffmpeg2pass-0.log) and possibly an additional
.log.mbtree file. These contain:
These are saved in your current working directory on disk, not streamed through a pipe.
/dev/null or NUL
on Windows)..log file(s)
and uses that data to intelligently allocate bitrate—keeping high motion
scenes high quality, and compressing static ones more.Unless otherwise specified with -passlogfile, ffmpeg
will generate:
ffmpeg2pass-0.logffmpeg2pass-0.log.mbtree (if applicable, for certain
rate-control modes)These files are overwritten if reused, so use
-passlogfile if doing multiple 2-pass encodes in the same
folder.
# First pass
ffmpeg -i input.mkv -pass 1 -passlogfile mymovie -c:v libx264 -b:v 1800k -an -f mp4 /dev/null
# Second pass
ffmpeg -i input.mkv -pass 2 -passlogfile mymovie -c:v libx264 -b:v 1800k -c:a aac -b:a 128k output.mp4This will write:
mymovie.logmymovie.log.mbtreeAfter the second pass, you can safely delete the .log
files—they aren’t used by the resulting video.
rm ffmpeg2pass-0.log*Or:
rm mymovie.log*| Concept | Answer |
|---|---|
| Pipe required? | ❌ No, info is written to log files on disk |
| File name? | ffmpeg2pass-0.log by default |
| Custom path? | Use -passlogfile yourprefix |
| Can reuse logs? | No—each video needs its own log; they aren’t generic |
| Auto-cleanup? | ❌ Manual—ffmpeg won’t delete them |
Let me know if you're doing batch 2-pass encoding; I can give you a wrapper script that automates log handling.
M: can you 'downmix' complex ass files to standard subtitles? like, if i had a multilayer callback script all set up, what would aegisub spit out if it tried to export it as an srt or something
G: Yes, Aegisub can export
.ass subtitle files to .srt or
.ssa—but the process is essentially a
flattening of all the complex formatting. So if you're
working with a multilayer, styled, karaoke, or animated
callback-style ASS file, the export to
.srt will give you a much dumber,
stripped-down version.
.ass to .srt in
Aegisub?| Feature | Preserved in .srt? |
Notes |
|---|---|---|
| Font, color, size | ❌ Lost | .srt is plain text only |
Positioning (\pos) |
❌ Lost | .srt assumes bottom-center |
Alignment (\an) |
❌ Lost | No placement control |
Animations (\move, \fade,
\k) |
❌ Lost | No timing effects |
| Karaoke timing | ❌ Lost | Segments are merged |
| Multiple lines/layers | ⚠️ Only one line kept | Overlapping subtitles may be dropped |
Comments (Comment:) |
❌ Ignored entirely | .srt has no comments |
Tag formatting ({\...}) |
❌ Stripped | All tags removed as plain text |
| Element | Preserved |
|---|---|
| Dialogue timing | ✅ Yes |
Line breaks (\N) |
✅ Yes |
| Text content (stripped) | ✅ Yes |
| Basic timing structure | ✅ Yes |
| Subtitle order | ✅ Yes (reindexed) |
.ass to .srtOriginal .ass Dialogue:
Dialogue: 0,0:00:01.00,0:00:05.00,Style1,,0,0,0,,{\pos(320,240)}{\k20}Hey! {\k30}This {\k40}is {\k20}karaoke!
Exported .srt line:
1
00:00:01,000 --> 00:00:05,000
Hey! This is karaoke!
Note: All formatting, positioning, and karaoke behavior is gone—just the flattened string remains.
.ass file..srtYes, if you're not going all the way to .srt, you can
also:
.ass with timing preserved.\k, \move, and other tags while
keeping position or font.This gives you an intermediate format—less
expressive than the original, but far more robust than
.srt.
| Question | Answer |
|---|---|
Can .ass export to .srt? |
✅ Yes, easily |
| Are formatting and animation retained? | ❌ No, all stripped |
| Is karaoke timing preserved? | ❌ Flattened into one text block |
| Is it useful for fallback/export? | ✅ If you want plain text subtitles |
| Can I pre-process to flatten first? | ✅ Yes, either manually or with a style-simplifier |
Would you like help writing a script that can strip styling but preserve karaoke timing as best as possible in plain text, for a “simplified” output format?
M: okay, so let's say i have an ass file with two layers - one of them has the line "I'm speaking a line, so you better not say anything." at 5 seconds to 10 seconds, and at 8 seconds to 12 on another layer, it says "I'm yelling over you!". in other situations, i'd've formatted it so that from 5 to 8, the first was visible, then 8 to 10 would show both, and 10 to 12 would just show the second (with a blank line to keep it positioned correctly). can it pull anything like this off?
G: You're describing one of the core strengths of the ASS subtitle format: layered dialogue with precise timing and screen positioning.
The short answer is:
✅ Yes, ASS can absolutely pull this off, and you don't even need to add a blank line—the format supports overlapping lines natively, with rendering order controlled via the Layer field.
Given your scenario:
You want:
| Time | Visible Lines |
|---|---|
| 5.0–8.0s | "I'm speaking..." |
| 8.0–10.0s | Both lines visible, layered |
| 10.0–12.0s | "I'm yelling over you!" |
[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
# Lower layer (visible first)
Dialogue: 0,0:00:05.00,0:00:10.00,Default,,0,0,0,,I'm speaking a line, so you better not say anything.
# Higher layer (appears later, overlaps)
Dialogue: 1,0:00:08.00,0:00:12.00,Yelling,,0,0,0,,I'm yelling over you!
The Layer field is the first number (
0,1, etc.). Higher values render on top.
You don’t need to insert a “blank” line after 10s to maintain
positioning. That trick is only necessary in formats like
.srt where only one line at a time is
supported.
| Time | On Screen |
|---|---|
| 5s | Speaker line appears |
| 8s | Yeller line appears on top |
| 10s | Speaker line disappears |
| 12s | Yeller line disappears |
No visual glitch. No blinking. Precise control.
Just use styles or tags like {\pos} or
{\an#} to fix one at the top and the other at the
bottom.
Example:
# Default style aligns bottom-center (\an2)
Dialogue: 0,0:00:05.00,0:00:10.00,Default,,0,0,0,,I'm speaking a line...
# Yelling style aligns top-center (\an8)
Dialogue: 1,0:00:08.00,0:00:12.00,Yelling,,0,0,0,,{\an8}I'm yelling over you!
Or use styles with fixed positioning, fonts, color, etc.
In SRT, this breaks completely:
| Question | Answer |
|---|---|
| Can ASS display two overlapping lines? | ✅ Yes |
| Can it control which one appears on top? | ✅ Yes, with Layer field |
| Do I need to insert blanks for timing gaps? | ❌ Not in ASS |
| Can I control position per line? | ✅ With styles or \an/\pos tags |
Will this work in .srt? |
❌ Not without hacks or merging |
If you give me the actual lines and timing, I can generate a full
.ass snippet with styles for visual testing.
M: oh, i know it can - i'm talking about downmixing to srt. can aegisub handle it, or am i damned to hand-merging
G: Ah, got it now—you’re asking:
🧨 Can Aegisub automatically downmix overlapping, layered ASS subtitles into a coherent
.srtfile where both lines are preserved with timing adjusted or merged?
❌ No. Aegisub will not resolve overlapping lines intelligently when exporting to
.srt.
It will:
You are indeed damned to hand-merging if you want
something clean and readable in .srt.
Given your ASS file:
Dialogue: 0,0:00:05.00,0:00:10.00,Default,,0,0,0,,I'm speaking a line...
Dialogue: 1,0:00:08.00,0:00:12.00,Yelling,,0,0,0,,I'm yelling over you!
Export to .srt will result in
either:
Before exporting:
\N or merge text into one block.Example merged dialogue:
Dialogue: 0,0:00:08.00,0:00:10.00,Default,,0,0,0,,I'm speaking a line...\NI'm yelling over you!
Then export to .srt. You’ll get:
1
00:00:08,000 --> 00:00:10,000
I'm speaking a line...
I'm yelling over you!
This works but is manual labor or requires scripting.
Subtitle Edit (Windows, but runs under Wine/Mono too) can:
.ass.srt with better controlStill semi-manual, but more guided.
If you want to automate this in Python or similar:
.srt entries.srtI can help you write a prototype if you want.
| Goal | Aegisub Can Do It? | Notes |
|---|---|---|
Export ASS to plain .srt |
✅ | Strips styles, no logic |
| Handle layered/overlapping dialogue automatically | ❌ | You must flatten it first |
| Combine lines during export | ❌ | Must pre-merge |
| Use Subtitle Edit for assisted merging | ⚠️ | Semi-manual |
| Fully automate the downmixing? | ⚠️ With a script | Custom parser required |
Let me know if you'd like help building a script to automate the merging or flattening process. You're definitely not the first to wish this problem were solved better.
M: side question: pokemon shuffle mobile, porygon2: is there a trick to that stage? it should be stage 297.
G: Here’s what I found about Pokemon Shuffle Mobile Stage 297 (Porygon2)—it’s actually a fixed-layout puzzle stage, meaning you must use a specific sequence of moves to clear it, not rely on random matches or your Pokémon lineup.
According to a German puzzle walkthrough, this stage can be completed in exactly 5 moves, regardless of the Pokémon selected citeturn0search12.
If executed correctly, these moves will clear the puzzle, removing all obstacles and enabling S‑Rank completion citeturn0search12.
Another approach shared on GameFAQs breaks it down in chessboard-style coordinates (columns A‑F left‑to‑right, rows 1‑6 top‑to‑bottom):
This sequence also removes the metal blocks, and is reportedly robust against disruptions like Barrier Bash+ citeturn0search3.
| Approach | Moves | Notes |
|---|---|---|
| Bisafans Puzzle | C3→B2, C3→C2, D4→D3, B5→B4, E4→E5 | Fixed 5-move solution, puzzle-clear style |
| GameFAQs | C5→B5, C5→C2, D5→E5, B5→D4, B5→C4 | Also clears stage; more resilient to disruptions |
Let me know which one matches your experience—or if neither lines up with your layout, I can help dig deeper or look for a visual reference.