savonet / liquidsoap

Liquidsoap is a statically typed scripting general-purpose language with dedicated operators and backend for all thing media, streaming, file generation, automation, HTTP backend and more.
http://liquidsoap.info
GNU General Public License v2.0
1.42k stars 130 forks source link

The `%theora` encoder is broken #4116

Closed vitoyucepi closed 2 months ago

vitoyucepi commented 2 months ago

Description

Liquidsoap won't start when using the %theora encoder.

Log ``` 2024/08/27 20:38:14 >>> LOG START 2024/08/27 20:38:13 [ffmpeg.filter.bitstream:3] No valid mode found for filter pgs_frame_merge! 2024/08/27 20:38:13 [main:3] Liquidsoap 2.3.0+git@59de576ec 2024/08/27 20:38:13 [main:3] Using: alsa=0.3.0 angstrom=0.16.0 ao=0.2.4 asetmap=0.8.1 asn1-combinators=0.2.6 astring=0.8.5 base=v0.16.3 base.base_internalhash_types=v0.16.3 base.caml=v0.16.3 base.shadow_stdlib=v0.16.3 base64=3.5.1 bigarray=[distributed with Ocaml] bigarray-compat=1.1.0 bigstringaf=0.9.1 bjack=0.1.6 bos=0.2.1 bytes=[distributed with OCaml 4.02 or above] ca-certs=v0.2.3 camlp-streams camomile.lib=2.0 cohttp=5.3.1 cohttp-lwt=5.3.0 cohttp-lwt-unix=5.3.0 conduit=6.2.3 conduit-lwt=6.2.3 conduit-lwt-unix=6.2.3 cry=1.0.3 cstruct=6.2.0 ctypes=0.22.0 ctypes-foreign=0.22.0 ctypes.stubs=0.22.0 curl=0.9.2 domain-name=0.4.0 domain_shims dssi=0.1.5 dtools=0.4.5 dune-build-info=3.16.0 dune-private-libs.dune-section=3.16.0 dune-site=3.16.0 dune-site.private=3.16.0 duppy=0.9.4 eqaf=0.9 eqaf.bigstring=0.9 eqaf.cstruct=0.9 faad=0.5.2 fdkaac=0.3.3 ffmpeg-av=1.2.0 ffmpeg-avcodec=1.2.0 ffmpeg-avdevice=1.2.0 ffmpeg-avfilter=1.2.0 ffmpeg-avutil=1.2.0 ffmpeg-swresample=1.2.0 ffmpeg-swscale=1.2.0 fileutils=0.6.4 flac=0.5.1 flac.decoder=0.5.1 flac.ogg=0.5.1 fmt=0.9.0 fpath=0.7.3 frei0r=0.1.2 gd=1.1 gen=1.1 gmap=0.3.0 hkdf=1.0.4 inotify=2.0-62-g5e58536 integers ipaddr=5.6.0 ipaddr-sexp=5.6.0 ipaddr.unix=5.6.0 irc-client irc-client-unix ladspa=0.2.2 lame=0.3.7 lastfm=0.3.4 lilv=0.2.0 liquidsoap-lang=2.3.0 liquidsoap-lang.console=2.3.0 liquidsoap_alsa=rolling-release-v2.3.x-3-g59de576 liquidsoap_ao=rolling-release-v2.3.x-3-g59de576 liquidsoap_bjack=rolling-release-v2.3.x-3-g59de576 liquidsoap_builtins=rolling-release-v2.3.x-3-g59de576 liquidsoap_core=rolling-release-v2.3.x-3-g59de576 liquidsoap_dssi=rolling-release-v2.3.x-3-g59de576 liquidsoap_faad=rolling-release-v2.3.x-3-g59de576 liquidsoap_fdkaac=rolling-release-v2.3.x-3-g59de576 liquidsoap_ffmpeg=rolling-release-v2.3.x-3-g59de576 liquidsoap_flac=rolling-release-v2.3.x-3-g59de576 liquidsoap_frei0r=rolling-release-v2.3.x-3-g59de576 liquidsoap_gd=rolling-release-v2.3.x-3-g59de576 liquidsoap_irc=rolling-release-v2.3.x-3-g59de576 liquidsoap_ladspa=rolling-release-v2.3.x-3-g59de576 liquidsoap_lame=rolling-release-v2.3.x-3-g59de576 liquidsoap_lastfm=rolling-release-v2.3.x-3-g59de576 liquidsoap_lilv=rolling-release-v2.3.x-3-g59de576 liquidsoap_lo=rolling-release-v2.3.x-3-g59de576 liquidsoap_mad=rolling-release-v2.3.x-3-g59de576 liquidsoap_ogg=rolling-release-v2.3.x-3-g59de576 liquidsoap_ogg_flac=rolling-release-v2.3.x-3-g59de576 liquidsoap_optionals=rolling-release-v2.3.x-3-g59de576 liquidsoap_opus=rolling-release-v2.3.x-3-g59de576 liquidsoap_osc=rolling-release-v2.3.x-3-g59de576 liquidsoap_oss=rolling-release-v2.3.x-3-g59de576 liquidsoap_portaudio=rolling-release-v2.3.x-3-g59de576 liquidsoap_posix_time=rolling-release-v2.3.x-3-g59de576 liquidsoap_prometheus=rolling-release-v2.3.x-3-g59de576 liquidsoap_pulseaudio=rolling-release-v2.3.x-3-g59de576 liquidsoap_runtime=rolling-release-v2.3.x-3-g59de576 liquidsoap_samplerate=rolling-release-v2.3.x-3-g59de576 liquidsoap_sdl=rolling-release-v2.3.x-3-g59de576 liquidsoap_sdl_log_level=rolling-release-v2.3.x-3-g59de576 liquidsoap_shine=rolling-release-v2.3.x-3-g59de576 liquidsoap_soundtouch=rolling-release-v2.3.x-3-g59de576 liquidsoap_speex=rolling-release-v2.3.x-3-g59de576 liquidsoap_sqlite=rolling-release-v2.3.x-3-g59de576 liquidsoap_srt=rolling-release-v2.3.x-3-g59de576 liquidsoap_ssl=rolling-release-v2.3.x-3-g59de576 liquidsoap_stdlib=rolling-release-v2.3.x-3-g59de576 liquidsoap_stereotool=rolling-release-v2.3.x-3-g59de576 liquidsoap_theora=rolling-release-v2.3.x-3-g59de576 liquidsoap_tls=rolling-release-v2.3.x-3-g59de576 liquidsoap_vorbis=rolling-release-v2.3.x-3-g59de576 liquidsoap_xmlplaylist=rolling-release-v2.3.x-3-g59de576 liquidsoap_yaml=rolling-release-v2.3.x-3-g59de576 lo=0.2.0 logs=0.7.0 logs.fmt=0.7.0 logs.lwt=0.7.0 lwt=5.7.0 lwt.unix=5.7.0 macaddr=5.6.0 mad=0.5.3 magic-mime=1.3.1 mem_usage=0.1.1 memtrace=0.2.3 menhirLib=20231231 metadata=0.3.0 mirage-crypto=0.11.3 mirage-crypto-ec=0.11.3 mirage-crypto-pk=0.11.3 mirage-crypto-rng=0.11.3 mirage-crypto-rng.unix=0.11.3 mm=0.8.5 mm.audio=0.8.5 mm.base=0.8.5 mm.image=0.8.5 mm.midi=0.8.5 mm.video=0.8.5 ocplib-endian ocplib-endian.bigstring ogg=0.7.4 ogg.decoder=0.7.4 opus=0.2.3 opus.decoder=0.2.3 osc osc-unix parsexp=v0.16.0 pbkdf portaudio=0.2.3 posix-base=5a7f328 posix-socket=5a7f328 posix-socket.constants=5a7f328 posix-socket.stubs=5a7f328 posix-socket.types=5a7f328 posix-time2=5a7f328 posix-time2.constants=5a7f328 posix-time2.stubs=5a7f328 posix-time2.types=5a7f328 posix-types=5a7f328 posix-types.constants=5a7f328 ppx_compare.runtime-lib=v0.16.0 ppx_hash.runtime-lib=v0.16.0 ppx_sexp_conv.runtime-lib=v0.16.0 prometheus=1.2 prometheus-app=1.2 ptime=1.1.0 ptime.clock.os=1.1.0 pulseaudio=0.1.6 re=1.11.0 result=1.5 rresult=0.7.0 samplerate=0.1.7 saturn_lockfree=0.4.1 sedlex=3.2 seq=[distributed with OCaml 4.07 or above] sexplib=v0.16.0 sexplib0=v0.16.0 shine=0.2.3 soundtouch=0.1.9 speex=0.4.2 speex.decoder=0.4.2 sqlite3=5.1.0 srt=0.3.1 srt.constants=0.3.1 srt.stubs=0.3.1 srt.stubs.locked=0.3.1 srt.types=0.3.1 ssl=0.7.0 stdlib-shims=0.3.0 stereotool=rolling-release-v2.3.x-3-g59de576 str=[distributed with Ocaml] stringext=1.6.0 theora=0.4.1 theora.decoder=0.4.1 threads=[distributed with Ocaml] threads.posix=[internal] tls=0.17.4 tsdl=v1.0.0 tsdl-image=0.5 tsdl-ttf=0.6 unix=[distributed with Ocaml] unix-errno=52c6ecb unix-errno.errno_bindings=52c6ecb unix-errno.errno_types=52c6ecb unix-errno.errno_types_detected=52c6ecb unix-errno.unix=52c6ecb uri=4.4.0 uri-sexp=4.4.0 uri.services=4.4.0 vorbis=0.8.1 vorbis.decoder=0.8.1 x509=0.16.5 xmlm=1.4.0 xmlplaylist=0.1.5 yaml=3.2.0 yaml.bindings=3.2.0 yaml.bindings.types=3.2.0 yaml.c=3.2.0 yaml.ffi=3.2.0 yaml.types=3.2.0 zarith=1.13 2024/08/27 20:38:13 [main:3] 2024/08/27 20:38:13 [main:3] DISCLAIMER: This version of Liquidsoap has been compiled from a snapshot of the 2024/08/27 20:38:13 [main:3] development code. As such, it should not be used in production unless you know 2024/08/27 20:38:13 [main:3] what you are doing! 2024/08/27 20:38:13 [main:3] 2024/08/27 20:38:13 [main:3] We are, however, very interested in any feedback about our development code and 2024/08/27 20:38:13 [main:3] committed to fix issues as soon as possible. 2024/08/27 20:38:13 [main:3] 2024/08/27 20:38:13 [main:3] If you are interested in collaborating to the development of Liquidsoap, feel 2024/08/27 20:38:13 [main:3] free to drop us a mail at or to join the slack chat 2024/08/27 20:38:13 [main:3] at . 2024/08/27 20:38:13 [main:3] 2024/08/27 20:38:13 [main:3] Please send any bug report or feature request at 2024/08/27 20:38:13 [main:3] . 2024/08/27 20:38:13 [main:3] 2024/08/27 20:38:13 [main:3] We hope you enjoy this snapshot build of Liquidsoap! 2024/08/27 20:38:13 [main:3] 2024/08/27 20:38:13 [clock:3] Using native (high-precision) implementation for latency control 2024/08/27 20:38:14 [main:3] User script loaded in 0.64 seconds. 2024/08/27 20:38:14 [frame:3] Using 44100Hz audio, 25Hz video, 44100Hz main. 2024/08/27 20:38:14 [frame:3] Video frame size set to: 1280x720 2024/08/27 20:38:14 [frame:3] Targeting 'frame.duration': 0.02s = 882 ticks. 2024/08/27 20:38:14 [sandbox:3] Sandboxing disabled 2024/08/27 20:38:14 [startup:3] DSSI plugins registration: 0.00s 2024/08/27 20:38:14 [startup:3] FFmpeg filters registration: 0.03s 2024/08/27 20:38:14 [startup:3] FFmpeg bitstream filters registration: 0.00s 2024/08/27 20:38:14 [startup:3] Lilv plugins registration: 0.00s 2024/08/27 20:38:14 [startup:3] Frei0r plugin registration: 0.00s 2024/08/27 20:38:14 [startup:3] LADSPA plugins registration: 0.00s 2024/08/27 20:38:14 [startup:3] main script hash computation: 0.04s 2024/08/27 20:38:14 [startup:3] main script cache retrieval: 0.04s 2024/08/27 20:38:14 [startup:3] stdlib hash computation: 0.04s 2024/08/27 20:38:14 [startup:3] Loading stdlib from cache! 2024/08/27 20:38:14 [startup:3] stdlib cache retrieval: 0.15s 2024/08/27 20:38:14 [startup:3] Typechecking main script: 0.00s 2024/08/27 20:38:14 [startup:3] Evaluating main script: 0.03s 2024/08/27 20:38:14 [clock:3] Starting clock generic with 2 source(s) and sync: auto 2024/08/27 20:38:14 [video.converter:3] Using preferred video converter: ffmpeg. 2024/08/27 20:38:14 [audio.converter:3] Using samplerate converter: libsamplerate. 2024/08/27 20:38:14 [video.text:3] Using sdl implementation 2024/08/27 20:38:14 [single:3] Content type is {video=canvas}. 2024/08/27 20:38:14 [single:3] /tmp/test/test.mp4 is static, resolving once for all... 2024/08/27 20:38:14 [decoder.ffmpeg:3] Requested content-type for "/tmp/test/test.mp4": {video=canvas} 2024/08/27 20:38:14 [decoder.ffmpeg:3] FFmpeg recognizes "/tmp/test/test.mp4" as audio: {codec: aac, 44100Hz, 1 channel(s)}, video: {codec: h264, 1280x720, yuv444p} 2024/08/27 20:38:14 [decoder.ffmpeg:3] Decoded content-type for "/tmp/test/test.mp4": {video=canvas} 2024/08/27 20:38:14 [request.dynamic:3] Content type is {video=canvas}. 2024/08/27 20:38:14 [request.dynamic:3] Prepared "/tmp/test/test.mp4" (RID 0). 2024/08/27 20:38:14 [output.file:3] Content type is {video=canvas}. 2024/08/27 20:38:14 [output_file:3] Content type is {video=canvas}. 2024/08/27 20:38:14 [clock:2] Source output_file failed while streaming: Theora.Invalid_data! 2024/08/27 20:38:14 [clock:2] Raised by primitive operation at Theora_encoder.create_encoder.data_encoder in file "src/core/ogg_formats/theora_encoder.ml", line 117, characters 6-52 2024/08/27 20:38:14 [clock:2] Called from Ogg_muxer.encode in file "src/core/ogg_formats/ogg_muxer.ml", line 365, characters 14-44 2024/08/27 20:38:14 [clock:2] Called from Stdlib__List.iter in file "list.ml", line 110, characters 12-15 2024/08/27 20:38:14 [clock:2] Called from Ogg_encoder.encoder.(fun).encode in file "src/core/encoder/encoders/ogg_encoder.ml", line 130, characters 6-24 2024/08/27 20:38:14 [clock:2] Called from Encoder.get_factory.(fun).encode.(fun) in file "src/core/encoder/encoder.ml" (inlined), line 390, characters 59-71 2024/08/27 20:38:14 [clock:2] Called from Mutex_utils.mutexify in file "src/core/tools/mutex_utils.ml" (inlined), line 25, characters 8-11 2024/08/27 20:38:14 [clock:2] Called from Encoder.get_factory.(fun).encode in file "src/core/encoder/encoder.ml", line 390, characters 25-75 2024/08/27 20:38:14 [clock:2] Re-raised at Mutex_utils.mutexify in file "src/core/tools/mutex_utils.ml" (inlined), line 29, characters 8-44 2024/08/27 20:38:14 [clock:2] Called from Encoder.get_factory.(fun).encode in file "src/core/encoder/encoder.ml", line 390, characters 25-75 2024/08/27 20:38:14 [clock:2] Called from Output.encoded#send_frame.output_chunks.f in file "src/core/outputs/output.ml", line 244, characters 21-71 2024/08/27 20:38:14 [clock:2] Called from Output.output#output in file "src/core/outputs/output.ml", line 180, characters 40-60 2024/08/27 20:38:14 [clock:2] Called from Pipe_output.piped_output#output in file "src/core/outputs/pipe_output.ml", line 365, characters 10-21 2024/08/27 20:38:14 [clock:2] Re-raised at Pipe_output.piped_output#reopen_on_error in file "src/core/outputs/pipe_output.ml", line 357, characters 12-48 2024/08/27 20:38:14 [clock:2] Called from Clock._tick.(fun) in file "src/core/clock.ml", line 391, characters 37-45 2024/08/27 20:38:14 [clock:2] 2024/08/27 20:38:14 [threads:3] Main loop exited 2024/08/27 20:38:14 [main:3] Shutdown started! 2024/08/27 20:38:14 [threads:3] Waiting for main threads to terminate... 2024/08/27 20:38:14 [threads:3] Main threads terminated. 2024/08/27 20:38:14 [threads:3] Shutting down scheduler... 2024/08/27 20:38:14 [threads:3] Scheduler shut down. 2024/08/27 20:38:14 [main:3] Cleaning downloaded files... 2024/08/27 20:38:14 [main:3] Freeing memory... 2024/08/27 20:38:14 >>> LOG END ```

Steps to reproduce

  1. main.liq
    s = single("/tmp/test/test.mp4")
    output.file(%theora, "/tmp/test.ogv", s)
  2. compose.yaml
    services:
     ls20:
       image: savonet/liquidsoap:rolling-release-v2.0.x
       command: /tmp/test/main.liq
       volumes:
         - ./:/tmp/test/
     ls21:
       image: savonet/liquidsoap:rolling-release-v2.1.x
       command: /tmp/test/main.liq
       volumes:
         - ./:/tmp/test/
     ls22:
       image: savonet/liquidsoap:rolling-release-v2.2.x
       command: /tmp/test/main.liq
       volumes:
         - ./:/tmp/test/
     ls23:
       image: savonet/liquidsoap:rolling-release-v2.3.x
       command: /tmp/test/main.liq
       volumes:
         - ./:/tmp/test/
  3. ffmpeg -f lavfi -i testsrc=duration=10:size=1280x720:rate=30 -f lavfi -i "sine=frequency=1000:duration=10" test.mp4
  4. docker compose up

Expected behavior

Liquidsoap starts with the %theora encoder.

Liquidsoap version

Liquidsoap 2.3.0+git@59de576ec
Copyright (c) 2003-2024 Savonet team
Liquidsoap is open-source software, released under GNU General Public License.
See <http://liquidsoap.info> for more information.

Liquidsoap build config

* Liquidsoap version  : 2.3.0+git@59de576ec

 * Compilation options
   - Release build       : false
   - Git SHA             : 59de576ec
   - OCaml version       : 4.14.2
   - OS type             : Unix
   - Libs versions       : alsa=0.3.0 angstrom=0.16.0 ao=0.2.4 asetmap=0.8.1 asn1-combinators=0.2.6 astring=0.8.5 base=v0.16.3 base.base_internalhash_types=v0.16.3 base.caml=v0.16.3 base.shadow_stdlib=v0.16.3 base64=3.5.1 bigarray=[distributed with Ocaml] bigarray-compat=1.1.0 bigstringaf=0.9.1 bjack=0.1.6 bos=0.2.1 bytes=[distributed with OCaml 4.02 or above] ca-certs=v0.2.3 camlp-streams camomile.lib=2.0 cohttp=5.3.1 cohttp-lwt=5.3.0 cohttp-lwt-unix=5.3.0 conduit=6.2.3 conduit-lwt=6.2.3 conduit-lwt-unix=6.2.3 cry=1.0.3 cstruct=6.2.0 ctypes=0.22.0 ctypes-foreign=0.22.0 ctypes.stubs=0.22.0 curl=0.9.2 domain-name=0.4.0 domain_shims dssi=0.1.5 dtools=0.4.5 dune-build-info=3.16.0 dune-private-libs.dune-section=3.16.0 dune-site=3.16.0 dune-site.private=3.16.0 duppy=0.9.4 eqaf=0.9 eqaf.bigstring=0.9 eqaf.cstruct=0.9 faad=0.5.2 fdkaac=0.3.3 ffmpeg-av=1.2.0 ffmpeg-avcodec=1.2.0 ffmpeg-avdevice=1.2.0 ffmpeg-avfilter=1.2.0 ffmpeg-avutil=1.2.0 ffmpeg-swresample=1.2.0 ffmpeg-swscale=1.2.0 fileutils=0.6.4 flac=0.5.1 flac.decoder=0.5.1 flac.ogg=0.5.1 fmt=0.9.0 fpath=0.7.3 frei0r=0.1.2 gd=1.1 gen=1.1 gmap=0.3.0 hkdf=1.0.4 inotify=2.0-62-g5e58536 integers ipaddr=5.6.0 ipaddr-sexp=5.6.0 ipaddr.unix=5.6.0 irc-client irc-client-unix ladspa=0.2.2 lame=0.3.7 lastfm=0.3.4 lilv=0.2.0 liquidsoap-lang=2.3.0 liquidsoap-lang.console=2.3.0 liquidsoap_alsa=rolling-release-v2.3.x-3-g59de576 liquidsoap_ao=rolling-release-v2.3.x-3-g59de576 liquidsoap_bjack=rolling-release-v2.3.x-3-g59de576 liquidsoap_builtins=rolling-release-v2.3.x-3-g59de576 liquidsoap_core=rolling-release-v2.3.x-3-g59de576 liquidsoap_dssi=rolling-release-v2.3.x-3-g59de576 liquidsoap_faad=rolling-release-v2.3.x-3-g59de576 liquidsoap_fdkaac=rolling-release-v2.3.x-3-g59de576 liquidsoap_ffmpeg=rolling-release-v2.3.x-3-g59de576 liquidsoap_flac=rolling-release-v2.3.x-3-g59de576 liquidsoap_frei0r=rolling-release-v2.3.x-3-g59de576 liquidsoap_gd=rolling-release-v2.3.x-3-g59de576 liquidsoap_irc=rolling-release-v2.3.x-3-g59de576 liquidsoap_ladspa=rolling-release-v2.3.x-3-g59de576 liquidsoap_lame=rolling-release-v2.3.x-3-g59de576 liquidsoap_lastfm=rolling-release-v2.3.x-3-g59de576 liquidsoap_lilv=rolling-release-v2.3.x-3-g59de576 liquidsoap_lo=rolling-release-v2.3.x-3-g59de576 liquidsoap_mad=rolling-release-v2.3.x-3-g59de576 liquidsoap_ogg=rolling-release-v2.3.x-3-g59de576 liquidsoap_ogg_flac=rolling-release-v2.3.x-3-g59de576 liquidsoap_optionals=rolling-release-v2.3.x-3-g59de576 liquidsoap_opus=rolling-release-v2.3.x-3-g59de576 liquidsoap_osc=rolling-release-v2.3.x-3-g59de576 liquidsoap_oss=rolling-release-v2.3.x-3-g59de576 liquidsoap_portaudio=rolling-release-v2.3.x-3-g59de576 liquidsoap_posix_time=rolling-release-v2.3.x-3-g59de576 liquidsoap_prometheus=rolling-release-v2.3.x-3-g59de576 liquidsoap_pulseaudio=rolling-release-v2.3.x-3-g59de576 liquidsoap_runtime=rolling-release-v2.3.x-3-g59de576 liquidsoap_samplerate=rolling-release-v2.3.x-3-g59de576 liquidsoap_sdl=rolling-release-v2.3.x-3-g59de576 liquidsoap_sdl_log_level=rolling-release-v2.3.x-3-g59de576 liquidsoap_shine=rolling-release-v2.3.x-3-g59de576 liquidsoap_soundtouch=rolling-release-v2.3.x-3-g59de576 liquidsoap_speex=rolling-release-v2.3.x-3-g59de576 liquidsoap_sqlite=rolling-release-v2.3.x-3-g59de576 liquidsoap_srt=rolling-release-v2.3.x-3-g59de576 liquidsoap_ssl=rolling-release-v2.3.x-3-g59de576 liquidsoap_stdlib=rolling-release-v2.3.x-3-g59de576 liquidsoap_stereotool=rolling-release-v2.3.x-3-g59de576 liquidsoap_theora=rolling-release-v2.3.x-3-g59de576 liquidsoap_tls=rolling-release-v2.3.x-3-g59de576 liquidsoap_vorbis=rolling-release-v2.3.x-3-g59de576 liquidsoap_xmlplaylist=rolling-release-v2.3.x-3-g59de576 liquidsoap_yaml=rolling-release-v2.3.x-3-g59de576 lo=0.2.0 logs=0.7.0 logs.fmt=0.7.0 logs.lwt=0.7.0 lwt=5.7.0 lwt.unix=5.7.0 macaddr=5.6.0 mad=0.5.3 magic-mime=1.3.1 mem_usage=0.1.1 memtrace=0.2.3 menhirLib=20231231 metadata=0.3.0 mirage-crypto=0.11.3 mirage-crypto-ec=0.11.3 mirage-crypto-pk=0.11.3 mirage-crypto-rng=0.11.3 mirage-crypto-rng.unix=0.11.3 mm=0.8.5 mm.audio=0.8.5 mm.base=0.8.5 mm.image=0.8.5 mm.midi=0.8.5 mm.video=0.8.5 ocplib-endian ocplib-endian.bigstring ogg=0.7.4 ogg.decoder=0.7.4 opus=0.2.3 opus.decoder=0.2.3 osc osc-unix parsexp=v0.16.0 pbkdf portaudio=0.2.3 posix-base=5a7f328 posix-socket=5a7f328 posix-socket.constants=5a7f328 posix-socket.stubs=5a7f328 posix-socket.types=5a7f328 posix-time2=5a7f328 posix-time2.constants=5a7f328 posix-time2.stubs=5a7f328 posix-time2.types=5a7f328 posix-types=5a7f328 posix-types.constants=5a7f328 ppx_compare.runtime-lib=v0.16.0 ppx_hash.runtime-lib=v0.16.0 ppx_sexp_conv.runtime-lib=v0.16.0 prometheus=1.2 prometheus-app=1.2 ptime=1.1.0 ptime.clock.os=1.1.0 pulseaudio=0.1.6 re=1.11.0 result=1.5 rresult=0.7.0 samplerate=0.1.7 saturn_lockfree=0.4.1 sedlex=3.2 seq=[distributed with OCaml 4.07 or above] sexplib=v0.16.0 sexplib0=v0.16.0 shine=0.2.3 soundtouch=0.1.9 speex=0.4.2 speex.decoder=0.4.2 sqlite3=5.1.0 srt=0.3.1 srt.constants=0.3.1 srt.stubs=0.3.1 srt.stubs.locked=0.3.1 srt.types=0.3.1 ssl=0.7.0 stdlib-shims=0.3.0 stereotool=rolling-release-v2.3.x-3-g59de576 str=[distributed with Ocaml] stringext=1.6.0 theora=0.4.1 theora.decoder=0.4.1 threads=[distributed with Ocaml] threads.posix=[internal] tls=0.17.4 tsdl=v1.0.0 tsdl-image=0.5 tsdl-ttf=0.6 unix=[distributed with Ocaml] unix-errno=52c6ecb unix-errno.errno_bindings=52c6ecb unix-errno.errno_types=52c6ecb unix-errno.errno_types_detected=52c6ecb unix-errno.unix=52c6ecb uri=4.4.0 uri-sexp=4.4.0 uri.services=4.4.0 vorbis=0.8.1 vorbis.decoder=0.8.1 x509=0.16.5 xmlm=1.4.0 xmlplaylist=0.1.5 yaml=3.2.0 yaml.bindings=3.2.0 yaml.bindings.types=3.2.0 yaml.c=3.2.0 yaml.ffi=3.2.0 yaml.types=3.2.0 zarith=1.13
   - architecture        : amd64
   - host                : x86_64-pc-linux-gnu
   - target              : x86_64-pc-linux-gnu
   - system              : linux
   - ocamlopt_cflags     : -O2 -fno-strict-aliasing -fwrapv -pthread -fPIC
   - native_c_compiler   : gcc -O2 -fno-strict-aliasing -fwrapv -pthread -fPIC -D_FILE_OFFSET_BITS=64
   - native_c_libraries  : -lm

 * Configured paths
   - mode              : posix
   - standard library  : /usr/share/liquidsoap/libs
   - scripted binaries : /usr/share/liquidsoap/bin
   - rundir            : /var/run/liquidsoap
   - logdir            : /var/log/liquidsoap
   - user cache        : $HOME/.cache/liquidsoap (override with $LIQ_CACHE_USER_DIR)
   - system cache      : /var/cache/liquidsoap (override with $LIQ_CACHE_SYSTEM_DIR)
   - camomile files    : /usr/share/liquidsoap/camomile

 * Supported input formats
   - MP3               : yes
   - AAC               : yes
   - Ffmpeg            : yes
   - Flac (native)     : yes
   - Flac (ogg)        : yes
   - Opus              : yes
   - Speex             : yes
   - Theora            : yes
   - Vorbis            : yes
   - WAV/AIFF          : yes (native)

 * Supported output formats
   - FDK-AAC           : yes
   - FFmpeg            : yes
   - MP3               : yes
   - MP3 (fixed-point) : yes
   - Flac (native)     : yes
   - Flac (ogg)        : yes
   - Opus              : yes
   - Speex             : yes
   - Theora            : yes
   - Vorbis            : yes
   - WAV/AIFF          : yes (native)

 * Tags
   - AAC               : yes
   - FFmpeg            : yes
   - FLAC (native)     : yes
   - Flac (ogg)        : yes
   - Native decoder    : yes
   - Vorbis            : yes

 * Input / output
   - ALSA              : yes
   - AO                : yes
   - FFmpeg            : yes
   - JACK              : yes
   - OSS               : yes
   - Portaudio         : yes
   - Pulseaudio        : yes
   - SRT               : yes

 * Audio manipulation
   - FFmpeg            : yes
   - LADSPA            : yes
   - Lilv              : yes
   - Samplerate        : yes
   - SoundTouch        : yes
   - StereoTool        : yes

 * Video manipulation
   - camlimages        : no (requires camlimages)
   - FFmpeg            : yes
   - frei0r            : yes
   - ImageLib          : no (requires imagelib)
   - SDL               : yes

 * MIDI manipulation
   - DSSI              : yes

 * Visualization
   - GD                : yes
   - Graphics          : no (requires graphics)
   - SDL               : yes

 * Additional libraries
   - FFmpeg filters    : yes
   - FFmpeg devices    : yes
   - inotify           : yes
   - irc               : yes
   - jemalloc          : no (requires jemalloc)
   - lastfm            : yes
   - lo                : yes
   - memtrace          : no (requires memtrace)
   - osc               : yes
   - ssl               : yes
   - sqlite3           : yes
   - tls               : yes
   - posix-time2       : yes
   - windows service   : no (requires winsvc)
   - YAML support      : yes
   - XML playlists     : yes

 * Monitoring
   - Prometheus        : yes

Installation method

From official container image

Additional Info

This problem was described in #4115. The %theora encoder doesn't work in 2.1+.

toots commented 2 months ago

Thanks. I think that theora encoder should be removed tbh. What do other people think?

vitoyucepi commented 2 months ago

Hi @toots,

What do other people think?

May I ask you to tag them explicitly?

toots commented 2 months ago

Well I mean you, @smimram, @gAlleb but also anyone using video.

It seems to me that theora is super outdated at this point. We can keep supporting it but most people using video will want a different codec.

toots commented 2 months ago

And we'd still support it via ffmpeg if needed.

gAlleb commented 2 months ago

imho Can't say anything good or bad about theora. Of course, it's open source and royalty-free if compared to h.264 or others alike. We have now VP9, A1 etc. While theora still works and might be usable in specific scenarios, due to its limitations and lack of ongoing development I wouldn't consider it a good option either.

And we'd still support it via ffmpeg if needed.

Well, it's a very valid option. Lots of factors have led to theora's stagnation. While it holds historical significance it could be kept within ffmpeg but it is no longer a primary choice for video compression.

toots commented 2 months ago

Initial analysis of the bug shows weird reproduction conditions. I have one video that works and one that does not and, so far, I have not been able to identify any difference that would explain it.

Both videos work with the ffmpeg encoder.

One thing to note re: ffmpeg, however, is that ffmpeg (like many other tools) is terrible at handling the (admittedly pretty bad) specs for ogg track chaining.

It'd be nice to fix the theora encoder but it would be foolish to spend hours on it..