Trickplay images not working - jelectric - 2025-06-16
When I view a tv show on the roku client, the trickplay images do not appear. I know they were generated by the server because they appear when using other clients. This only seems to happen with mpeg2-ts files because the roku is able to show trickplay images with videos encoded in other formats. I tried changing the tile size to 5x5 as I saw suggested on another thread but this did not help. Is this a limitation of the roku client with the ts container? Thanks for any help.
RE: Trickplay images not working - bitmap - 2025-06-16
I haven't tested changing tile size, however, I know that this isn't officially supported in the Roku client as of yet.
RE: Trickplay images not working - 1hitsong - 2025-06-16
The fun never ends with Roku! ™️
There are times the Roku device will add its own trickplay images. We have no way to prevent this.
To avoid showing two trickplay images overlapped on top of each other, we rely on a yes/no value from Roku that tells us if it's supplying its own trickplay images.
The fun thing is, sometimes Roku tells us YES! it is, but in reality it isn't 
We have no other way to know what Roku is doing, and if it's lying to us, we won't know.
The only other thing you can try is to force trickplay images by turning the force setting on. Essentially, you're telling the device to show the custom trickplay image no matter what. Just know, if Roku does provide its own at any point, they will overlap!
RE: Trickplay images not working - bitmap - 2025-06-16
(2025-06-16, 08:15 PM)1hitsong Wrote: The fun never ends with Roku! ™️
There are times the Roku device will add its own trickplay images. We have no way to prevent this.
To avoid showing two trickplay images overlapped on top of each other, we rely on a yes/no value from Roku that tells us if it's supplying its own trickplay images.
The fun thing is, sometimes Roku tells us YES! it is, but in reality it isn't 
We have no other way to know what Roku is doing, and if it's lying to us, we won't know.
The only other thing you can try is to force trickplay images by turning the force setting on. Essentially, you're telling the device to show the custom trickplay image no matter what. Just know, if Roku does provide its own at any point, they will overlap!
Developing for Roku sounds like a BLAST!
RE: Trickplay images not working - jelectric - 2025-06-17
(2025-06-16, 08:15 PM)1hitsong Wrote: The fun never ends with Roku! ™️
There are times the Roku device will add its own trickplay images. We have no way to prevent this.
To avoid showing two trickplay images overlapped on top of each other, we rely on a yes/no value from Roku that tells us if it's supplying its own trickplay images.
The fun thing is, sometimes Roku tells us YES! it is, but in reality it isn't 
We have no other way to know what Roku is doing, and if it's lying to us, we won't know.
The only other thing you can try is to force trickplay images by turning the force setting on. Essentially, you're telling the device to show the custom trickplay image no matter what. Just know, if Roku does provide its own at any point, they will overlap!
I have tried that setting before be unfortunately it still did not work. One thing that did get the trickplay images to appear was if I turned on forced transcoding. That is not a good solution for me though since I have a low performance server and I much rather be able to direct play.
Trickplay | Not working for some files - Comply7199 - 2025-06-23
I'm running the latest version of Jellyfin on a Windows 2019 server.
The server is a VM hosted on Proxmox.
I have an Arc a310 GPU and transcoding is working well.
I enabled trickplay for all my video libraries and the directories now contain the trickplay subdirectories.
My client is a Roku stick.
Trickplay is working well for some files - e.g. mp4.
I've noticed that it isn't working for some .mkv files.
I checked the server dashboard and it stated that the video is direct stream copy and the audio is being transcoded.
Is this a known issue?
Video codec = HVEC 1080P.
RE: Trickplay | Not working for some files - theguymadmax - 2025-06-24
Can you give the full media info for the files, and if there are any log errors?
RE: Trickplay | Not working for some files - Comply7199 - 2025-06-24
Sorry for the delay. I went to bed after creating the thread and I've been at work all day.
I've attached screenshot of the trickplay subdirectory.
Video file details:
Code: General
Complete name : E:\TV\videofile-(2025)-[tvdbid-xxxxxx]\videofile-(2025)-[tvdbid-xxxxxx]-S01\videofile S01E03 episodeName.mp4
Format : MPEG-4
Format profile : Base Media
Codec ID : isom (isom/dby1/iso2/mp41)
File size : 1.92 GiB
Duration : 47 min 13 s
Overall bit rate : 5 818 kb/s
Movie name : videofile S01E03 episodeName (UKB)
Writing application : Lavf61.7.100
Video
ID : 1
Format : HEVC
Format/Info : High Efficiency Video Coding
Format profile : Main 10@L4@Main
Codec ID : hev1
Codec ID/Info : High Efficiency Video Coding
Duration : 47 min 13 s
Bit rate : 5 172 kb/s
Width : 1 920 pixels
Height : 800 pixels
Display aspect ratio : 2.40:1
Frame rate mode : Variable
Frame rate : 23.976 (24000/1001) FPS
Minimum frame rate : 23.810 FPS
Maximum frame rate : 24.390 FPS
Color space : YUV
Chroma subsampling : 4:2:0
Bit depth : 10 bits
Bits/(Pixel*Frame) : 0.140
Stream size : 1.71 GiB (89%)
Writing library : x265 3.4+22-ga988fbbac:[Windows][GCC 10.2.0][64 bit] 10bit
Encoding settings : cpuid=1111039 / frame-threads=3 / numa-pools=8 / wpp / no-pmode / no-pme / no-psnr / no-ssim / log-level=2 / input-csp=1 / input-res=1920x800 / interlace=0 / total-frames=67939 / level-idc=0 / high-tier=1 / uhd-bd=0 / ref=3 / no-allow-non-conformance / no-repeat-headers / annexb / no-aud / no-hrd / info / hash=0 / no-temporal-layers / open-gop / min-keyint=24 / keyint=240 / gop-lookahead=0 / bframes=4 / b-adapt=2 / b-pyramid / bframe-bias=0 / rc-lookahead=20 / lookahead-slices=5 / scenecut=40 / hist-scenecut=0 / radl=0 / no-splice / no-intra-refresh / ctu=32 / min-cu-size=8 / no-rect / no-amp / max-tu-size=32 / tu-inter-depth=1 / tu-intra-depth=1 / limit-tu=0 / rdoq-level=0 / dynamic-rd=0.00 / no-ssim-rd / signhide / no-tskip / nr-intra=0 / nr-inter=0 / no-constrained-intra / strong-intra-smoothing / max-merge=3 / limit-refs=1 / no-limit-modes / me=1 / subme=2 / merange=25 / temporal-mvp / no-frame-dup / no-hme / weightp / no-weightb / no-analyze-src-pics / deblock=0:0 / sao / no-sao-non-deblock / rd=3 / selective-sao=4 / early-skip / rskip / no-fast-intra / no-tskip-fast / no-cu-lossless / b-intra / no-splitrd-skip / rdpenalty=0 / psy-rd=2.00 / psy-rdoq=0.00 / no-rd-refine / no-lossless / cbqpoffs=0 / crqpoffs=0 / rc=abr / bitrate=5271 / qcomp=0.60 / qpstep=4 / stats-write=0 / stats-read=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=1 / transfer=1 / colormatrix=1 / chromaloc=0 / display-window=0 / cll=0,0 / 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 / no-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 / no-scenecut-aware-qpconformance-window-offsets / right=0 / bottom=0 / decoder-max-rate=0
Color range : Limited
Color primaries : BT.709
Transfer characteristics : BT.709
Matrix coefficients : BT.709
mdhd_Duration : 2833622
Codec configuration box : hvcC
Audio
ID : 2
Format : E-AC-3
Format/Info : Enhanced AC-3
Commercial name : Dolby Digital Plus
Codec ID : ec-3
Duration : 47 min 13 s
Bit rate mode : Constant
Bit rate : 640 kb/s
Channel(s) : 6 channels
Channel layout : L R C LFE Ls Rs
Sampling rate : 48.0 kHz
Frame rate : 31.250 FPS (1536 SPF)
Compression mode : Lossy
Stream size : 216 MiB (11%)
Language : English
Service kind : Complete Main
Default : Yes
Alternate group : 1
Log file
Code: {"Protocol":0,"Id":"0017e57f03f3983471b468f550bcd75d","Path":"E:\\TV\\videofile-(2025)-[tvdbid-xxxxxx]\\videofile-(2025)-[tvdbid-xxxxxx]-S01\\videofile S01E03 episodeName.mp4","EncoderPath":null,"EncoderProtocol":null,"Type":0,"Container":"mov,mp4,m4a,3gp,3g2,mj2","Size":2060834716,"Name":"videofile S01E03 episodeName","IsRemote":false,"ETag":"1c407142f45725d4facded144d16fbab","RunTimeTicks":28336320000,"ReadAtNativeFramerate":false,"IgnoreDts":false,"IgnoreIndex":false,"GenPtsInput":false,"SupportsTranscoding":true,"SupportsDirectStream":true,"SupportsDirectPlay":true,"IsInfiniteStream":false,"UseMostCompatibleTranscodingProfile":false,"RequiresOpening":false,"OpenToken":null,"RequiresClosing":false,"LiveStreamId":null,"BufferMs":null,"RequiresLooping":false,"SupportsProbing":true,"VideoType":0,"IsoType":null,"Video3DFormat":null,"MediaStreams":[{"Codec":"subrip","CodecTag":null,"Language":null,"ColorRange":null,"ColorSpace":null,"ColorTransfer":null,"ColorPrimaries":null,"DvVersionMajor":null,"DvVersionMinor":null,"DvProfile":null,"DvLevel":null,"RpuPresentFlag":null,"ElPresentFlag":null,"BlPresentFlag":null,"DvBlSignalCompatibilityId":null,"Rotation":null,"Comment":null,"TimeBase":"1/1000","CodecTimeBase":null,"Title":null,"VideoRange":0,"VideoRangeType":0,"VideoDoViTitle":null,"AudioSpatialFormat":0,"LocalizedUndefined":"Undefined","LocalizedDefault":"Default","LocalizedForced":"Forced","LocalizedExternal":"External","LocalizedHearingImpaired":"Hearing Impaired","DisplayTitle":"Undefined - SUBRIP - External","NalLengthSize":null,"IsInterlaced":false,"IsAVC":false,"ChannelLayout":null,"BitRate":null,"BitDepth":null,"RefFrames":null,"PacketLength":null,"Channels":null,"SampleRate":null,"IsDefault":false,"IsForced":false,"IsHearingImpaired":false,"Height":0,"Width":0,"AverageFrameRate":null,"RealFrameRate":null,"ReferenceFrameRate":null,"Profile":null,"Type":2,"AspectRatio":null,"Index":0,"Score":null,"IsExternal":true,"DeliveryMethod":null,"DeliveryUrl":null,"IsExternalUrl":null,"IsTextSubtitleStream":true,"SupportsExternalStream":true,"Path":"E:\\TV\\videofile-(2025)-[tvdbid-xxxxxx]\\videofile-(2025)-[tvdbid-xxxxxx]-S01\\videofile S01E03 episodeName.srt","PixelFormat":null,"Level":0,"IsAnamorphic":null},{"Codec":"hevc","CodecTag":"hev1","Language":"und","ColorRange":null,"ColorSpace":"bt709","ColorTransfer":"bt709","ColorPrimaries":"bt709","DvVersionMajor":null,"DvVersionMinor":null,"DvProfile":null,"DvLevel":null,"RpuPresentFlag":null,"ElPresentFlag":null,"BlPresentFlag":null,"DvBlSignalCompatibilityId":null,"Rotation":null,"Comment":null,"TimeBase":"1/16000","CodecTimeBase":null,"Title":null,"VideoRange":1,"VideoRangeType":1,"VideoDoViTitle":null,"AudioSpatialFormat":0,"LocalizedUndefined":null,"LocalizedDefault":null,"LocalizedForced":null,"LocalizedExternal":null,"LocalizedHearingImpaired":null,"DisplayTitle":"1080p HEVC SDR","NalLengthSize":null,"IsInterlaced":false,"IsAVC":false,"ChannelLayout":null,"BitRate":5172295,"BitDepth":10,"RefFrames":1,"PacketLength":null,"Channels":null,"SampleRate":null,"IsDefault":true,"IsForced":false,"IsHearingImpaired":false,"Height":800,"Width":1920,"AverageFrameRate":23.976036,"RealFrameRate":23.976025,"ReferenceFrameRate":23.976036,"Profile":"Main 10","Type":1,"AspectRatio":"2.40:1","Index":1,"Score":null,"IsExternal":false,"DeliveryMethod":null,"DeliveryUrl":null,"IsExternalUrl":null,"IsTextSubtitleStream":false,"SupportsExternalStream":false,"Path":null,"PixelFormat":"yuv420p10le","Level":120,"IsAnamorphic":false},{"Codec":"eac3","CodecTag":"ec-3","Language":"eng","ColorRange":null,"ColorSpace":null,"ColorTransfer":null,"ColorPrimaries":null,"DvVersionMajor":null,"DvVersionMinor":null,"DvProfile":null,"DvLevel":null,"RpuPresentFlag":null,"ElPresentFlag":null,"BlPresentFlag":null,"DvBlSignalCompatibilityId":null,"Rotation":null,"Comment":null,"TimeBase":"1/48000","CodecTimeBase":null,"Title":null,"VideoRange":0,"VideoRangeType":0,"VideoDoViTitle":null,"AudioSpatialFormat":0,"LocalizedUndefined":null,"LocalizedDefault":"Default","LocalizedForced":null,"LocalizedExternal":"External","LocalizedHearingImpaired":null,"DisplayTitle":"English - Dolby Digital\u002B - 5.1 - Default","NalLengthSize":null,"IsInterlaced":false,"IsAVC":false,"ChannelLayout":"5.1","BitRate":640000,"BitDepth":null,"RefFrames":null,"PacketLength":null,"Channels":6,"SampleRate":48000,"IsDefault":true,"IsForced":false,"IsHearingImpaired":false,"Height":null,"Width":null,"AverageFrameRate":null,"RealFrameRate":null,"ReferenceFrameRate":null,"Profile":null,"Type":0,"AspectRatio":null,"Index":2,"Score":null,"IsExternal":false,"DeliveryMethod":null,"DeliveryUrl":null,"IsExternalUrl":null,"IsTextSubtitleStream":false,"SupportsExternalStream":false,"Path":null,"PixelFormat":null,"Level":0,"IsAnamorphic":null}],"MediaAttachments":[],"Formats":[],"Bitrate":5818214,"FallbackMaxStreamingBitrate":null,"Timestamp":null,"RequiredHttpHeaders":{},"TranscodingUrl":null,"TranscodingSubProtocol":0,"TranscodingContainer":null,"AnalyzeDurationMs":null,"DefaultAudioStreamIndex":null,"DefaultSubtitleStreamIndex":null,"HasSegments":false}
ffmpeg -analyzeduration 200M -probesize 1G -ss 00:06:06.500 -fflags +genpts -f mov,mp4,m4a,3gp,3g2,mj2 -i file:"E:\TV\videofile-(2025)-[tvdbid-xxxxxx]\videofile-(2025)-[tvdbid-xxxxxx]-S01\videofile S01E03 episodeName.mp4" -map_metadata -1 -map_chapters -1 -threads 0 -map 0:0 -map 0:1 -map -0:s -codec:v:0 copy -tag:v:0 hvc1 -bsf:v hevc_mp4toannexb -start_at_zero -codec:a:0 libmp3lame -ac 2 -ab 256000 -af "volume=2" -copyts -avoid_negative_ts disabled -max_muxing_queue_size 2048 -f hls -max_delay 5000000 -hls_time 6 -hls_segment_type mpegts -start_number 61 -hls_segment_filename "C:\ProgramData\Jellyfin\Server\cache\transcodes\5c4063bb130a7f6e1a8fd7c258e9d82f%d.ts" -hls_playlist_type vod -hls_list_size 0 -y "C:\ProgramData\Jellyfin\Server\cache\transcodes\5c4063bb130a7f6e1a8fd7c258e9d82f.m3u8"
ffmpeg version 7.0.2-Jellyfin Copyright (c) 2000-2024 the FFmpeg developers
built with clang version 19.1.7
configuration: --cc=clang --pkg-config-flags=--static --extra-cflags=-I/clang64/ffbuild/include --extra-ldflags=-L/clang64/ffbuild/lib --prefix=/clang64/ffbuild/jellyfin-ffmpeg --extra-version=Jellyfin --disable-ffplay --disable-debug --disable-doc --disable-sdl2 --disable-ptx-compression --enable-lto=thin --enable-gpl --enable-version3 --enable-schannel --enable-iconv --enable-libxml2 --enable-zlib --enable-lzma --enable-gmp --enable-chromaprint --enable-libfreetype --enable-libfribidi --enable-libfontconfig --enable-libharfbuzz --enable-libass --enable-libbluray --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libopenmpt --enable-libwebp --enable-libvpx --enable-libzimg --enable-libx264 --enable-libx265 --enable-libsvtav1 --enable-libdav1d --enable-libfdk-aac --enable-opencl --enable-dxva2 --enable-d3d11va --enable-d3d12va --enable-amf --enable-libvpl --enable-ffnvcodec --enable-cuda --enable-cuda-llvm --enable-cuvid --enable-nvdec --enable-nvenc
libavutil 59. 8.100 / 59. 8.100
libavcodec 61. 3.100 / 61. 3.100
libavformat 61. 1.100 / 61. 1.100
libavdevice 61. 1.100 / 61. 1.100
libavfilter 10. 1.100 / 10. 1.100
libswscale 8. 1.100 / 8. 1.100
libswresample 5. 1.100 / 5. 1.100
libpostproc 58. 1.100 / 58. 1.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'file:E:\TV\videofile-(2025)-[tvdbid-xxxxxx]\videofile-(2025)-[tvdbid-xxxxxx]-S01\videofile S01E03 episodeName.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomdby1iso2mp41
title : videofile S01E03 episodeName (UKB)
encoder : Lavf61.7.100
Duration: 00:47:13.63, start: 0.000000, bitrate: 5818 kb/s
Stream #0:0[0x1](und): Video: hevc (Main 10) (hev1 / 0x31766568), yuv420p10le(tv, bt709), 1920x800 [SAR 1:1 DAR 12:5], 5172 kb/s, 23.98 fps, 23.98 tbr, 16k tbn (default)
Metadata:
handler_name : VideoHandler
vendor_id : [0][0][0][0]
Stream #0:1[0x2](eng): Audio: eac3 (ec-3 / 0x332D6365), 48000 Hz, 5.1(side), fltp, 640 kb/s (default)
Metadata:
handler_name : SoundHandler
vendor_id : [0][0][0][0]
Side data:
audio service type: main
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (eac3 (native) -> mp3 (libmp3lame))
Press [q] to stop, [?] for help
Output #0, hls, to 'C:\ProgramData\Jellyfin\Server\cache\transcodes\5c4063bb130a7f6e1a8fd7c258e9d82f.m3u8':
Metadata:
encoder : Lavf61.1.100
Stream #0:0: Video: hevc (Main 10) (hvc1 / 0x31637668), yuv420p10le(tv, bt709), 1920x800 [SAR 1:1 DAR 12:5], q=2-31, 5172 kb/s, 23.98 fps, 23.98 tbr, 90k tbn (default)
Stream #0:1: Audio: mp3, 48000 Hz, stereo, fltp, 256 kb/s (default)
Metadata:
encoder : Lavc61.3.100 libmp3lame
Side data:
audio service type: main
[hls @ 0000013353c04b40] Opening 'C:\ProgramData\Jellyfin\Server\cache\transcodes\5c4063bb130a7f6e1a8fd7c258e9d82f61.ts' for writing
[hls @ 0000013353c04b40] Opening 'C:\ProgramData\Jellyfin\Server\cache\transcodes\5c4063bb130a7f6e1a8fd7c258e9d82f62.ts' for writing
size=N/A time=00:00:00.00 bitrate=N/A speed= 0x
[hls @ 0000013353c04b40] Opening 'C:\ProgramData\Jellyfin\Server\cache\transcodes\5c4063bb130a7f6e1a8fd7c258e9d82f63.ts' for writing
[hls @ 0000013353c04b40] Opening 'C:\ProgramData\Jellyfin\Server\cache\transcodes\5c4063bb130a7f6e1a8fd7c258e9d82f64.ts' for writing
[hls @ 0000013353c04b40] Opening 'C:\ProgramData\Jellyfin\Server\cache\transcodes\5c4063bb130a7f6e1a8fd7c258e9d82f65.ts' for writing
size=N/A time=00:00:19.00 bitrate=N/A speed= 19x
[hls @ 0000013353c04b40] Opening 'C:\ProgramData\Jellyfin\Server\cache\transcodes\5c4063bb130a7f6e1a8fd7c258e9d82f66.ts' for writing
[hls @ 0000013353c04b40] Opening 'C:\ProgramData\Jellyfin\Server\cache\transcodes\5c4063bb130a7f6e1a8fd7c258e9d82f67.ts' for writing
[hls @ 0000013353c04b40] Opening 'C:\ProgramData\Jellyfin\Server\cache\transcodes\5c4063bb130a7f6e1a8fd7c258e9d82f68.ts' for writing
size=N/A time=00:00:37.68 bitrate=N/A speed=25.1x
[hls @ 0000013353c04b40] Opening 'C:\ProgramData\Jellyfin\Server\cache\transcodes\5c4063bb130a7f6e1a8fd7c258e9d82f69.ts' for writing
..... you get the gist ....
[hls @ 0000013353c04b40] Opening 'C:\ProgramData\Jellyfin\Server\cache\transcodes\5c4063bb130a7f6e1a8fd7c258e9d82f468.ts' for writing
[out#0/hls @ 0000013353b57a80] video:1556115KiB audio:77099KiB subtitle:0KiB other streams:0KiB global headers:2KiB muxing overhead: unknown
size=N/A time=00:40:50.16 bitrate=N/A speed=38.3x
RE: Trickplay Not working on Roku clinet - Comply7199 - 2025-06-24
Thanks for merging the threads.
Enabling the custom trickplay images has fixed the problem. I'll keep an eye out for duplicate trickplay for other files.
Why is the server creating the .ts files in the transcoding folder? Is this standard behaviour? Should I move my cache folders from the VM's boot drive (SSD) to a 'magnetic' HDD to prevent premature wear?
|