-
-
Notifications
You must be signed in to change notification settings - Fork 132
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
RTL text gets reversed in video #4295
Comments
Thanks for the report! Do you have some logs? There are several implementation of |
liquidsoap rtl.liq
מוּסִיקָה
2025/01/02 17:21:21 >>> LOG START
2025/01/02 17:21:18 [ffmpeg.filter.bitstream:3] No valid mode found for filter pgs_frame_merge!
2025/01/02 17:21:18 [main:3] Liquidsoap rolling-release-v2.3.x-48-g5cb4ad6+dev
2025/01/02 17:21:18 [main:3] Using: angstrom=0.16.1 ao=0.2.4 base=v0.16.3 base.base_internalhash_types=v0.16.3 base.caml=v0.16.3 base.shadow_stdlib=v0.16.3 bigarray=[distributed with Ocaml] bigarray-compat=1.1.0 bigstringaf=0.10.0 bytes=[distributed with OCaml 4.02 or above] camlp-streams camomile.lib=2.0 cry=1.0.3 ctypes=0.23.0 ctypes-foreign=0.23.0 curl=0.9.2 domain_shims dtools=0.4.5 dune-build-info=3.17.0 dune-private-libs.dune-section=3.17.0 dune-site=3.17.0 dune-site.private=3.17.0 duppy=0.9.4 ffmpeg-av=1.2.1 ffmpeg-avcodec=1.2.1 ffmpeg-avdevice=1.2.1 ffmpeg-avfilter=1.2.1 ffmpeg-avutil=1.2.1 ffmpeg-swresample=1.2.1 ffmpeg-swscale=1.2.1 fileutils=0.6.4 gen=1.1 integers lame=0.3.7 liquidsoap-lang=rolling-release-v2.3.x-48-g5cb4ad6 liquidsoap-lang.console=rolling-release-v2.3.x-48-g5cb4ad6 liquidsoap_ao=rolling-release-v2.3.x-48-g5cb4ad6-dirty liquidsoap_builtins=rolling-release-v2.3.x-48-g5cb4ad6-dirty liquidsoap_core=rolling-release-v2.3.x-48-g5cb4ad6-dirty liquidsoap_ffmpeg=rolling-release-v2.3.x-48-g5cb4ad6-dirty liquidsoap_lame=rolling-release-v2.3.x-48-g5cb4ad6-dirty liquidsoap_ndi=rolling-release-v2.3.x-48-g5cb4ad6-dirty liquidsoap_optionals=rolling-release-v2.3.x-48-g5cb4ad6-dirty liquidsoap_portaudio=rolling-release-v2.3.x-48-g5cb4ad6-dirty liquidsoap_runtime=rolling-release-v2.3.x-48-g5cb4ad6-dirty liquidsoap_sdl=rolling-release-v2.3.x-48-g5cb4ad6-dirty liquidsoap_sdl_log_level=rolling-release-v2.3.x-48-g5cb4ad6-dirty liquidsoap_stereotool=rolling-release-v2.3.x-48-g5cb4ad6-dirty liquidsoap_xmlplaylist=rolling-release-v2.3.x-48-g5cb4ad6-dirty magic-mime=1.3.1 mem_usage=0.1.1 menhirLib=20240715 metadata=0.3.0 mm=0.8.6 mm.audio=0.8.6 mm.base=0.8.6 mm.image=0.8.6 mm.midi=0.8.6 mm.video=0.8.6 ndi=rolling-release-v2.3.x-48-g5cb4ad6-dirty portaudio=0.2.3 ppx_compare.runtime-lib=v0.16.0 ppx_hash.runtime-lib=v0.16.0 ppx_sexp_conv.runtime-lib=v0.16.0 re=1.12.0 saturn_lockfree=0.4.1 sedlex=3.3 seq=[distributed with OCaml 4.07 or above] sexplib0=v0.16.0 stdlib-shims=0.3.0 stereotool=rolling-release-v2.3.x-48-g5cb4ad6-dirty str=[distributed with Ocaml] stringext=1.6.0 threads=[distributed with Ocaml] threads.posix=[internal] tsdl=v1.1.0 tsdl-image=0.5 tsdl-ttf=0.6 unix=[distributed with Ocaml] uri=4.4.0 xml-light=2.5 xmlm=1.4.0 xmlplaylist=0.1.5
2025/01/02 17:21:18 [clock:3] Using builtin (low-precision) implementation for latency control
2025/01/02 17:21:21 [frame:4] frame.audio.samplerate set to: 44100
2025/01/02 17:21:21 [request.0:4] Pushed ["/Users/stef/liquidsoap/video/blank.png";...].
2025/01/02 17:21:21 [main:3] User script loaded in 2.36 seconds.
2025/01/02 17:21:21 [frame:4] frame.audio.channels set to: 2
2025/01/02 17:21:21 [frame:4] frame.video.default set to: false
2025/01/02 17:21:21 [frame:4] frame.midi.channels set to: 0
2025/01/02 17:21:21 [frame:4] frame.video.width set to: 1280
2025/01/02 17:21:21 [frame:4] frame.video.height set to: 720
2025/01/02 17:21:21 [frame:4] frame.video.framerate set to: 25
2025/01/02 17:21:21 [frame:4] frame.audio.samplerate set to: 44100
2025/01/02 17:21:21 [frame:3] Using 44100Hz audio, 25Hz video, 44100Hz main.
2025/01/02 17:21:21 [frame:3] Video frame size set to: 1280x720
2025/01/02 17:21:21 [frame:3] Targeting 'frame.duration': 0.02s = 882 ticks.
2025/01/02 17:21:21 [sandbox:3] Could not find binary bwrap, disabling sandboxing.
2025/01/02 17:21:21 [startup:3] FFmpeg filters registration: 0.04s
2025/01/02 17:21:21 [startup:3] FFmpeg bitstream filters registration: 0.00s
2025/01/02 17:21:21 [startup:3] main script hash computation: 0.05s
2025/01/02 17:21:21 [startup:3] main script cache retrieval: 0.05s
2025/01/02 17:21:21 [startup:3] stdlib hash computation: 0.05s
2025/01/02 17:21:21 [startup:3] Loading stdlib from cache!
2025/01/02 17:21:21 [startup:3] stdlib cache retrieval: 0.36s
2025/01/02 17:21:21 [startup:3] Typechecking main script: 1.33s
2025/01/02 17:21:21 [startup:3] Evaluating main script: 0.05s
2025/01/02 17:21:21 [clock:3] Starting clock generic with 11 source(s) and sync: auto
2025/01/02 17:21:21 [threads:4] Created thread "Clock generic" (1 total).
2025/01/02 17:21:21 [threads:4] Created thread "generic queue #1" (1 total).
2025/01/02 17:21:21 [threads:4] Created thread "generic queue #2" (2 total).
2025/01/02 17:21:21 [threads:4] Created thread "generic queue #3" (3 total).
2025/01/02 17:21:21 [threads:4] Created thread "generic queue #4" (4 total).
2025/01/02 17:21:21 [threads:4] Created thread "generic queue #5" (5 total).
2025/01/02 17:21:21 [threads:4] Created thread "non-blocking queue #1" (6 total).
2025/01/02 17:21:21 [threads:4] Created thread "non-blocking queue #2" (7 total).
2025/01/02 17:21:21 [video.converter:3] Using preferred video converter: ffmpeg.
2025/01/02 17:21:21 [audio.converter:3] Using samplerate converter: ffmpeg.
2025/01/02 17:21:21 [clock.generic:4] Clock thread is starting
2025/01/02 17:21:21 [source:4] Source sine gets up with content type: {audio=pcm(stereo)} and frame type: {audio : pcm(stereo)}.
2025/01/02 17:21:21 [sine:3] Content type is {audio=pcm(stereo)}.
2025/01/02 17:21:21 [source:4] Source video.text gets up with content type: {video=canvas} and frame type: 'A.{video : canvas}.
2025/01/02 17:21:21 [video.text:3] Content type is {video=canvas}.
2025/01/02 17:21:21 [source:4] Source video.crop gets up with content type: {video=canvas} and frame type: {video : canvas}.
2025/01/02 17:21:21 [video.crop:3] Content type is {video=canvas}.
2025/01/02 17:21:21 [source:4] Source video.info gets up with content type: {video=canvas} and frame type: {video : canvas}.
2025/01/02 17:21:21 [video.info:3] Content type is {video=canvas}.
2025/01/02 17:21:21 [source:4] Source video.translate gets up with content type: {video=canvas} and frame type: {video : canvas}.
2025/01/02 17:21:21 [video.translate:3] Content type is {video=canvas}.
2025/01/02 17:21:21 [source:4] Source source.available gets up with content type: {video=canvas} and frame type: {video : canvas}.
2025/01/02 17:21:21 [source.available:3] Content type is {video=canvas}.
2025/01/02 17:21:21 [source:4] Source single gets up with content type: {video=canvas} and frame type: 'A.{video : canvas}
2025/01/02 17:21:21 [source:4] where
2025/01/02 17:21:21 [source:4] 'A is a set of tracks to be muxed into a source and a set of tracks to be muxed into a source.
2025/01/02 17:21:21 [single:3] Content type is {video=canvas}.
2025/01/02 17:21:21 [single:3] /Users/stef/liquidsoap/video/blank.png is static, resolving once for all...
2025/01/02 17:21:21 [decoder.video.metadata:4] Unsupported MIME type for "/Users/stef/liquidsoap/video/blank.png": image/png!
2025/01/02 17:21:21 [decoder.ogg.metadata:4] Unsupported MIME type for "/Users/stef/liquidsoap/video/blank.png": image/png!
2025/01/02 17:21:21 [decoder.image.metadata:4] Unsupported file extension for "/Users/stef/liquidsoap/video/blank.png"!
2025/01/02 17:21:21 [video.text:3] Using sdl implementation
2025/01/02 17:21:21 [decoder.id3:4] Unsupported MIME type for "/Users/stef/liquidsoap/video/blank.png": image/png!
2025/01/02 17:21:21 [decoder.id3:4] Unsupported MIME type for "/Users/stef/liquidsoap/video/blank.png": image/png!
2025/01/02 17:21:21 [decoder.id3:4] Unsupported MIME type for "/Users/stef/liquidsoap/video/blank.png": image/png!
2025/01/02 17:21:21 [decoder.flac.metadata:4] Unsupported MIME type for "/Users/stef/liquidsoap/video/blank.png": image/png!
2025/01/02 17:21:21 [decoder.ffmpeg:4] Unsupported MIME type for "/Users/stef/liquidsoap/video/blank.png": image/png!
2025/01/02 17:21:21 [decoder.ffmpeg:4] Unsupported file extension for "/Users/stef/liquidsoap/video/blank.png"!
2025/01/02 17:21:21 [decoder.midi:4] Unsupported MIME type for "/Users/stef/liquidsoap/video/blank.png": image/png!
2025/01/02 17:21:21 [decoder.srt:4] Unsupported MIME type for "/Users/stef/liquidsoap/video/blank.png": image/png!
2025/01/02 17:21:21 [decoder.aiff:4] Unsupported MIME type for "/Users/stef/liquidsoap/video/blank.png": image/png!
2025/01/02 17:21:21 [decoder.wav:4] Unsupported MIME type for "/Users/stef/liquidsoap/video/blank.png": image/png!
2025/01/02 17:21:21 [decoder:4] Available decoders: ffmpeg (priority: 10), image (priority: 1)
2025/01/02 17:21:21 [decoder:4] Trying decoder "ffmpeg"
2025/01/02 17:21:21 [decoder:4] Cannot decode file "/Users/stef/liquidsoap/video/blank.png" with decoder ffmpeg as {video=canvas}. Detected content: {}
2025/01/02 17:21:21 [decoder:4] Trying decoder "image"
2025/01/02 17:21:21 [decoder:4] Available image decoders: ffmpeg (priority: 10), sdl (priority: 5), ppm (priority: 1)
2025/01/02 17:21:21 [decoder:4] Trying image decoder "ffmpeg" (priority: 10)
2025/01/02 17:21:21 [decoder:3] Image decoder "ffmpeg" accepted "/Users/stef/liquidsoap/video/blank.png"
2025/01/02 17:21:21 [decoder:4] Selected decoder image for file "/Users/stef/liquidsoap/video/blank.png" with expected kind {video=canvas} and detected content {video=canvas}
2025/01/02 17:21:21 [decoder:4] Trying method "ffmpeg" for "/Users/stef/liquidsoap/video/blank.png"...
2025/01/02 17:21:21 [single:4] Switching to source single_actual
2025/01/02 17:21:21 [source:4] Source single_actual gets up with content type: {video=canvas} and frame type: {video : canvas}.
2025/01/02 17:21:21 [single_actual:3] Content type is {video=canvas}.
2025/01/02 17:21:21 [single_actual:4] Queued 1 request(s)
2025/01/02 17:21:21 [single_actual:4] Remaining 0 requests
2025/01/02 17:21:21 [decoder:4] Trying method "ffmpeg" for "/Users/stef/liquidsoap/video/blank.png"...
2025/01/02 17:21:21 [single_actual:3] Prepared "/Users/stef/liquidsoap/video/blank.png" (RID 0).
2025/01/02 17:21:21 [source:4] Source video.add gets up with content type: {video=canvas} and frame type: 'A.{video : canvas}.
2025/01/02 17:21:21 [video.add:3] Content type is {video=canvas}.
2025/01/02 17:21:21 [source:4] Source source gets up with content type: {video=canvas} and frame type: {video : canvas}.
2025/01/02 17:21:21 [source:3] Content type is {video=canvas}.
2025/01/02 17:21:21 [source:4] Source source.2 gets up with content type: {audio=pcm(stereo),video=canvas} and frame type: {audio : pcm(stereo), video : canvas}.
2025/01/02 17:21:21 [source.2:3] Content type is {audio=pcm(stereo),video=canvas}.
2025/01/02 17:21:21 [source:4] Source output.icecast gets up with content type: {audio=pcm(stereo),video=canvas} and frame type: {audio : pcm(stereo), video : canvas}.
2025/01/02 17:21:21 [output.icecast:3] Content type is {audio=pcm(stereo),video=canvas}.
2025/01/02 17:21:21 [/video:3] Content type is {audio=pcm(stereo),video=canvas}.
2025/01/02 17:21:21 [single_actual:4] Queued 1 request(s)
2025/01/02 17:21:21 [/video:3] Connecting mount /video for |
UPDATE: When using
|
Yeah, it's confusing. I found no reversal here with whatever method are available. For reference, you should be able to use:
Make sure to use the latest |
Upgraded to latest main opam. Text gets reversed.
When using
|
|
@gAlleb Could you break down with I also have experienced some weird issues with copy-paste, I'd recommend doing screenshots. Here are mine: I also add a new commit to display the SDL version your script is using:
|
Well dang! |
Description
RTL text gets reversed in video
e.g. Input: "מוּסִיקָה". Video result: הקָיסִוּמ
Steps to reproduce
or
Expected behavior
Liquidsoap version
Liquidsoap build config
Installation method
From official container image
Additional Info
No response
The text was updated successfully, but these errors were encountered: