Description
This might be a bit of an edge case here...
When playing a 4K HDR video that's cropped to 2.4:1 (3840x1600), with ASS subtitles being processed on ExoPlayer (NOT transcoded), the subtitles appear to be stretched along the Y-axis, vertically stretching lower subtitles, and pushing upper subtitles out of the video frame completely. This only seems to happen after the first subtitle is displayed, which looks fine. Every subsequent subtitle displayed has this issue. Everything else about the video is fine though.
Additional info found during debugging:
- Setting "Video Scale" during playback to anything but "Fit" (i.e. Fill, Crop, etc) seems to cause the subtitles to display properly relative to the video, even though the video itself is now stretched.
- Switching from ExoPlayer to MPV for playback does not play HDR, but subtitles display and render perfectly.
- Switching from libass to ExoPlayer built-in causes positions to work just fine, but custom fonts are not loaded.
Other media experimentation:
- ASS subtitles on normal 16:9 FHD video (1920x1080) display just fine.
- ASS subtitles on cropped 2.4:1 non-HD FHD video (1920x800) also behave the same way.
- ASS subtitles on vertically-cropped FHD video (1440x1080) display just fine.
I'm happy to give any additional information that would be helpful.
Please keep up the good work! This app is fantastic ❤️
Experimental settings
No
Player backend
ExoPlayer (default)
Media info
General
Unique ID : 69545383899306956889506242532542820188 (0x3451F427F2B0326A1BDDD8AF442CAF5C)
Complete name : Belle (2021).mkv
Format : Matroska
Format version : Version 4
File size : 13.0 GiB
Duration : 2 h 1 min
Overall bit rate mode : Variable
Overall bit rate : 15.3 Mb/s
Frame rate : 23.976 FPS
Movie name : Belle (2021)
Encoded date : 2025-10-19 07:55:46 UTC
Writing application : mkvmerge v82.0 ('I'm The President') 64-bit
Writing library : libebml v1.4.5 + libmatroska v1.7.1
Cover : Yes
Attachments : BriosoPro-Italic.otf / DSGabriele - Copy.ttf / GANDHISANS-BOLD.OTF / GandhiSans-BoldItalic.otf / nyala.ttf / YaldeviColombo-Bold.ttf / arial.ttf / AtomicAge-Regular.ttf / Bilbo-Regular.ttf / cover.jpg
IMDB : tt13651628
TMDB : movie/776305
Video
ID : 1
Format : HEVC
Format/Info : High Efficiency Video Coding
Format profile : Main 10@L5@Main
HDR format : Dolby Vision, Version 1.0, Profile 8.1, dvhe.08.06, BL+RPU, HDR10 compatible / SMPTE ST 2086, Version HDR10, HDR10 compatible
Codec ID : V_MPEGH/ISO/HEVC
Duration : 2 h 1 min
Bit rate : 3 614 kb/s
Width : 3 840 pixels
Height : 1 600 pixels
Display aspect ratio : 2.40:1
Frame rate mode : Constant
Frame rate : 23.976 (24000/1001) FPS
Color space : YUV
Chroma subsampling : 4:2:0
Bit depth : 10 bits
Bits/(Pixel*Frame) : 0.025
Stream size : 3.06 GiB (24%)
Writing library : x265 3.5+1-f0c1022b6:[Linux][GCC 13.2.0][64 bit] 10bit
Encoding settings : cpuid=1111039 / frame-threads=3 / wpp / no-pmode / no-pme / no-psnr / no-ssim / log-level=2 / input-csp=1 / input-res=3840x1600 / interlace=0 / total-frames=0 / level-idc=0 / high-tier=1 / uhd-bd=0 / ref=5 / no-allow-non-conformance / repeat-headers / annexb / aud / hrd / info / hash=0 / no-temporal-layers / open-gop / min-keyint=23 / keyint=250 / gop-lookahead=0 / bframes=8 / b-adapt=2 / b-pyramid / bframe-bias=0 / rc-lookahead=40 / lookahead-slices=0 / scenecut=40 / hist-scenecut=0 / radl=0 / no-splice / no-intra-refresh / ctu=64 / min-cu-size=8 / rect / amp / max-tu-size=32 / tu-inter-depth=3 / tu-intra-depth=3 / limit-tu=4 / rdoq-level=2 / dynamic-rd=0.00 / no-ssim-rd / signhide / no-tskip / nr-intra=0 / nr-inter=0 / no-constrained-intra / strong-intra-smoothing / max-merge=4 / limit-refs=1 / limit-modes / me=3 / subme=4 / merange=57 / temporal-mvp / no-frame-dup / no-hme / weightp / weightb / no-analyze-src-pics / deblock=0:0 / sao / no-sao-non-deblock / rd=6 / selective-sao=4 / no-early-skip / rskip / no-fast-intra / no-tskip-fast / no-cu-lossless / b-intra / no-splitrd-skip / rdpenalty=0 / psy-rd=3.00 / psy-rdoq=5.00 / no-rd-refine / no-lossless / cbqpoffs=0 / crqpoffs=0 / rc=crf / crf=24.0 / qcomp=0.70 / qpstep=4 / stats-write=0 / stats-read=0 / vbv-maxrate=20000 / vbv-bufsize=20000 / vbv-init=0.9 / min-vbv-fullness=50.0 / max-vbv-fullness=80.0 / crf-max=0.0 / crf-min=0.0 / ipratio=1.40 / pbratio=1.30 / aq-mode=2 / aq-strength=1.00 / cutree / zone-count=0 / no-strict-cbr / qg-size=32 / no-rc-grain / qpmax=69 / qpmin=0 / no-const-vbv / sar=1 / overscan=0 / videoformat=5 / range=0 / colorprim=9 / transfer=16 / colormatrix=9 / chromaloc=0 / display-window=0 / master-display=G(8500,39850)B(6550,2300)R(35400,14600)WP(15635,16450)L(10000000,1) / cll=250,99 / min-luma=0 / max-luma=1023 / log2-max-poc-lsb=8 / vui-timing-info / vui-hrd-info / slices=1 / no-opt-qp-pps / no-opt-ref-list-length-pps / no-multi-pass-opt-rps / scenecut-bias=0.05 / hist-threshold=0.03 / no-opt-cu-delta-qp / no-aq-motion / hdr10 / no-hdr10-opt / no-dhdr10-opt / no-idr-recovery-sei / analysis-reuse-level=0 / analysis-save-reuse-level=0 / analysis-load-reuse-level=0 / scale-factor=0 / refine-intra=0 / refine-inter=0 / refine-mv=1 / refine-ctu-distortion=0 / no-limit-sao / ctu-info=0 / no-lowpass-dct / refine-analysis-type=0 / copy-pic=1 / max-ausize-factor=1.0 / no-dynamic-refine / no-single-sei / no-hevc-aq / no-svt / no-field / qp-adaptation-range=1.00 / scenecut-aware-qp=0conformance-window-offsets / right=0 / bottom=0 / decoder-max-rate=0 / no-vbv-live-multi-pass
Language : Japanese
Default : Yes
Forced : No
Color range : Limited
Color primaries : BT.2020
Transfer characteristics : PQ
Matrix coefficients : BT.2020 non-constant
Mastering display color primaries : BT.2020
Mastering display luminance : min: 0.0001 cd/m2, max: 1000 cd/m2
Maximum Content Light Level : 250 cd/m2
Maximum Frame-Average Light Level : 99 cd/m2
Audio #1
ID : 2
Format : MLP FBA 16-ch
Format/Info : Meridian Lossless Packing FBA with 16-channel presentation
Commercial name : Dolby TrueHD with Dolby Atmos
Codec ID : A_TRUEHD
Duration : 2 h 1 min
Bit rate mode : Variable
Bit rate : 7 209 kb/s
Maximum bit rate : 14.1 Mb/s
Channel(s) : 8 channels
Channel layout : L R C LFE Ls Rs Lb Rb
Sampling rate : 48.0 kHz
Frame rate : 1 200.000 FPS (40 SPF)
Compression mode : Lossless
Delay relative to video : 1 ms
Stream size : 6.10 GiB (47%)
Language : Japanese
Default : Yes
Forced : No
Number of dynamic objects : 15
Bed channel count : 1 channel
Bed channel configuration : LFE
Audio #2
ID : 3
Format : MLP FBA 16-ch
Format/Info : Meridian Lossless Packing FBA with 16-channel presentation
Commercial name : Dolby TrueHD with Dolby Atmos
Codec ID : A_TRUEHD
Duration : 2 h 1 min
Bit rate mode : Variable
Bit rate : 4 256 kb/s
Maximum bit rate : 7 533 kb/s
Channel(s) : 8 channels
Channel layout : L R C LFE Ls Rs Lb Rb
Sampling rate : 48.0 kHz
Frame rate : 1 200.000 FPS (40 SPF)
Compression mode : Lossless
Delay relative to video : 1 ms
Stream size : 3.60 GiB (28%)
Language : English
Default : No
Forced : No
Number of dynamic objects : 11
Bed channel count : 1 channel
Bed channel configuration : LFE
Text #1
ID : 4
Format : ASS
Codec ID : S_TEXT/ASS
Codec ID/Info : Advanced Sub Station Alpha
Duration : 1 h 56 min
Bit rate : 148 b/s
Frame rate : 0.235 FPS
Count of elements : 1646
Compression mode : Lossless
Stream size : 127 KiB (0%)
Title : Full Subs [GSK_kun]
Language : English
Default : Yes
Forced : No
Text #2
ID : 5
Format : ASS
Codec ID : S_TEXT/ASS
Codec ID/Info : Advanced Sub Station Alpha
Duration : 1 h 56 min
Bit rate : 50 b/s
Frame rate : 0.036 FPS
Count of elements : 251
Compression mode : Lossless
Stream size : 42.7 KiB (0%)
Title : Signs/Songs [GSK_kun]
Language : English
Default : No
Forced : Yes
Text #3
ID : 6
Format : PGS
Muxing mode : zlib
Codec ID : S_HDMV/PGS
Codec ID/Info : Picture based subtitle format used on BDs/HD-DVDs
Duration : 2 h 0 min
Bit rate : 23.4 kb/s
Frame rate : 0.389 FPS
Count of elements : 2824
Stream size : 20.2 MiB (0%)
Title : Full Subs [BDRip]
Language : English
Default : No
Forced : No
Text #4
ID : 7
Format : PGS
Muxing mode : zlib
Codec ID : S_HDMV/PGS
Codec ID/Info : Picture based subtitle format used on BDs/HD-DVDs
Duration : 2 h 0 min
Bit rate : 27.5 kb/s
Frame rate : 0.410 FPS
Count of elements : 2966
Stream size : 23.8 MiB (0%)
Title : Full Subs SDH [BDRip]
Language : English
Default : No
Forced : No
Text #5
ID : 8
Format : PGS
Muxing mode : zlib
Codec ID : S_HDMV/PGS
Codec ID/Info : Picture based subtitle format used on BDs/HD-DVDs
Duration : 1 h 58 min
Bit rate : 38.1 kb/s
Frame rate : 0.607 FPS
Count of elements : 4328
Stream size : 32.4 MiB (0%)
Title : English Dub SDH [BDRip]
Language : English
Default : No
Forced : No
Text #6
ID : 9
Format : PGS
Muxing mode : zlib
Codec ID : S_HDMV/PGS
Codec ID/Info : Picture based subtitle format used on BDs/HD-DVDs
Duration : 2 h 0 min
Bit rate : 26.6 kb/s
Frame rate : 0.405 FPS
Count of elements : 2932
Stream size : 22.9 MiB (0%)
Title : Cantonese Traditional
Language : Cantonese (Hant)
Default : No
Forced : No
Text #7
ID : 10
Format : PGS
Muxing mode : zlib
Codec ID : S_HDMV/PGS
Codec ID/Info : Picture based subtitle format used on BDs/HD-DVDs
Duration : 2 h 0 min
Bit rate : 26.4 kb/s
Frame rate : 0.434 FPS
Count of elements : 3152
Stream size : 22.9 MiB (0%)
Language : French
Default : No
Forced : No
Text #8
ID : 11
Format : PGS
Muxing mode : zlib
Codec ID : S_HDMV/PGS
Codec ID/Info : Picture based subtitle format used on BDs/HD-DVDs
Duration : 2 h 1 min
Bit rate : 28.0 kb/s
Frame rate : 0.384 FPS
Count of elements : 2788
Stream size : 24.3 MiB (0%)
Language : German
Default : Yes
Forced : No
Text #9
ID : 12
Format : PGS
Muxing mode : zlib
Codec ID : S_HDMV/PGS
Codec ID/Info : Picture based subtitle format used on BDs/HD-DVDs
Duration : 1 h 56 min
Bit rate : 47.9 kb/s
Frame rate : 0.439 FPS
Count of elements : 3077
Stream size : 40.0 MiB (0%)
Language : Italian
Default : Yes
Forced : No
Text #10
ID : 13
Format : PGS
Muxing mode : zlib
Codec ID : S_HDMV/PGS
Codec ID/Info : Picture based subtitle format used on BDs/HD-DVDs
Duration : 1 h 56 min
Bit rate : 35.1 kb/s
Frame rate : 0.475 FPS
Count of elements : 3327
Stream size : 29.3 MiB (0%)
Language : Japanese
Default : Yes
Forced : No
Text #11
ID : 14
Format : PGS
Muxing mode : zlib
Codec ID : S_HDMV/PGS
Codec ID/Info : Picture based subtitle format used on BDs/HD-DVDs
Duration : 2 h 0 min
Bit rate : 23.5 kb/s
Frame rate : 0.375 FPS
Count of elements : 2716
Stream size : 20.3 MiB (0%)
Title : Latin American
Language : Spanish (Latin America)
Default : Yes
Forced : No
Menu
00:00:00.000 : U
00:04:27.267 : Belle
00:12:20.114 : On the Bridge
00:18:09.463 : In Bed
00:21:03.637 : Who is Belle?
00:27:12.005 : The Beast
00:34:41.454 : Research
00:42:35.928 : The Castle
00:47:46.238 : By the Water
00:56:26.758 : Harassed
01:10:19.590 : Conversations
01:16:41.972 : Who is the Beast?
01:29:23.733 : Performance
01:43:49.598 : Analysis
01:46:00.729 : Bus Trip
01:54:41.583 : End Credits
App Version
v1.0.2
Server Version
10.11.11
Device
NVIDIA Shield 2015
Logs
Description
This might be a bit of an edge case here...
When playing a 4K HDR video that's cropped to 2.4:1 (3840x1600), with ASS subtitles being processed on ExoPlayer (NOT transcoded), the subtitles appear to be stretched along the Y-axis, vertically stretching lower subtitles, and pushing upper subtitles out of the video frame completely. This only seems to happen after the first subtitle is displayed, which looks fine. Every subsequent subtitle displayed has this issue. Everything else about the video is fine though.
Additional info found during debugging:
Other media experimentation:
I'm happy to give any additional information that would be helpful.
Please keep up the good work! This app is fantastic ❤️
Experimental settings
No
Player backend
ExoPlayer (default)
Media info
App Version
v1.0.2
Server Version
10.11.11
Device
NVIDIA Shield 2015
Logs