diff options
Diffstat (limited to 'gnu/packages/video.scm')
| -rw-r--r-- | gnu/packages/video.scm | 1280 |
1 files changed, 578 insertions, 702 deletions
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm index ab4c76a11a..396a9f11f7 100644 --- a/gnu/packages/video.scm +++ b/gnu/packages/video.scm @@ -34,10 +34,10 @@ ;;; Copyright © 2019 Timo Eisenmann <eisenmann@fn.de> ;;; Copyright © 2019 Arne Babenhauserheide <arne_bab@web.de> ;;; Copyright © 2019 Riku Viitanen <riku.viitanen@protonmail.com> -;;; Copyright © 2020, 2021, 2023, 2024 Oleg Pykhalov <go.wigust@gmail.com> +;;; Copyright © 2020, 2021, 2023, 2024, 2025 Oleg Pykhalov <go.wigust@gmail.com> ;;; Copyright © 2020 Josh Holland <josh@inv.alid.pw> ;;; Copyright © 2020, 2021 Brice Waegeneire <brice@waegenei.re> -;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com> +;;; Copyright © 2020, 2025 Vincent Legoll <vincent.legoll@gmail.com> ;;; Copyright © 2020, 2021 Guillaume Le Vaillant <glv@posteo.net> ;;; Copyright © 2020 Alex McGrath <amk@amk.ie> ;;; Copyright © 2020, 2021, 2022 Michael Rohleder <mike@rohleder.de> @@ -45,7 +45,7 @@ ;;; Copyright © 2020 Brett Gilio <brettg@gnu.org> ;;; Copyright © 2020 Alexandru-Sergiu Marton <brown121407@posteo.ro> ;;; Copyright © 2020 Ivan Kozlov <kanichos@yandex.ru> -;;; Copyright © 2020 Antoine Côté <antoine.cote@posteo.net> +;;; Copyright © 2020, 2025 Antoine Côté <antoine.cote@posteo.net> ;;; Copyright © 2020 Hartmut Goebel <h.goebel@crazy-compilers.com> ;;; Copyright © 2021 Alexey Abramov <levenson@mmer.org> ;;; Copyright © 2021, 2022, 2023 Andrew Tropin <andrew@trop.in> @@ -73,6 +73,11 @@ ;;; Copyright © 2025 Formbi <formbi@protonmail.com> ;;; Copyright © 2025 Sharlatan Hellseher <sharlatanus@gmail.ccom> ;;; Copyright © 2025 VnPower <vnpower@loang.net> +;;; Copyright © 2025 Zhu Zihao <all_but_last@163.com> +;;; Copyright © 2025 Remco van 't Veer <remco@remworks.net> +;;; Copyright © 2025 John Kehayias <john@guixotic.coop> +;;; Copyright © 2025 Julian Flake <flake@uni-koblenz.de> +;;; Copyright © 2025 Karl Hallsby <karl@hallsby.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -96,6 +101,7 @@ #:use-module ((guix licenses) #:prefix license:) #:use-module (guix utils) #:use-module (guix packages) + #:use-module (guix deprecation) #:use-module (guix download) #:use-module (guix gexp) #:use-module (guix git-download) @@ -129,14 +135,11 @@ #:use-module (gnu packages bittorrent) #:use-module (gnu packages boost) #:use-module (gnu packages cdrom) - #:use-module (gnu packages certs) + #:use-module (gnu packages nss) #:use-module (gnu packages check) #:use-module (gnu packages cmake) #:use-module (gnu packages compression) #:use-module (gnu packages cpp) - #:use-module (gnu packages crates-check) - #:use-module (gnu packages crates-io) - #:use-module (gnu packages crates-graphics) #:use-module (gnu packages curl) #:use-module (gnu packages datastructures) #:use-module (gnu packages dbm) @@ -159,6 +162,7 @@ #:use-module (gnu packages gnome) #:use-module (gnu packages gnunet) #:use-module (gnu packages gnupg) + #:use-module (gnu packages golang) #:use-module (gnu packages golang-build) #:use-module (gnu packages golang-xyz) #:use-module (gnu packages graphics) @@ -170,7 +174,9 @@ #:use-module (gnu packages imagemagick) #:use-module (gnu packages iso-codes) #:use-module (gnu packages kde-frameworks) + #:use-module (gnu packages libbsd) #:use-module (gnu packages libcanberra) + #:use-module (gnu packages libevent) #:use-module (gnu packages libidn) #:use-module (gnu packages libusb) #:use-module (gnu packages linux) @@ -203,6 +209,7 @@ #:use-module (gnu packages python) #:use-module (gnu packages python-build) #:use-module (gnu packages python-check) + #:use-module (gnu packages python-compression) #:use-module (gnu packages python-crypto) #:use-module (gnu packages python-web) #:use-module (gnu packages python-xyz) @@ -628,6 +635,39 @@ receiving MJPG streams.") (home-page "https://github.com/jacksonliam/mjpg-streamer") (license license:gpl2+))) +(define-public ustreamer + (package + (name "ustreamer") + (version "6.40") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/pikvm/ustreamer") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "10ig3wad8af7zxjnnhcwk1wpi4w26zpx97qb4w8zlsyy1zx40g3b")))) + (build-system gnu-build-system) + (arguments + `(#:tests? #f ; no test suite + #:make-flags (list (string-append "CC=" ,(cc-for-target)) + (string-append "PREFIX=" (assoc-ref %outputs "out")) + "WITH_GPIO=1 WITH_PYTHON=1") + #:phases + (modify-phases %standard-phases + (delete 'configure)))) + (inputs (list libbsd libevent libgpiod libjpeg-turbo which)) + (native-inputs (list pkg-config python)) + (synopsis "Lightweight and fast MJPEG-HTTP streamer") + (description "Lightweight and very quick server to stream MJPEG video +from any V4L2 device to the net. All new browsers have native support of +this video format, as well as most video players such as mplayer, VLC etc. +µStreamer is a part of the PiKVM project designed to stream VGA and +HDMI screencast hardware data with the highest resolution and FPS possible.") + (home-page "https://pikvm.org") + (license license:gpl3))) + (define-public mjpegtools (package (name "mjpegtools") @@ -847,6 +887,7 @@ old-fashioned output methods with powerful ascii-art renderer.") (native-inputs (list intltool + libdisplay-info `(,glib "bin") ; for glib-compile-resources pkg-config python-wrapper)) ; for generate-authors.py @@ -1273,8 +1314,8 @@ playing videos from YouTube. It parses the YouTube website directly and relies on the Invidious instances only as a fallback method.") (license license:artistic2.0))) -(define-public straw-viewer - (deprecated-package "straw-viewer" pipe-viewer)) +(define-deprecated-package straw-viewer + pipe-viewer) (define-public x265 (package @@ -1525,7 +1566,7 @@ libebml is a C++ library to read and write EBML files.") (define-public libplacebo (package (name "libplacebo") - (version "7.349.0") + (version "7.351.0") (source (origin (method git-fetch) @@ -1534,7 +1575,7 @@ libebml is a C++ library to read and write EBML files.") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 - (base32 "1q12yf04z570a2l3vkig2iqm7bgqr90hdxmn78sk2injrsyx124q")))) + (base32 "094mzr4cvvryxr7rpxqhvrs018r89m116cpkmmfy3d3sk8b09jki")))) (build-system meson-build-system) (arguments (list #:configure-flags @@ -1642,17 +1683,17 @@ These tools require a supported graphics chip, driver, and VA-API back end to operate properly.") (license license:expat))) -(define-public ffmpeg-7 +(define-public ffmpeg (package (name "ffmpeg") - (version "7.0.2") + (version "8.0") (source (origin (method url-fetch) (uri (string-append "https://ffmpeg.org/releases/ffmpeg-" version ".tar.xz")) (sha256 (base32 - "12dkv17mrsdqrm70c30azjw7qi1lfxca7xisw81x6flacddm2il6")))) + "13kvs9rh5mp21gx64hdj0jlnz6q5c6spik8kh5q7fk6cnv61yxdj")))) (outputs '("out" "debug")) (build-system gnu-build-system) (inputs @@ -1672,6 +1713,8 @@ operate properly.") libcaca libcdio-paranoia libdrm + libgme + libplacebo libtheora libva libvdpau @@ -1683,13 +1726,16 @@ operate properly.") mesa openal pulseaudio + shaderc sdl2 soxr speex + spirv-tools srt svt-av1 twolame vidstab + vulkan-loader x265 xvid zlib))) @@ -1699,7 +1745,8 @@ operate properly.") pkg-config texinfo speex - yasm)) + vulkan-headers + nasm)) (arguments (list #:test-target "fate" @@ -1714,7 +1761,6 @@ operate properly.") ;; --enable-libfdk-aac enable AAC de/encoding via libfdk-aac [no] ;; --enable-libflite enable flite (voice synthesis) support via ;; libflite [no] - ;; --enable-libgme enable Game Music Emu via libgme [no] ;; --enable-libgsm enable GSM de/encoding via libgsm [no] ;; --enable-libiec61883 enable iec61883 via libiec61883 [no] ;; --enable-libilbc enable iLBC de/encoding via libilbc [no] @@ -1767,12 +1813,15 @@ operate properly.") "--enable-libcdio" "--enable-libdav1d" "--enable-libfreetype" + "--enable-libgme" "--enable-libmp3lame" "--enable-libopus" + "--enable-libplacebo" "--enable-libpulse" #$@(if (this-package-input "rav1e") '("--enable-librav1e") '()) + "--enable-libshaderc" "--enable-libsoxr" "--enable-libspeex" "--enable-libsrt" @@ -1790,6 +1839,7 @@ operate properly.") "--enable-opengl" "--enable-libdrm" "--enable-vaapi" + "--enable-vulkan" "--enable-runtime-cpudetect" @@ -1834,7 +1884,7 @@ operate properly.") (lambda* (#:key outputs configure-flags #:allow-other-keys) (let ((out (assoc-ref outputs "out"))) (substitute* "configure" - (("#! /bin/sh") (string-append "#!" (which "sh")))) + (("#! */bin/sh") (string-append "#!" (which "sh")))) (setenv "SHELL" (which "bash")) (setenv "CONFIG_SHELL" (which "bash")) (apply invoke @@ -1859,23 +1909,23 @@ convert and stream audio and video. It includes the libavcodec audio/video codec library.") (license license:gpl2+))) -(define-public ffmpeg +(define-public ffmpeg-6 (package - (inherit ffmpeg-7) - (version "6.1.1") + (inherit ffmpeg) + (version "6.1.2") (source (origin (method url-fetch) (uri (string-append "https://ffmpeg.org/releases/ffmpeg-" version ".tar.xz")) (sha256 (base32 - "0s7r2qv8gh2a3w568n9xxgcz0q8j5ww1jdsci1hm9f4l1yqg9146")) + "0f2fr8ywchhlkdff88lr4d4vscqzsi1ndjh3r5jwbkayf94lcqiv")) (patches (search-patches "ffmpeg-add-av_stream_get_first_dts-for-chromium.patch")))) (arguments (if (target-x86-32?) - (substitute-keyword-arguments (package-arguments ffmpeg-7) + (substitute-keyword-arguments (package-arguments ffmpeg) ((#:phases phases) #~(modify-phases #$phases (add-before 'configure 'relax-gcc-14-strictness @@ -1883,12 +1933,13 @@ audio/video codec library.") (setenv "CFLAGS" (string-append "-g -O2" - " -Wno-error=incompatible-pointer-types"))))))) - (package-arguments ffmpeg-7))))) + " -Wno-error=incompatible-pointer-types" + " -Wno-error=int-conversion"))))))) + (package-arguments ffmpeg))))) (define-public ffmpeg-5 (package - (inherit ffmpeg) + (inherit ffmpeg-6) (version "5.1.6") (source (origin (method url-fetch) @@ -1898,404 +1949,308 @@ audio/video codec library.") (base32 "1g8116rp4fgq82br8lclb2dmw3fvyh2zkzhnngm7z97pg1i0dypl")))) (arguments - (if (target-x86-32?) - (substitute-keyword-arguments (package-arguments ffmpeg) - ((#:phases phases) + (substitute-keyword-arguments (package-arguments ffmpeg-6) + ((#:modules modules %default-gnu-modules) + `((srfi srfi-1) ,@modules)) + ((#:phases phases) + (if (target-x86-32?) #~(modify-phases #$phases (replace 'bypass-openal-check (lambda _ (substitute* "configure" (("die \"ERROR: openal not found\"") - "true"))))))) - (package-arguments ffmpeg))))) + "true"))))) + phases)) + ((#:configure-flags flags ''()) + #~(fold delete #$flags '("--enable-libplacebo"))))) + (inputs (modify-inputs (package-inputs ffmpeg-6) + (delete "libplacebo"))))) (define-public ffmpeg-4 (package (inherit ffmpeg-5) - (version "4.4.5") + (version "4.4.6") (source (origin (method url-fetch) (uri (string-append "https://ffmpeg.org/releases/ffmpeg-" version ".tar.xz")) (sha256 (base32 - "01xb2vj4n52fv2y56n5ifirgzlg16qbgfg98f6ifbbhm6l6lwlgr")))) - (inputs (modify-inputs (package-inputs ffmpeg) - (replace "sdl2" sdl2-2.0))) + "05q6bpid5hfr9djp6cf3sq8majkjiqnl3v9i2y0an23w8qgld412")))) (arguments (substitute-keyword-arguments (package-arguments ffmpeg-5) ((#:configure-flags flags ''()) - #~(cons "--enable-avresample" #$flags)))))) - -(define-public ffmpeg-3.4 - (package - (inherit ffmpeg-4) - (version "3.4.13") - (source (origin - (method url-fetch) - (uri (string-append "https://ffmpeg.org/releases/ffmpeg-" - version ".tar.xz")) - (sha256 - (base32 - "0np0yalqdrm7rn7iykgfzz3ly4vbgigrajg48c1l6n7qrzqvfszv")) - (patches (search-patches "ffmpeg-4-binutils-2.41.patch")))) - (arguments - (substitute-keyword-arguments (package-arguments ffmpeg-4) - ((#:modules modules %default-gnu-modules) - `((srfi srfi-1) - ,@modules)) - ((#:configure-flags flags) - #~(fold delete #$flags - '("--enable-libdav1d" - "--enable-libaom" - "--enable-librav1e" - "--enable-libsrt" - "--enable-libsvtav1"))) - ((#:phases phases) - #~(modify-phases #$phases - #$@(if (target-x86-32?) - #~((delete 'relax-gcc-14-strictness)) - #~()) - (add-after 'configure 'relax-gcc-14-strictness - (lambda _ - (substitute* "ffbuild/config.mak" - (("CFLAGS *=" all) - (string-append all - " -Wno-error=incompatible-pointer-types" - " -Wno-error=int-conversion"))))))))) - (inputs (modify-inputs (package-inputs ffmpeg-4) - (delete "dav1d" "libaom" "rav1e" "srt"))))) - -(define-public ffmpeg-for-stepmania - (hidden-package - (package - (inherit ffmpeg-4) - (version "2.1.3") - (source - (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/stepmania/ffmpeg") - (commit "eda6effcabcf9c238e4635eb058d72371336e09b"))) - (sha256 - (base32 "1by8rmbva8mfrivdbbkr2gx4kga89zqygkd4cfjl76nr8mdcdamb")) - (file-name (git-file-name "ffmpeg" version)) - (patches (search-patches "ffmpeg-4-binutils-2.41.patch")))) - (arguments - (substitute-keyword-arguments (package-arguments ffmpeg-4) - ((#:configure-flags flags) - #~(list "--disable-programs" - "--disable-doc" - "--disable-debug" - "--disable-avdevice" - "--disable-swresample" - "--disable-postproc" - "--disable-avfilter" - "--disable-shared" - "--enable-static")) - ((#:phases phases) - #~(modify-phases #$phases - (add-after 'configure 'relax-gcc-14-strictness - (lambda _ - (substitute* "config.mak" - (("CFLAGS *=" all) - (string-append all - " -Wno-error=incompatible-pointer-types" - " -Wno-error=int-conversion "))))))))) - (inputs '())))) - -(define-public ffmpeg-for-friction - (package - (inherit ffmpeg-4) - (version "4.2.10") - (source (origin - (method url-fetch) - (uri (string-append "https://ffmpeg.org/releases/ffmpeg-" - version ".tar.xz")) - (sha256 - (base32 - "01jc8ygbazk37wbb7qj24zi9sbfrxrvzhyk527bbas19gxpdrk64")))) - (arguments - (substitute-keyword-arguments (package-arguments ffmpeg-4) - ((#:modules modules %default-gnu-modules) - `((srfi srfi-1) ,@modules)) - ((#:configure-flags flags ''()) - #~(fold delete #$flags - '("--enable-avresample" - "--enable-libaom" - "--enable-libdav1d" - "--enable-librav1e" - "--enable-libsrt" - "--enable-libsvtav1"))))) - (inputs (modify-inputs (package-inputs ffmpeg-4) - (delete "dav1d" "libaom" "rav1e" "srt"))))) + #~(cons "--enable-avresample" + (fold delete #$flags '("--enable-libshaderc")))))))) ;;; Custom ffmpeg package used by Jami, which incorporates custom patches. (define-public ffmpeg-jami - (package - (inherit ffmpeg) - (name "ffmpeg-jami") - (source (let ((ffmpeg-origin (package-source ffmpeg))) - (origin - (inherit ffmpeg-origin) - ;; These patches originate come from - ;; <https://review.jami.net/plugins/gitiles/jami-daemon/+/refs/heads/master/contrib/src/ffmpeg/>. - ;; Make sure to keep them update and/or register any new ones - ;; here. - (patches - (append - (origin-patches ffmpeg-origin) - (search-patches - "ffmpeg-jami-remove-mjpeg-log.patch" - "ffmpeg-jami-change-RTCP-ratio.patch" - "ffmpeg-jami-rtp_ext_abs_send_time.patch" - "ffmpeg-jami-libopusdec-enable-FEC.patch" - "ffmpeg-jami-libopusenc-reload-packet-loss-at-encode.patch" - "ffmpeg-jami-screen-sharing-x11-fix.patch" - "ffmpeg-jami-pipewiregrab-source-filter.patch")))))) - (arguments - (substitute-keyword-arguments (package-arguments ffmpeg) - ((#:configure-flags _ '()) - ;; The base configure flags preserved from ffmpeg appear first. - #~(list "--disable-static" - "--enable-shared" - "--disable-stripping" + (let ((ffmpeg ffmpeg-6)) + (package + (inherit ffmpeg) + (name "ffmpeg-jami") + (source (let ((ffmpeg-origin (package-source ffmpeg))) + (origin + (inherit ffmpeg-origin) + ;; These patches originate come from + ;; <https://review.jami.net/plugins/gitiles/jami-daemon/+/refs/heads/master/contrib/src/ffmpeg/>. + ;; Make sure to keep them update and/or register any new ones + ;; here. + (patches + (append + (origin-patches ffmpeg-origin) + (search-patches + "ffmpeg-jami-remove-mjpeg-log.patch" + "ffmpeg-jami-change-RTCP-ratio.patch" + "ffmpeg-jami-rtp_ext_abs_send_time.patch" + "ffmpeg-jami-libopusdec-enable-FEC.patch" + "ffmpeg-jami-libopusenc-enable-FEC.patch" + "ffmpeg-jami-libopusenc-reload-packet-loss-at-encode.patch" + "ffmpeg-jami-screen-sharing-x11-fix.patch" + "ffmpeg-jami-pipewiregrab-source-filter.patch")))))) + (arguments + (substitute-keyword-arguments (package-arguments ffmpeg) + ((#:configure-flags _ '()) + ;; The base configure flags preserved from ffmpeg appear first. + #~(list "--disable-static" + "--enable-shared" + "--disable-stripping" - ;; Extra Guix-added flags that make sense for this custom - ;; package; these could be contributed upstream. - "--disable-doc" + ;; Extra Guix-added flags that make sense for this custom + ;; package; these could be contributed upstream. + "--disable-doc" - ;; The following flags are those specified by Jami. - ;; They're from the jami/daemon/contrib/src/ffmpeg/rules.mak - ;; file. We try to keep it as close to the official Jami - ;; package as possible, to provide all the codecs and extra - ;; features that are expected (see: - ;; https://review.jami.net/plugins/gitiles/jami-daemon/+/ - ;; refs/heads/master/contrib/src/ffmpeg/rules.mak). - "--disable-everything" - "--enable-zlib" - "--enable-gpl" - "--enable-swscale" - "--enable-bsfs" - "--disable-filters" - "--disable-programs" - "--disable-postproc" + ;; The following flags are those specified by Jami. + ;; They're from the jami/daemon/contrib/src/ffmpeg/rules.mak + ;; file. We try to keep it as close to the official Jami + ;; package as possible, to provide all the codecs and extra + ;; features that are expected (see: + ;; https://review.jami.net/plugins/gitiles/jami-daemon/+/ + ;; refs/heads/master/contrib/src/ffmpeg/rules.mak). + "--disable-everything" + "--enable-zlib" + "--enable-gpl" + "--enable-swscale" + "--enable-bsfs" + "--disable-filters" + "--disable-programs" + "--disable-postproc" - "--enable-libpipewire" - "--enable-filter=pipewiregrab" - "--enable-indev=lavfi" - "--enable-decoder=wrapped_avframe" + "--enable-libpipewire" + "--enable-filter=pipewiregrab" + "--enable-indev=lavfi" + "--enable-decoder=wrapped_avframe" - "--disable-protocols" - "--enable-protocol=crypto" - "--enable-protocol=file" - "--enable-protocol=rtp" - "--enable-protocol=srtp" - "--enable-protocol=tcp" - "--enable-protocol=udp" - "--enable-protocol=unix" - "--enable-protocol=pipe" + "--disable-protocols" + "--enable-protocol=crypto" + "--enable-protocol=file" + "--enable-protocol=rtp" + "--enable-protocol=srtp" + "--enable-protocol=tcp" + "--enable-protocol=udp" + "--enable-protocol=unix" + "--enable-protocol=pipe" - ;; Enable muxers/demuxers. - "--disable-demuxers" - "--disable-muxers" - "--enable-muxer=rtp" - "--enable-muxer=g722" - "--enable-muxer=g723_1" - "--enable-muxer=g726" - "--enable-muxer=g726le" - "--enable-muxer=h263" - "--enable-muxer=h264" - "--enable-muxer=hevc" - "--enable-muxer=matroska" - "--enable-muxer=webm" - "--enable-muxer=ogg" - "--enable-muxer=pcm_s16be" - "--enable-muxer=pcm_s16le" - "--enable-muxer=wav" - "--enable-demuxer=rtp" - "--enable-demuxer=mjpeg" - "--enable-demuxer=mjpeg_2000" - "--enable-demuxer=mpegvideo" - "--enable-demuxer=gif" - "--enable-demuxer=image_jpeg_pipe" - "--enable-demuxer=image_png_pipe" - "--enable-demuxer=image_webp_pipe" - "--enable-demuxer=matroska" - "--enable-demuxer=m4v" - "--enable-demuxer=mp3" - "--enable-demuxer=ogg" - "--enable-demuxer=flac" - "--enable-demuxer=wav" - "--enable-demuxer=ac3" - "--enable-demuxer=g722" - "--enable-demuxer=g723_1" - "--enable-demuxer=g726" - "--enable-demuxer=g726le" - "--enable-demuxer=pcm_mulaw" - "--enable-demuxer=pcm_alaw" - "--enable-demuxer=pcm_s16be" - "--enable-demuxer=pcm_s16le" - "--enable-demuxer=h263" - "--enable-demuxer=h264" - "--enable-demuxer=hevc" + ;; Enable muxers/demuxers. + "--disable-demuxers" + "--disable-muxers" + "--enable-muxer=rtp" + "--enable-muxer=g722" + "--enable-muxer=g723_1" + "--enable-muxer=g726" + "--enable-muxer=g726le" + "--enable-muxer=h263" + "--enable-muxer=h264" + "--enable-muxer=hevc" + "--enable-muxer=matroska" + "--enable-muxer=webm" + "--enable-muxer=ogg" + "--enable-muxer=pcm_s16be" + "--enable-muxer=pcm_s16le" + "--enable-muxer=wav" + "--enable-demuxer=rtp" + "--enable-demuxer=mjpeg" + "--enable-demuxer=mjpeg_2000" + "--enable-demuxer=mpegvideo" + "--enable-demuxer=gif" + "--enable-demuxer=image_jpeg_pipe" + "--enable-demuxer=image_png_pipe" + "--enable-demuxer=image_webp_pipe" + "--enable-demuxer=matroska" + "--enable-demuxer=m4v" + "--enable-demuxer=mp3" + "--enable-demuxer=ogg" + "--enable-demuxer=flac" + "--enable-demuxer=wav" + "--enable-demuxer=ac3" + "--enable-demuxer=g722" + "--enable-demuxer=g723_1" + "--enable-demuxer=g726" + "--enable-demuxer=g726le" + "--enable-demuxer=pcm_mulaw" + "--enable-demuxer=pcm_alaw" + "--enable-demuxer=pcm_s16be" + "--enable-demuxer=pcm_s16le" + "--enable-demuxer=h263" + "--enable-demuxer=h264" + "--enable-demuxer=hevc" - ;; Enable parsers. - "--enable-parser=h263" - "--enable-parser=h264" - "--enable-parser=hevc" - "--enable-parser=mpeg4video" - "--enable-parser=vp8" - "--enable-parser=vp9" - "--enable-parser=opus" + ;; Enable parsers. + "--enable-parser=h263" + "--enable-parser=h264" + "--enable-parser=hevc" + "--enable-parser=mpeg4video" + "--enable-parser=vp8" + "--enable-parser=vp9" + "--enable-parser=opus" - ;; Encoders/decoders. - "--enable-encoder=adpcm_g722" - "--enable-decoder=adpcm_g722" - "--enable-encoder=adpcm_g726" - "--enable-decoder=adpcm_g726" - "--enable-encoder=adpcm_g726le" - "--enable-decoder=adpcm_g726le" - "--enable-decoder=g729" - "--enable-encoder=g723_1" - "--enable-decoder=g723_1" - "--enable-encoder=rawvideo" - "--enable-decoder=rawvideo" - "--enable-encoder=libx264" - "--enable-decoder=h264" - "--enable-encoder=pcm_alaw" - "--enable-decoder=pcm_alaw" - "--enable-encoder=pcm_mulaw" - "--enable-decoder=pcm_mulaw" - "--enable-encoder=mpeg4" - "--enable-decoder=mpeg4" - "--enable-encoder=libvpx_vp8" - "--enable-decoder=vp8" - "--enable-decoder=vp9" - "--enable-encoder=h263" - "--enable-encoder=h263p" - "--enable-decoder=h263" - "--enable-encoder=mjpeg" - "--enable-decoder=mjpeg" - "--enable-decoder=mjpegb" - "--enable-libspeex" - "--enable-libopus" - "--enable-libvpx" - "--enable-libx264" - "--enable-encoder=libspeex" - "--enable-decoder=libspeex" - "--enable-encoder=libopus" - "--enable-decoder=libopus" + ;; Encoders/decoders. + "--enable-encoder=adpcm_g722" + "--enable-decoder=adpcm_g722" + "--enable-encoder=adpcm_g726" + "--enable-decoder=adpcm_g726" + "--enable-encoder=adpcm_g726le" + "--enable-decoder=adpcm_g726le" + "--enable-decoder=g729" + "--enable-encoder=g723_1" + "--enable-decoder=g723_1" + "--enable-encoder=rawvideo" + "--enable-decoder=rawvideo" + "--enable-encoder=libx264" + "--enable-decoder=h264" + "--enable-encoder=pcm_alaw" + "--enable-decoder=pcm_alaw" + "--enable-encoder=pcm_mulaw" + "--enable-decoder=pcm_mulaw" + "--enable-encoder=mpeg4" + "--enable-decoder=mpeg4" + "--enable-encoder=libvpx_vp8" + "--enable-decoder=vp8" + "--enable-decoder=vp9" + "--enable-encoder=h263" + "--enable-encoder=h263p" + "--enable-decoder=h263" + "--enable-encoder=mjpeg" + "--enable-decoder=mjpeg" + "--enable-decoder=mjpegb" + "--enable-libspeex" + "--enable-libopus" + "--enable-libvpx" + "--enable-libx264" + "--enable-encoder=libspeex" + "--enable-decoder=libspeex" + "--enable-encoder=libopus" + "--enable-decoder=libopus" - ;; Encoders/decoders for ringtones and audio streaming. - "--enable-decoder=flac" - "--enable-decoder=vorbis" - "--enable-decoder=aac" - "--enable-decoder=ac3" - "--enable-decoder=eac3" - "--enable-decoder=mp3" - "--enable-decoder=pcm_u24le" - "--enable-decoder=pcm_u32le" - "--enable-decoder=pcm_u8" - "--enable-decoder=pcm_f16le" - "--enable-decoder=pcm_f32le" - "--enable-decoder=pcm_f64le" - "--enable-decoder=pcm_s16le" - "--enable-decoder=pcm_s24le" - "--enable-decoder=pcm_s32le" - "--enable-decoder=pcm_s64le" - "--enable-decoder=pcm_u16le" - "--enable-encoder=pcm_u8" - "--enable-encoder=pcm_f32le" - "--enable-encoder=pcm_f64le" - "--enable-encoder=pcm_s16le" - "--enable-encoder=pcm_s32le" - "--enable-encoder=pcm_s64le" + ;; Encoders/decoders for ringtones and audio streaming. + "--enable-decoder=flac" + "--enable-decoder=vorbis" + "--enable-decoder=aac" + "--enable-decoder=ac3" + "--enable-decoder=eac3" + "--enable-decoder=mp3" + "--enable-decoder=pcm_u24le" + "--enable-decoder=pcm_u32le" + "--enable-decoder=pcm_u8" + "--enable-decoder=pcm_f16le" + "--enable-decoder=pcm_f32le" + "--enable-decoder=pcm_f64le" + "--enable-decoder=pcm_s16le" + "--enable-decoder=pcm_s24le" + "--enable-decoder=pcm_s32le" + "--enable-decoder=pcm_s64le" + "--enable-decoder=pcm_u16le" + "--enable-encoder=pcm_u8" + "--enable-encoder=pcm_f32le" + "--enable-encoder=pcm_f64le" + "--enable-encoder=pcm_s16le" + "--enable-encoder=pcm_s32le" + "--enable-encoder=pcm_s64le" - ;; Encoders/decoders for images. - "--enable-encoder=gif" - "--enable-decoder=gif" - "--enable-encoder=jpegls" - "--enable-decoder=jpegls" - "--enable-encoder=ljpeg" - "--enable-decoder=jpeg2000" - "--enable-encoder=png" - "--enable-decoder=png" - "--enable-encoder=bmp" - "--enable-decoder=bmp" - "--enable-encoder=tiff" - "--enable-decoder=tiff" + ;; Encoders/decoders for images. + "--enable-encoder=gif" + "--enable-decoder=gif" + "--enable-encoder=jpegls" + "--enable-decoder=jpegls" + "--enable-encoder=ljpeg" + "--enable-decoder=jpeg2000" + "--enable-encoder=png" + "--enable-decoder=png" + "--enable-encoder=bmp" + "--enable-decoder=bmp" + "--enable-encoder=tiff" + "--enable-decoder=tiff" - ;; Filters. - "--enable-filter=scale" - "--enable-filter=overlay" - "--enable-filter=amix" - "--enable-filter=amerge" - "--enable-filter=aresample" - "--enable-filter=format" - "--enable-filter=aformat" - "--enable-filter=fps" - "--enable-filter=transpose" - "--enable-filter=pad" + ;; Filters. + "--enable-filter=scale" + "--enable-filter=overlay" + "--enable-filter=amix" + "--enable-filter=amerge" + "--enable-filter=aresample" + "--enable-filter=format" + "--enable-filter=aformat" + "--enable-filter=fps" + "--enable-filter=transpose" + "--enable-filter=pad" - ;; Decoders for ringtones and audio streaming. - "--enable-decoder=pcm_s16be" - "--enable-decoder=pcm_s16be_planar" - "--enable-decoder=pcm_s16le_planar" - "--enable-decoder=pcm_s24be" - "--enable-decoder=pcm_s24le_planar" - "--enable-decoder=pcm_s32be" - "--enable-decoder=pcm_s32le_planar" - "--enable-decoder=pcm_s64be" - "--enable-decoder=pcm_s8" - "--enable-decoder=pcm_s8_planar" - "--enable-decoder=pcm_u16be" + ;; Decoders for ringtones and audio streaming. + "--enable-decoder=pcm_s16be" + "--enable-decoder=pcm_s16be_planar" + "--enable-decoder=pcm_s16le_planar" + "--enable-decoder=pcm_s24be" + "--enable-decoder=pcm_s24le_planar" + "--enable-decoder=pcm_s32be" + "--enable-decoder=pcm_s32le_planar" + "--enable-decoder=pcm_s64be" + "--enable-decoder=pcm_s8" + "--enable-decoder=pcm_s8_planar" + "--enable-decoder=pcm_u16be" - ;; More filters. - "--enable-filter=afir" - "--enable-filter=split" - "--enable-filter=drawbox" - "--enable-filter=drawtext" - "--enable-filter=rotate" - "--enable-filter=loop" - "--enable-filter=setpts" - "--enable-filter=movie" - "--enable-filter=alphamerge" - "--enable-filter=boxblur" - "--enable-filter=lut" - "--enable-filter=negate" - "--enable-filter=colorkey" - "--enable-filter=transpose" + ;; More filters. + "--enable-filter=afir" + "--enable-filter=split" + "--enable-filter=drawbox" + "--enable-filter=drawtext" + "--enable-filter=rotate" + "--enable-filter=loop" + "--enable-filter=setpts" + "--enable-filter=movie" + "--enable-filter=alphamerge" + "--enable-filter=boxblur" + "--enable-filter=lut" + "--enable-filter=negate" + "--enable-filter=colorkey" + "--enable-filter=transpose" - "--enable-libfreetype" + "--enable-libfreetype" - #$@(if (string-contains (%current-system) "linux") - ;; Leave out the '--enable-cuvid' ... '--enable-encoder=hevc_nvenc' - ;; flags, as there's no support for ffnvcodec in Guix; - ;; it would not work with Mesa anyway. - '("--enable-pic" - "--extra-cxxflags=-fPIC" - "--extra-cflags=-fPIC" - "--target-os=linux" - "--enable-indev=v4l2" - "--enable-indev=xcbgrab" - "--enable-vdpau" - "--enable-hwaccel=h264_vdpau" - "--enable-hwaccel=mpeg4_vdpau" - "--enable-vaapi" - "--enable-hwaccel=h264_vaapi" - "--enable-hwaccel=mpeg4_vaapi" - "--enable-hwaccel=h263_vaapi" - "--enable-hwaccel=vp8_vaapi" - "--enable-hwaccel=mjpeg_vaapi" - "--enable-hwaccel=hevc_vaapi" - "--enable-encoder=h264_vaapi" - "--enable-encoder=vp8_vaapi" - "--enable-encoder=mjpeg_vaapi" - "--enable-encoder=hevc_vaapi") - '()))))) - (inputs (modify-inputs (package-inputs ffmpeg) - (append pipewire))))) + #$@(if (string-contains (%current-system) "linux") + ;; Leave out the '--enable-cuvid' ... '--enable-encoder=hevc_nvenc' + ;; flags, as there's no support for ffnvcodec in Guix; + ;; it would not work with Mesa anyway. + '("--enable-pic" + "--extra-cxxflags=-fPIC" + "--extra-cflags=-fPIC" + "--target-os=linux" + "--enable-indev=v4l2" + "--enable-indev=xcbgrab" + "--enable-vdpau" + "--enable-hwaccel=h264_vdpau" + "--enable-hwaccel=mpeg4_vdpau" + "--enable-vaapi" + "--enable-hwaccel=h264_vaapi" + "--enable-hwaccel=mpeg4_vaapi" + "--enable-hwaccel=h263_vaapi" + "--enable-hwaccel=vp8_vaapi" + "--enable-hwaccel=mjpeg_vaapi" + "--enable-hwaccel=hevc_vaapi" + "--enable-encoder=h264_vaapi" + "--enable-encoder=vp8_vaapi" + "--enable-encoder=mjpeg_vaapi" + "--enable-encoder=hevc_vaapi") + '()))))) + (inputs (modify-inputs (package-inputs ffmpeg) + (append pipewire)))))) (define-public ffmpegthumbnailer (package @@ -2485,7 +2440,7 @@ media, 2D/3D graphics and ECMAScript.") dav1d dbus eudev - ffmpeg + ffmpeg-6 flac fontconfig freetype @@ -2722,7 +2677,10 @@ SVCD, DVD, 3ivx, DivX 3/4/5, WMV and H.264 movies.") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 - (base32 "0w0qk61ll0mddbkiwavqfx048sacyvp6fwglms58ypw869rh7iy7")))) + (base32 "0w0qk61ll0mddbkiwavqfx048sacyvp6fwglms58ypw869rh7iy7")) + (patches + (search-patches + "mpv-0.40.0-fix-ffmpeg-8.0.patch")))) (build-system meson-build-system) (arguments (list @@ -2733,14 +2691,7 @@ SVCD, DVD, 3ivx, DivX 3/4/5, WMV and H.264 movies.") (substitute* "player/lua/ytdl_hook.lua" (("\"yt-dlp\",") (string-append - "\"" (search-input-file inputs "bin/yt-dlp") "\","))))) - (add-before 'configure 'build-reproducibly - (lambda _ - ;; Somewhere in the build system library dependencies are enumerated - ;; and passed as linker flags, but the order in which they are added - ;; varies. See <https://github.com/mpv-player/mpv/issues/7855>. - ;; Set PYTHONHASHSEED as a workaround for deterministic results. - (setenv "PYTHONHASHSEED" "1")))) + "\"" (search-input-file inputs "bin/yt-dlp") "\",")))))) #:configure-flags #~(list "-Dlibmpv=true" "-Dcdda=enabled" @@ -2794,7 +2745,7 @@ SVCD, DVD, 3ivx, DivX 3/4/5, WMV and H.264 movies.") ;; XXX: lua > 5.2 is not currently supported; see meson.build lua-5.2 mesa - pipewire + pipewire-minimal pulseaudio shaderc wayland @@ -2811,7 +2762,7 @@ projects while introducing many more.") (define-public smplayer (package (name "smplayer") - (version "23.12.0") + (version "25.6.0") (source (origin (method git-fetch) (uri (git-reference @@ -2819,7 +2770,7 @@ projects while introducing many more.") (commit (string-append "v" version)))) (file-name (git-file-name name version)) (sha256 - (base32 "0yrm57rib910h9m4avhg6mkmkzy9xjb3f185c5zr6jls100az8h1")))) + (base32 "0jwib6pqmsqzbgj2a8xmq8r8fn99a0ri3djif5w4n2mf7523b15a")))) (build-system qt-build-system) (native-inputs (list qttools-5)) @@ -2942,23 +2893,31 @@ Jellyfin. It has support for various media files without transcoding.") (define-public gallery-dl (package (name "gallery-dl") - (version "1.28.2") - (source (origin - (method url-fetch) - (uri (string-append "https://github.com/mikf/gallery-dl" - "/releases/download/v" version "/gallery_dl-" - version ".tar.gz")) - (sha256 - (base32 - "0j4hxp1lbcxgg34ilzhcpxvswgnvvrlk66pn3w9ksv5g8jdz7rpi")))) - (build-system python-build-system) + (version "1.30.8") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/mikf/gallery-dl") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 "1hl1nyaah4l03kg4q382jqdznmlywzwnb4dj71qd40mh6895zswd")))) + (build-system pyproject-build-system) + (arguments + (list + ;; XXX: A lot of those require network. + #:test-flags #~(list "--ignore=test/test_results.py"))) + (native-inputs + (list python-pytest python-setuptools python-wheel nss-certs-for-test)) (inputs (list python-requests ffmpeg)) (home-page "https://github.com/mikf/gallery-dl") (synopsis "Command-line program to download images from several sites") - (description "Gallery-dl is a command-line program that downloads image -galleries and collections from several image hosting sites. While this package -can use youtube-dl or yt-dlp packages to download videos, the focus is more on -images and image hosting sites.") + (description + "Gallery-dl is a command-line program that downloads image galleries and +collections from several image hosting sites. While this package can use +yt-dlp packages to download videos, the focus is more on images and image +hosting sites.") (license license:gpl2))) (define-public mpv-mpris @@ -3031,7 +2990,7 @@ To load this plugin, specify the following option when starting mpv: (file-name (git-file-name name version)))) (build-system meson-build-system) (inputs - (list mpv libdisplay-info wlroots)) + (list mpv libdisplay-info)) (native-inputs (list pkg-config cmake-minimal)) (home-page "https://github.com/GhostNaN/mpvpaper") @@ -3045,7 +3004,7 @@ wallpaper using mpv.") (define-public libvpx (package (name "libvpx") - (version "1.15.0") + (version "1.15.2") (source (origin (method git-fetch) (uri (git-reference @@ -3054,9 +3013,8 @@ wallpaper using mpv.") (file-name (git-file-name name version)) (sha256 (base32 - "1q2scpfiifhpilw6qqpqihk98plj57gwh0vyiqwsv991i7b322bv")) - (patches (search-patches "libvpx-CVE-2016-2818.patch" - "libvpx-CVE-2025-5262.patch")))) + "07c29a5q19613pldp8qm6harqwl7kvqhs7vw4mr8s3dnwyb5jpnl")) + (patches (search-patches "libvpx-CVE-2016-2818.patch")))) (build-system gnu-build-system) (arguments `(#:configure-flags (list "--enable-shared" @@ -3122,8 +3080,8 @@ wallpaper using mpv.") to download videos from Austria's national television broadcaster.") (license license:bsd-3))) -(define-public orf-dl - (deprecated-package "orf-dl" orfondl)) +(define-deprecated-package orf-dl + orfondl) (define-public yle-dl (package @@ -3171,93 +3129,12 @@ to download videos from Austria's national television broadcaster.") video streaming services of the Finnish national broadcasting company Yle.") (license license:gpl3+))) -(define-public youtube-dl - (package - (name "youtube-dl") - (version "2021.12.17") - (source (origin - (method url-fetch) - (uri (string-append "https://youtube-dl.org/downloads/latest/" - "youtube-dl-" version ".tar.gz")) - (sha256 - (base32 - "1prm84ci1n1kjzhikhrsbxbgziw6br822psjnijm2ibqnz49jfwz")) - (snippet - '(begin - ;; Delete the pre-generated files, except for the man page - ;; which requires 'pandoc' to build. - (for-each delete-file '("youtube-dl" - ;;pandoc is needed to generate - ;;"youtube-dl.1" - "youtube-dl.bash-completion" - "youtube-dl.fish" - "youtube-dl.zsh")))))) - (build-system python-build-system) - (arguments - ;; The problem here is that the directory for the man page and completion - ;; files is relative, and for some reason, setup.py uses the - ;; auto-detected sys.prefix instead of the user-defined "--prefix=FOO". - ;; So, we need pass the prefix directly. In addition, make sure the Bash - ;; completion file is called 'youtube-dl' rather than - ;; 'youtube-dl.bash-completion'. - `(#:tests? #f ; Many tests fail. The test suite can be run with pytest. - #:phases (modify-phases %standard-phases - (add-after 'unpack 'default-to-the-ffmpeg-input - (lambda _ - ;; See <https://issues.guix.gnu.org/43418#5>. - ;; ffmpeg is big but required to request free formats - ;; from, e.g., YouTube so pull it in unconditionally. - ;; Continue respecting the --ffmpeg-location argument. - (substitute* "youtube_dl/postprocessor/ffmpeg.py" - (("\\.get\\('ffmpeg_location'\\)" match) - (format #f "~a or '~a'" match (which "ffmpeg")))))) - (add-before 'build 'build-generated-files - (lambda _ - ;; Avoid the make targets that require pandoc. - (invoke "make" - "PYTHON=python" - "youtube-dl" - ;;"youtube-dl.1" ; needs pandoc - "youtube-dl.bash-completion" - "youtube-dl.zsh" - "youtube-dl.fish"))) - (add-before 'install 'fix-the-data-directories - (lambda* (#:key outputs #:allow-other-keys) - (let ((prefix (assoc-ref outputs "out"))) - (mkdir "bash-completion") - (rename-file "youtube-dl.bash-completion" - "bash-completion/youtube-dl") - (substitute* "setup.py" - (("youtube-dl\\.bash-completion") - "bash-completion/youtube-dl") - (("'etc/") - (string-append "'" prefix "/etc/")) - (("'share/") - (string-append "'" prefix "/share/")))))) - (add-after 'install 'install-completion - (lambda* (#:key outputs #:allow-other-keys) - (let* ((out (assoc-ref outputs "out")) - (zsh (string-append out - "/share/zsh/site-functions"))) - (mkdir-p zsh) - (copy-file "youtube-dl.zsh" - (string-append zsh "/_youtube-dl")))))))) - (native-inputs - (list zip)) - (inputs - (list ffmpeg)) - (synopsis "Download videos from YouTube.com and other sites") - (description - "Youtube-dl is a small command-line program to download videos from -YouTube.com and many more sites.") - (home-page "https://yt-dl.org") - (properties '((release-monitoring-url . "https://yt-dl.org/downloads/"))) - (license license:public-domain))) +(define-deprecated/public-alias youtube-dl yt-dlp) (define-public yt-dlp (package (name "yt-dlp") - (version "2025.07.21") + (version "2025.10.22") (source (origin (method git-fetch) @@ -3266,60 +3143,57 @@ YouTube.com and many more sites.") (commit version))) (file-name (git-file-name name version)) (modules '((guix build utils))) - (snippet '(substitute* "pyproject.toml" - (("^.*Programming Language :: Python :: 3\\.13.*$") ""))) + (snippet #~(substitute* "pyproject.toml" + (("^.*Programming Language :: Python :: 3\\.13.*$") ""))) (sha256 - (base32 "051y9pb2imdrpi065d9l2xfmd68l22ahbz90z81yqv7kv84j9mal")))) + (base32 "19viqfk3gnl6yk9p17kp0a21w18yr32qii4grm3mys758ws881ld")))) (build-system pyproject-build-system) (arguments - `(#:tests? ,(not (%current-target-system)) - #:test-flags '("--ignore=test/test_websockets.py") - #:phases - (modify-phases %standard-phases - ;; See <https://issues.guix.gnu.org/43418#5>. - ;; ffmpeg is big but required to request free formats from, e.g., - ;; YouTube so pull it in unconditionally. Continue respecting the - ;; --ffmpeg-location argument. - (add-after 'unpack 'default-to-the-ffmpeg-input - (lambda* (#:key inputs #:allow-other-keys) - (substitute* "yt_dlp/postprocessor/ffmpeg.py" - (("location = self.get_param(.*)$") - (string-append + (list + #:tests? (not (%current-target-system)) + #:test-flags #~'("--ignore=test/test_websockets.py") + #:phases + #~(modify-phases %standard-phases + ;; See <https://issues.guix.gnu.org/43418#5>. + ;; ffmpeg is big but required to request free formats from, e.g., + ;; YouTube so pull it in unconditionally. Continue respecting the + ;; --ffmpeg-location argument. + (add-after 'unpack 'default-to-the-ffmpeg-input + (lambda* (#:key inputs #:allow-other-keys) + (substitute* "yt_dlp/postprocessor/ffmpeg.py" + (("location = self.get_param(.*)$") + (string-append "location = '" (dirname (search-input-file inputs "bin/ffmpeg")) "'\n"))))) - (add-before 'build 'build-generated-files - (lambda* (#:key inputs #:allow-other-keys) - (if (assoc-ref inputs "pandoc") - (invoke "make" - "PYTHON=python" - "yt-dlp" - "yt-dlp.1" - "completions") - (invoke "make" - "PYTHON=python" - "yt-dlp" - "completions")))) - (replace 'check - (lambda* (#:key tests? test-flags #:allow-other-keys) - (when tests? - (apply invoke "pytest" - "-k" - (string-append - "not download" - ;; TestHTTPRequestHandler tests are disabled due to - ;; https://github.com/yt-dlp/yt-dlp/issues/13927 - " and not " - "test_incompleteread" - " and not " - "test_partial_read_then_full_read") - test-flags))))))) + (add-before 'build 'build-generated-files + (lambda* (#:key inputs #:allow-other-keys) + (if (which "pandoc") + (invoke "make" + "PYTHON=python" + "yt-dlp" + "yt-dlp.1" + "completions") + (invoke "make" + "PYTHON=python" + "yt-dlp" + "completions")))) + (replace 'check + (lambda* (#:key tests? test-flags #:allow-other-keys) + (when tests? + (apply invoke "pytest" + "-k" + (string-append + "not download" + " and not " + "test_partial_read_then_full_read") + test-flags))))))) (inputs (list ffmpeg python-brotli python-certifi python-mutagen python-pycryptodomex - python-requests-next ; TODO Remove this special package - python-urllib3-1.26 ; TODO Remove this one too + python-requests + python-urllib3 python-websockets)) (native-inputs (append @@ -3406,8 +3280,7 @@ audio, images) from the Web. It can use either mpv or vlc for playback.") perl-term-readline-gnu perl-unicode-linebreak xdg-utils - ;; Some videos play without youtube-dl, but others silently fail to. - youtube-dl)) + yt-dlp)) (arguments `(#:modules ((guix build perl-build-system) (guix build utils) @@ -3420,9 +3293,9 @@ audio, images) from the Web. It can use either mpv or vlc for playback.") (add-after 'unpack 'refer-to-inputs (lambda* (#:key inputs #:allow-other-keys) (substitute* "lib/WWW/YoutubeViewer.pm" - (("'youtube-dl'") - (format #f "'~a/bin/youtube-dl'" - (assoc-ref inputs "youtube-dl")))) + (("'yt-dlp'") + (format #f "'~a'" + (search-input-file inputs "bin/yt-dlp")))) (substitute* '("bin/gtk2-youtube-viewer" "bin/gtk3-youtube-viewer") (("'xdg-open'") @@ -3489,7 +3362,7 @@ Both command-line and GTK2 interface are available.") python-wcwidth python-websockets python-urllib3 - python-requests-next + python-requests python-pycryptodomex python-mutagen python-brotli @@ -3516,6 +3389,7 @@ playlists.") (build-system go-build-system) (arguments (list + #:go go-1.23 #:install-source? #f #:import-path "github.com/Kethsar/ytarchive" #:embed-files #~(list "children" "nodes" "text") @@ -3889,7 +3763,7 @@ capabilities.") (native-inputs (list autoconf automake - python-cython + python-cython-0 libtool pkg-config yasm)) @@ -4064,7 +3938,7 @@ from sites like Twitch.tv and pipes them into a video player of choice.") (list alsa-lib `(,alsa-plugins "pulseaudio") bash-minimal - ffmpeg + ffmpeg-6 fftw frei0r-plugins gdk-pixbuf @@ -4176,7 +4050,7 @@ be used for realtime video capture via Linux-specific APIs.") (define-public obs (package (name "obs") - (version "31.1.1") + (version "32.0.1") (source (origin (method git-fetch) (uri (git-reference @@ -4186,7 +4060,7 @@ be used for realtime video capture via Linux-specific APIs.") (file-name (git-file-name name version)) (sha256 (base32 - "0dddcvwlh3skd2hd8cmgy74r6l6pmcya9a6hrl9x402y7ywxd50m")) + "10z2bqzcjfpq70316lxcswmgszwazyskmx0xv74c0471bmal1mgp")) (patches (search-patches "obs-modules-location.patch")))) (build-system cmake-build-system) @@ -4204,6 +4078,9 @@ be used for realtime video capture via Linux-specific APIs.") "-DENABLE_AJA=OFF" "-DENABLE_QSV11=OFF" "-DENABLE_NVENC=OFF" + ;; <https://github.com/zaphoyd/websocketpp/issues/1157> + ;; Fix: <https://github.com/zaphoyd/websocketpp/pull/1164> + "-DENABLE_WEBSOCKET=OFF" ;; Browser plugin requires cef, but it is not packaged yet. ;; <https://bitbucket.org/chromiumembedded/cef/src/master/> "-DBUILD_BROWSER=OFF")) @@ -4230,7 +4107,7 @@ be used for realtime video capture via Linux-specific APIs.") (separator #f) ;single entry (files '("share/obs/obs-plugins"))))) (native-inputs - (list cmocka pkg-config swig)) + (list cmocka pkg-config swig extra-cmake-modules)) (inputs (list alsa-lib @@ -4238,7 +4115,6 @@ be used for realtime video capture via Linux-specific APIs.") bash-minimal curl eudev - extra-cmake-modules ffmpeg fontconfig freetype @@ -4264,6 +4140,7 @@ be used for realtime video capture via Linux-specific APIs.") qtsvg qtwayland rnnoise + simde speexdsp v4l-utils uthash @@ -4320,7 +4197,7 @@ and JACK.") (string-append #$output "/share/obs/obs-plugins/obs-advanced-masks/shaders"))))))) - (inputs (list obs qtbase-5)) + (inputs (list obs qtbase-5 simde)) (home-page "https://github.com/FiniteSingularity/obs-advanced-masks") (synopsis "Advanced masking plugin for OBS") (description "OBS Advanced Masks is a project designed to expand the @@ -4380,7 +4257,7 @@ applied via a static image (.png, .jpeg, etc). (string-append #$output "/share/obs/obs-plugins/obs-composite-blur/shaders"))))))) - (inputs (list obs qtbase-5)) + (inputs (list obs qtbase-5 simde)) (home-page "https://github.com/FiniteSingularity/obs-composite-blur") (synopsis "Different blur algorithms for OBS") (description "Composite Blur Plugin is a comprehensive blur plugin that @@ -4426,7 +4303,7 @@ masks. #$(this-package-input "obs") "/lib") "-DBUILD_OUT_OF_TREE=On" "-Wno-dev"))) - (inputs (list obs qtbase-5)) + (inputs (list obs qtbase-5 simde)) (home-page "https://github.com/exeldro/obs-gradient-source") (synopsis "Plugin for adding a gradient Source to OBS Studio") (description "This package provides a plugin for adding a gradient Source @@ -4436,7 +4313,7 @@ to OBS Studio.") (define-public obs-looking-glass (package (name "obs-looking-glass") - (version "B6") + (version "B7") (source (origin (method url-fetch) (uri (string-append "https://looking-glass.io/artifact/" version @@ -4444,7 +4321,7 @@ to OBS Studio.") (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "15d7wwbzfw28yqbz451b6n33ixy50vv8acyzi8gig1mq5a8gzdib")))) + "11crsvy783ig7kzmr2cr68wv9zsjkcbp1akcs28rc6yc1ik0dr89")))) (build-system cmake-build-system) (arguments (list @@ -4490,6 +4367,7 @@ to OBS Studio.") openssl sdl2 sdl2-ttf + simde spice-protocol wayland wayland-protocols @@ -4508,7 +4386,7 @@ your host privately.") (define-public kvmfr-linux-module (package (name "kvmfr-linux-module") - (version "B6") + (version "B7") (source (origin (method url-fetch) (uri (string-append "https://looking-glass.io/artifact/" version @@ -4516,8 +4394,7 @@ your host privately.") (file-name (string-append name "-" version ".tar.gz")) (sha256 (base32 - "15d7wwbzfw28yqbz451b6n33ixy50vv8acyzi8gig1mq5a8gzdib")) - (patches (search-patches "kvmfr-linux-module-fix-build.patch")))) + "11crsvy783ig7kzmr2cr68wv9zsjkcbp1akcs28rc6yc1ik0dr89")))) (build-system linux-module-build-system) (inputs (list bash-minimal)) (arguments @@ -4556,7 +4433,7 @@ Looking Glass.") #$(this-package-input "obs") "/lib") "-DBUILD_OUT_OF_TREE=On" "-Wno-dev"))) - (inputs (list obs qtbase-5)) + (inputs (list obs qtbase-5 simde)) (home-page "https://github.com/exeldro/obs-move-transition") (synopsis "Move transition for OBS Studio") (description "Plugin for OBS Studio to move source to a new position @@ -4597,7 +4474,7 @@ during scene transition.") "/obs-plugins/64bit/obs-multi-rtmp.so") (string-append #$output "/lib/obs-plugins/obs-multi-rtmp.so"))))))) - (inputs (list obs qtbase-5)) + (inputs (list obs qtbase-5 simde)) (home-page "https://github.com/sorayuki/obs-multi-rtmp") (synopsis "Multi-site simultaneous broadcast plugin for OBS Studio") (description "This is a plugin to streaming to multiple RTMP servers @@ -4628,7 +4505,7 @@ configuration (bitrate).") #$(this-package-input "obs") "/lib") "-Wno-dev"))) (native-inputs (list libconfig pkg-config)) - (inputs (list obs pipewire)) + (inputs (list obs pipewire simde)) (home-page "https://obsproject.com/forum/resources/pipewire-audio-capture.1458/") (synopsis "Audio device and application capture for OBS Studio using PipeWire") (description "This plugin adds 3 sources for capturing audio outputs, @@ -4675,7 +4552,7 @@ inputs and applications using PipeWire.") #$output "/share/obs/obs-plugins/obs-shaderfilter/" directory))) '("examples" "textures"))))))) - (inputs (list obs qtbase-5)) + (inputs (list obs qtbase-5 simde)) (home-page "https://github.com/exeldro/obs-shaderfilter") (synopsis "OBS filter for applying an arbitrary shader to a source") (description "Plugin for OBS Studio which is intended to allow users to @@ -4708,7 +4585,7 @@ shader code.") #$(this-package-input "obs") "/lib") "-DBUILD_OUT_OF_TREE=On" "-Wno-dev"))) - (inputs (list obs qtbase-5)) + (inputs (list obs qtbase-5 simde)) (home-page "https://github.com/exeldro/obs-source-clone") (synopsis "Plugin for OBS Studio to clone sources") (description "Add source to OBS that lets you clone sources to allow @@ -4737,7 +4614,7 @@ different filters than the original.") #$(this-package-input "obs") "/lib") "-DBUILD_OUT_OF_TREE=On" "-Wno-dev"))) - (inputs (list obs qtbase-5)) + (inputs (list obs qtbase-5 simde)) (home-page "https://github.com/exeldro/obs-source-copy") (synopsis "OBS plugin for copy and paste scenes, sources and filters") (description "This package provides an OBS plugin for copy and paste @@ -4766,16 +4643,16 @@ scenes, sources and filters.") #$(this-package-input "obs") "/lib") "-DBUILD_OUT_OF_TREE=On" "-Wno-dev"))) - (inputs (list obs)) + (inputs (list obs simde)) (home-page "https://github.com/exeldro/obs-source-record") (synopsis "OBS plugin for recording sources via a filter") (description "This package provides an OBS plugin for recording sources via a filter.") (license license:gpl2))) -(define-public obs-websocket - ;; Functionality was merged into OBS. - (deprecated-package "obs-websocket" obs)) +;; Functionality was merged into OBS. +(define-deprecated-package obs-websocket + obs) (define-public obs-wlrobs (package @@ -4795,7 +4672,7 @@ via a filter.") (native-inputs (list pkg-config)) (propagated-inputs `() ) - (inputs (list obs + (inputs (list obs simde `(,libx11 "out") wayland wayland-protocols)) (home-page "https://hg.sr.ht/~scoopta/wlrobs") (synopsis "OBS plugin for Wayland (wlroots) screen capture") @@ -4825,6 +4702,7 @@ Wayland compositors.") obs libx11 libxcb + simde vulkan-headers vulkan-loader wayland)) @@ -5098,44 +4976,6 @@ specifications.") Content System specification.") (license license:lgpl2.1+))) -(define-public mps-youtube - (package - (name "mps-youtube") - (version "0.2.8") - (source - (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/mps-youtube/mps-youtube") - (commit (string-append "v" version)))) - (file-name (git-file-name name version)) - (sha256 - (base32 - "1w1jhw9rg3dx7vp97cwrk5fymipkcy2wrbl1jaa38ivcjhqg596y")))) - (build-system python-build-system) - (arguments - ;; Tests need to be disabled until #556 upstream is fixed. It reads as if the - ;; test suite results differ depending on the country and also introduce - ;; non-determinism in the tests. - ;; https://github.com/mps-youtube/mps-youtube/issues/556 - '(#:tests? #f - #:phases (modify-phases %standard-phases - ;; Loading this as a library will create cache directories, - ;; etc; which fails in the build container. - (delete 'sanity-check)))) - (propagated-inputs - (list python-pafy python-pygobject)) ; For mpris2 support - (home-page "https://github.com/mps-youtube/mps-youtube") - (synopsis "Terminal based YouTube player and downloader") - (description - "@code{mps-youtube} is based on mps, a terminal based program to -search, stream and download music. This implementation uses YouTube as -a source of content and can play and download video as well as audio. -It can use either mpv or mplayer for playback, and for conversion of -formats ffmpeg or libav is used. Users should install one of the -supported players in addition to this package.") - (license license:gpl3+))) - (define-public handbrake (package (name "handbrake") @@ -5904,8 +5744,10 @@ alpha blending etc).") (source (origin (method url-fetch) - (uri (string-append "https://files.dyne.org/frei0r/" - "frei0r-plugins-" version ".tar.gz")) + (uri (string-append "https://files.dyne.org/frei0r" + "?file=frei0r/old-releases/frei0r-plugins-" + version + ".tar.gz")) (sha256 (base32 "0fjji3060r4fwr7vn91lwfzl80lg3my9lkp94kbyw8xwz7qgh7qv")))) @@ -6315,7 +6157,7 @@ and audio capture, network stream playback, and many more.") (define-public dav1d (package (name "dav1d") - (version "1.5.0") + (version "1.5.1") (source (origin (method git-fetch) @@ -6324,7 +6166,7 @@ and audio capture, network stream playback, and many more.") (commit version))) (file-name (git-file-name name version)) (sha256 - (base32 "0rn8zvmqapjq4r9s9hlpz1866war4ap7hzp5h8qhm5igry7i1qvq")))) + (base32 "1n0b5m4srdjsqg15plc9fng5kjv14ygqahjxy8863fbzhr13vjx9")))) (build-system meson-build-system) (native-inputs (if (target-x86?) @@ -6602,68 +6444,6 @@ result in several formats: (build-system cargo-build-system) (arguments `(#:install-source? #f - #:cargo-inputs - (("rust-aom-sys" ,rust-aom-sys-0.3) - ("rust-arbitrary" ,rust-arbitrary-1) - ("rust-arg-enum-proc-macro" ,rust-arg-enum-proc-macro-0.3) - ("rust-arrayvec" ,rust-arrayvec-0.7) - ("rust-av-metrics" ,rust-av-metrics-0.9) - ("rust-av1-grain" ,rust-av1-grain-0.2) - ("rust-backtrace" ,rust-backtrace-0.3) - ("rust-bitstream-io" ,rust-bitstream-io-2) - ("rust-built" ,rust-built-0.7) - ("rust-byteorder" ,rust-byteorder-1) - ("rust-cc" ,rust-cc-1) - ("rust-cfg-if" ,rust-cfg-if-1) - ("rust-clap" ,rust-clap-4) - ("rust-clap-complete" ,rust-clap-complete-4) - ("rust-console" ,rust-console-0.15) - ("rust-crossbeam" ,rust-crossbeam-0.8) - ("rust-fern" ,rust-fern-0.6) - ("rust-image" ,rust-image-0.24) - ("rust-interpolate-name" ,rust-interpolate-name-0.2) - ("rust-itertools" ,rust-itertools-0.12) - ("rust-ivf" ,rust-ivf-0.1) - ("rust-libc" ,rust-libc-0.2) - ("rust-libdav1d-sys" ,rust-libdav1d-sys-0.6) - ("rust-libfuzzer-sys" ,rust-libfuzzer-sys-0.4) - ("rust-log" ,rust-log-0.4) - ("rust-maybe-rayon" ,rust-maybe-rayon-0.1) - ("rust-nasm-rs" ,rust-nasm-rs-0.2) - ("rust-new-debug-unreachable" ,rust-new-debug-unreachable-1) - ("rust-nom" ,rust-nom-7) - ("rust-noop-proc-macro" ,rust-noop-proc-macro-0.3) - ("rust-num-derive" ,rust-num-derive-0.4) - ("rust-num-traits" ,rust-num-traits-0.2) - ("rust-once-cell" ,rust-once-cell-1) - ("rust-paste" ,rust-paste-1) - ("rust-profiling" ,rust-profiling-1) - ("rust-rand" ,rust-rand-0.8) - ("rust-rand-chacha" ,rust-rand-chacha-0.3) - ("rust-scan-fmt" ,rust-scan-fmt-0.2) - ("rust-serde" ,rust-serde-1) - ("rust-serde-big-array" ,rust-serde-big-array-0.5) - ("rust-signal-hook" ,rust-signal-hook-0.3) - ("rust-simd-helpers" ,rust-simd-helpers-0.1) - ("rust-system-deps" ,rust-system-deps-6) - ("rust-thiserror" ,rust-thiserror-1) - ("rust-toml" ,rust-toml-0.8) - ("rust-tracing" ,rust-tracing-0.1) - ("rust-tracing-chrome" ,rust-tracing-chrome-0.7) - ("rust-tracing-subscriber" ,rust-tracing-subscriber-0.3) - ("rust-v-frame" ,rust-v-frame-0.3) - ("rust-wasm-bindgen" ,rust-wasm-bindgen-0.2) - ("rust-y4m" ,rust-y4m-0.8)) - #:cargo-development-inputs - (("rust-assert-cmd" ,rust-assert-cmd-2) - ("rust-criterion" ,rust-criterion-0.5) - ("rust-interpolate-name" ,rust-interpolate-name-0.2) - ("rust-nom" ,rust-nom-7) - ("rust-pretty-assertions" ,rust-pretty-assertions-1) - ("rust-quickcheck" ,rust-quickcheck-1) - ("rust-rand" ,rust-rand-0.8) - ("rust-rand-chacha" ,rust-rand-chacha-0.3) - ("rust-semver" ,rust-semver-1)) #:phases (modify-phases %standard-phases (replace 'build @@ -6712,7 +6492,7 @@ result in several formats: '()) (list pkg-config rust-cargo-c))) (inputs - (list libgit2-1.8 zlib)) + (cons* libgit2-1.9 zlib (cargo-inputs 'rav1e))) (home-page "https://github.com/xiph/rav1e/") (synopsis "Fast and safe AV1 encoder") (description "@code{rav1e} is an AV1 video encoder. It is designed to @@ -6757,10 +6537,110 @@ and press \"Record\". Peek is optimized for generating animated GIFs, but you can also directly record to WebM or MP4 if you prefer.") (license license:gpl3+))) +(define-public python-yewtube + (package + (name "python-yewtube") + (version "2.12.1") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/mps-youtube/yewtube") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 "1bvn1zcycsq2gnvs10hn82ic8zp9q4s9gmmi6flahg3wavpnspzr")))) + (build-system pyproject-build-system) + (arguments + (list + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'relax-requirements + (lambda _ + (substitute* "mps_youtube/__init__.py" + (("from pip\\._vendor import pkg_resources.*") + "") + (("__version__ =.*") + (format #f "__version__ = ~s~%" + #$(package-version this-package)))) + (substitute* "requirements.txt" + (("httpx.*") + "httpx\n")))) + (add-before 'check 'configure-tests + (lambda _ + (setenv "HOME" (getcwd)))) + ;; XXX: This can happen when some side-effects happens at + ;; initialization. See https://codeberg.org/guix/guix/issues/1089 + (add-before 'sanity-check 'patch-script + (lambda _ + (substitute* (string-append #$output "/bin/.yt-real") + (("import mps_youtube as mod") + "from mps_youtube.main import main") + (("sys\\.exit \\(mod\\.main\\.main \\(\\)\\)") + "sys.exit(main())")))) + (replace 'sanity-check + (lambda _ + (invoke (string-append #$output "/bin/yt") "-h")))))) + (native-inputs + (list python-dbus + python-pygobject + python-pytest + python-setuptools + python-wheel)) + (propagated-inputs + (list python-pylast + python-pyperclip + python-requests + python-youtube-search + yt-dlp)) + (home-page "https://github.com/mps-youtube/yewtube") + (synopsis "Terminal based YouTube player and downloader") + (description + "This package provides a terminal based @code{YouTube} player and +downloader. It does not require a Youtube API key.") + (license license:gpl3+))) + +(define-deprecated/public-alias mps-youtube python-yewtube) + +(define-public python-youtube-search + (package + (name "python-youtube-search") + ;; Original repository is archived, see + ;; https://github.com/alexmercerind/youtube-search-python/issues/189 + ;; The most promising fork (in the sense that it works) is + ;; https://github.com/ahmedayyad-dev/youtube-search-python-fork, + ;; which is therefor packaged in Guix. + (properties '((commit . "6d7e16ebcdc90032392749c2f30f8e29ea0956ae") + (revision . "0"))) + (version (git-version "1.6.6" + (assoc-ref properties 'revision) + (assoc-ref properties 'commit))) + (source + (origin + (method git-fetch) + (uri + (git-reference + (url "https://github.com/ahmedayyad-dev/youtube-search-python-fork") + (commit (assoc-ref properties 'commit)))) + (file-name (git-file-name name version)) + (sha256 + (base32 "1b2sc0v0xw8kqrqy1844xkdsss70npkyk26fprpw3yhz09az5k3q")))) + (arguments (list #:tests? #f)) ;no tests in repository + (build-system pyproject-build-system) + (propagated-inputs (list python-httpx)) + (native-inputs (list python-setuptools)) + (home-page "https://github.com/ahmedayyad-dev/youtube-search-python-fork") + (synopsis "Search for YouTube videos, channels & playlists") + (description + "This package provides tools to search for @code{YouTube} videos, +channels and playlists; as well as getting video metadata from links. This +package does not rely on the @code{YouTube} Data API v3.") + (license license:expat))) + (define-public wf-recorder (package (name "wf-recorder") - (version "0.3.0") + (version "0.5.0") (source (origin (method git-fetch) (uri (git-reference @@ -6769,12 +6649,12 @@ can also directly record to WebM or MP4 if you prefer.") (file-name (git-file-name name version)) (sha256 (base32 - "18csvix8fdqir52q729rgcy355xy2ngvmr05l1abflpbvsklbn52")))) + "0a805kfbgpg7898gbb218n7krbvn9r96xydhibvrphy08wxd1xzg")))) (build-system meson-build-system) (native-inputs (list pkg-config)) (inputs - (list ffmpeg pulseaudio wayland wayland-protocols libx264)) + (list ffmpeg-6 pipewire pulseaudio wayland wayland-protocols libx264 mesa)) (home-page "https://github.com/ammen99/wf-recorder") (synopsis "Screen recorder for wlroots-based compositors") (description @@ -6786,28 +6666,26 @@ wlroots-based compositors. More specifically, those that support (define-public guvcview (package (name "guvcview") - (version "2.0.8") + (version "2.2.1") (source (origin (method url-fetch) (uri (string-append "mirror://sourceforge/guvcview/source/guvcview-" "src-" version ".tar.bz2")) (sha256 (base32 - "108c4g0ns9i1wnxyalmpjqbhlflmrj855vxgggr6qrl6h924w7x2")))) - (build-system gnu-build-system) - (arguments - ;; There are no tests and "make check" would fail on an intltool error. - '(#:tests? #f)) + "1bz5mpvs590dwfvjwgigs6948l31mldm2sz1qd9yhq99fv7cgbfj")))) + (build-system cmake-build-system) + (arguments (list #:tests? #f)) ;There are no tests (native-inputs (list pkg-config intltool)) (inputs - (list bdb - gtk+ + (list gtk+ eudev - libjpeg-turbo libusb v4l-utils ;libv4l2 - ffmpeg ;libavcodec, libavutil + ;; Gentoo patch for ffmpeg-8 reported upstream: + ;; https://sourceforge.net/p/guvcview/tickets/79/ + ffmpeg-6 ;libavcodec, libavutil sdl2 gsl portaudio @@ -6819,8 +6697,6 @@ wlroots-based compositors. More specifically, those that support webcam accessible with Video4Linux (V4L2) and to capture videos and images. It provides control over precise settings of the webcam such as exposure, brightness, contrast, and frame rate.") - - ;; 'COPYING' is GPLv3 but source headers say GPLv2+. (license license:gpl2+))) (define-public get-iplayer @@ -7104,8 +6980,8 @@ Users in group ``wheel'' can skip password authentication.") (home-page "https://github.com/AlynxZhou/showmethekey") (license license:asl2.0))) -(define-public show-me-the-key - (deprecated-package "show-me-the-key" showmethekey)) +(define-deprecated-package show-me-the-key + showmethekey) ;;; ;;; Avoid adding new packages to the end of this file. To reduce the chances |
