gnu: ocaml-ezjsonm: Update to 1.1.0.
[jackhill/guix/guix.git] / gnu / packages / video.scm
index d5dc3d2..5029892 100644 (file)
@@ -11,7 +11,7 @@
 ;;; Copyright © 2016 Kei Kebreau <kkebreau@posteo.net>
 ;;; Copyright © 2016 Dmitry Nikolaev <cameltheman@gmail.com>
 ;;; Copyright © 2016 Andy Patterson <ajpatter@uwaterloo.ca>
-;;; Copyright © 2016, 2017 Nils Gillmann <ng0@n0.is>
+;;; Copyright © 2016, 2017 ng0 <ng0@n0.is>
 ;;; Copyright © 2016, 2018, 2019 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2017 Feng Shu <tumashu@163.com>
@@ -25,7 +25,7 @@
 ;;; Copyright © 2018 Roel Janssen <roel@gnu.org>
 ;;; Copyright © 2018, 2019 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2018 Pierre Neidhardt <mail@ambrevar.xyz>
-;;; Copyright © 2018 Leo Famulari <leo@famulari.name>
+;;; Copyright © 2018, 2019 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2018 Brendan Tildesley <brendan.tildesley@openmailbox.org>
 ;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2018 Björn Höfling <bjoern.hoefling@bjoernhoefling.de>
@@ -91,6 +91,7 @@
   #:use-module (gnu packages elf)
   #:use-module (gnu packages file)
   #:use-module (gnu packages flex)
+  #:use-module (gnu packages fonts)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages fribidi)
@@ -377,6 +378,7 @@ H.264 (MPEG-4 AVC) video streams.")
                                "lib/utf8-cpp"))
                    #t))))
     (build-system gnu-build-system)
+    (outputs '("out" "gui")) ; "mkvtoolnix-gui" brings the closure size from ~300 MB to 1.5+ GB.
     (inputs
      `(("boost" ,boost)
        ("bzip2" ,bzip2)
@@ -432,7 +434,34 @@ H.264 (MPEG-4 AVC) video streams.")
              (invoke "rake" "tests/unit")))
          (replace 'install
            (lambda _
-             (invoke "rake" "install"))))))
+             (invoke "rake" "install")))
+         (add-after 'install 'post-install
+           (lambda* (#:key outputs #:allow-other-keys)
+             ;; Move the Qt interface to "gui".
+             (let* ((out (assoc-ref outputs "out"))
+                    (gui (assoc-ref outputs "gui"))
+                    (strip-store-dir (lambda (path)
+                                       (substring path (string-prefix-length out path)))))
+               (for-each
+                (lambda (file)
+                  (mkdir-p (string-append gui (dirname file)))
+                  (rename-file (string-append out file)
+                               (string-append gui file)))
+                (append '("/bin/mkvtoolnix-gui"
+                          "/share/applications/org.bunkus.mkvtoolnix-gui.desktop"
+                          "/share/metainfo/org.bunkus.mkvtoolnix-gui.appdata.xml"
+                          "/share/mime/packages/org.bunkus.mkvtoolnix-gui.xml")
+                        (map strip-store-dir (find-files out "\\.ogg$"))
+                        (map strip-store-dir (find-files out "mkvtoolnix-gui\\.png$"))
+                        (map strip-store-dir (find-files out "mkvtoolnix-gui\\.1"))))
+               (for-each
+                (lambda (file)
+                  (delete-file-recursively (string-append out file)))
+                '("/share/applications"
+                  "/share/metainfo"
+                  "/share/mime"
+                  "/share/mkvtoolnix")))
+             #t)))))
     (home-page "https://mkvtoolnix.download")
     (synopsis "Tools to create, alter and inspect Matroska files")
     (description
@@ -642,15 +671,14 @@ SMPTE 314M.")
 (define-public libmatroska
   (package
     (name "libmatroska")
-    (version "1.4.9")
+    (version "1.5.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://dl.matroska.org/downloads/"
-                           name "/" name "-" version ".tar.xz"))
+                           "libmatroska/libmatroska-" version ".tar.xz"))
        (sha256
-        (base32
-         "1j4mjzx6mjzfjf9hz8g4w84krf5jccmr5cyynll0j1vwv3aiv9iq"))))
+        (base32 "07md2gvy3x92ym2k449740mdji6mhknlajkndnhi507s4wcdrvzh"))))
     (build-system cmake-build-system)
     (inputs
      `(("libebml" ,libebml)))
@@ -728,14 +756,14 @@ standards (MPEG-2, MPEG-4 ASP/H.263, MPEG-4 AVC/H.264, and VC-1/VMW3).")
 (define-public ffmpeg
   (package
     (name "ffmpeg")
-    (version "4.1.1")
+    (version "4.1.3")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://ffmpeg.org/releases/ffmpeg-"
                                  version ".tar.xz"))
              (sha256
               (base32
-               "11id9pm4azfrhpa4vr2yaw31dzgd55kl1zsxwn24sczx9n14jdrp"))))
+               "0gdnprc7gk4b7ckq8wbxbrj7i00r76r9a5g9mj7iln40512j0c0c"))))
     (build-system gnu-build-system)
     (inputs
      `(("fontconfig" ,fontconfig)
@@ -908,14 +936,14 @@ audio/video codec library.")
 (define-public ffmpeg-3.4
   (package
     (inherit ffmpeg)
-    (version "3.4.5")
+    (version "3.4.6")
     (source (origin
              (method url-fetch)
              (uri (string-append "https://ffmpeg.org/releases/ffmpeg-"
                                  version ".tar.xz"))
              (sha256
               (base32
-               "0b59qk5wpc5ksiha76jbhb859g5gxa4w0k6afh3kgvgajiivs73l"))))
+               "0gmqbhg5jjcfanrxrl657zn12lzz73sfs8xwryfy7n9rn6f2fwim"))))
     (arguments
      (substitute-keyword-arguments (package-arguments ffmpeg)
        ((#:configure-flags flags)
@@ -1105,13 +1133,11 @@ videoformats depend on the configuration flags of ffmpeg.")
                (substitute* "modules/text_renderer/freetype/text_layout.c"
                  (("# define FRIBIDI_NO_DEPRECATED 1") ""))
 
-               ;; Fix build against Qt 5.11.
-               (substitute* "modules/gui/qt/actions_manager.cpp"
-                 (("#include <vlc_keys.h>") "#include <vlc_keys.h>
-#include <QAction>"))
-               (substitute* "modules/gui/qt/components/simple_preferences.cpp"
-                 (("#include <QFont>") "#include <QFont>
-#include <QButtonGroup>"))
+               ;; Fix build with libssh2 > 1.8.0:
+               ;; <https://trac.videolan.org/vlc/ticket/22060>
+               ;; <https://git.videolan.org/?p=vlc.git;a=commit;h=11449b5cd8b415768e010d9b7c1d6ba3cea21f82>
+               (substitute* "modules/access/sftp.c"
+                 (("010801") "010900"))
                #t)))
          (add-after 'strip 'regenerate-plugin-cache
            (lambda* (#:key outputs #:allow-other-keys)
@@ -1301,6 +1327,14 @@ SVCD, DVD, 3ivx, DivX 3/4/5, WMV and H.264 movies.")
     (arguments
      '(#:phases
        (modify-phases %standard-phases
+         (add-after
+          'unpack 'patch-paths
+          (lambda* (#:key inputs #:allow-other-keys)
+            (let ((ytdl (assoc-ref inputs "youtube-dl")))
+              (substitute* "player/lua/ytdl_hook.lua"
+                (("\"youtube-dl\",")
+                 (string-append "\"" ytdl "/bin/youtube-dl\",")))
+              #t)))
          (add-before
           'configure 'setup-waf
           (lambda* (#:key inputs #:allow-other-keys)
@@ -1412,7 +1446,7 @@ access to mpv's powerful playback capabilities.")
 (define-public youtube-dl
   (package
     (name "youtube-dl")
-    (version "2019.03.01")
+    (version "2019.04.24")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/rg3/youtube-dl/releases/"
@@ -1420,7 +1454,7 @@ access to mpv's powerful playback capabilities.")
                                   version ".tar.gz"))
               (sha256
                (base32
-                "0bxk6adyppdv50jnp5cika8wc6wfgd6d8zbg1njgmcs1pxskllmf"))))
+                "1kzz3y2q6798mwn20i69imf48kb04gx3rznfl06hb8qv5zxm9gqz"))))
     (build-system python-build-system)
     (arguments
      ;; The problem here is that the directory for the man page and completion
@@ -1531,7 +1565,7 @@ other site that youtube-dl supports.")
 (define-public you-get
   (package
     (name "you-get")
-    (version "0.4.1256")
+    (version "0.4.1270")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -1540,7 +1574,7 @@ other site that youtube-dl supports.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1hzr7ha1jvbc0v2bwl7s08ymwdmvb0f2jz4xp1fi6agq5y3ca1iv"))))
+                "123g6x8sh32v4yn4ss55lfw7j79hgl3l6aiwgrk4ndq7dzhnz46q"))))
     (build-system python-build-system)
     (inputs
      `(("ffmpeg" ,ffmpeg)))             ; for multi-part and >=1080p videos
@@ -1816,15 +1850,15 @@ for use with HTML5 video.")
 (define-public avidemux
   (package
     (name "avidemux")
-    (version "2.7.1")
+    (version "2.7.3")
     (source (origin
              (method url-fetch)
              (uri (string-append
-                   "mirror://sourceforge/" name "/" name "/" version "/"
-                   name "_" version ".tar.gz"))
+                   "mirror://sourceforge/avidemux/avidemux/" version "/"
+                   "avidemux_" version ".tar.gz"))
              (sha256
               (base32
-               "15g9h791qbnmycabbbl7s2b3n3xpvygm88qrfk35g2cw6957ik9w"))
+               "17x2mnnr5h8pp764p55l1xcn2ljnzhbj8cykajlllvk4rc4qwxld"))
              (patches (search-patches "avidemux-install-to-lib.patch"))))
     (build-system cmake-build-system)
     (native-inputs
@@ -1853,77 +1887,78 @@ for use with HTML5 video.")
        ("yasm" ,yasm)
        ("zlib" ,zlib)))
     (arguments
-     `(#:tests? #f ; no check target
+     `(#:tests? #f                      ; no check target
        #:phases
        ;; Make sure files inside the included ffmpeg tarball are
        ;; patch-shebanged.
-       (modify-phases %standard-phases
-       (add-before 'patch-source-shebangs 'unpack-ffmpeg
-         (lambda _
-           (with-directory-excursion "avidemux_core/ffmpeg_package"
-             (invoke "tar" "xf" "ffmpeg-3.3.7.tar.bz2")
-             (delete-file "ffmpeg-3.3.7.tar.bz2"))
-           #t))
-       (add-after 'patch-source-shebangs 'repack-ffmpeg
-         (lambda _
-           (with-directory-excursion "avidemux_core/ffmpeg_package"
-             (substitute* "ffmpeg-3.3.7/configure"
-               (("#! /bin/sh") (string-append "#!" (which "sh"))))
-             (invoke "tar" "cjf" "ffmpeg-3.3.7.tar.bz2" "ffmpeg-3.3.7"
-                     ;; avoid non-determinism in the archive
-                     "--sort=name" "--mtime=@0"
-                     "--owner=root:0" "--group=root:0")
-             (delete-file-recursively "ffmpeg-3.3.7"))
-           #t))
-       (replace 'configure
-         (lambda _
-           ;; Copy-paste settings from the cmake build system.
-           (setenv "CMAKE_LIBRARY_PATH" (getenv "LIBRARY_PATH"))
-           (setenv "CMAKE_INCLUDE_PATH" (getenv "C_INCLUDE_PATH"))
-           #t))
-       (replace 'build
-         (lambda* (#:key inputs outputs #:allow-other-keys)
-           (let* ((out (assoc-ref outputs "out"))
-                  (lib (string-append out "/lib"))
-                  (top (getcwd))
-                  (sdl (assoc-ref inputs "sdl"))
-                  (build_component
-                   (lambda* (component srcdir #:optional (args '()))
-                     (let ((builddir (string-append "build_" component)))
-                       (mkdir builddir)
-                       (with-directory-excursion builddir
-                         (apply invoke "cmake"
-                                "-DCMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUE"
-                                (string-append "-DCMAKE_INSTALL_PREFIX=" out)
-                                (string-append "-DCMAKE_INSTALL_RPATH=" lib)
-                                (string-append "-DCMAKE_SHARED_LINKER_FLAGS="
-                                               "\"-Wl,-rpath=" lib "\"")
-                                (string-append "-DAVIDEMUX_SOURCE_DIR=" top)
-                                (string-append "-DSDL_INCLUDE_DIR="
-                                               sdl "/include/SDL")
-                                (string-append "../" srcdir)
-                                "-DENABLE_QT5=True"
-                                args)
-                         (invoke "make" "-j"
-                                 (number->string (parallel-job-count)))
-                         (invoke "make" "install"))))))
-             (mkdir out)
-             (build_component "core" "avidemux_core")
-             (build_component "cli" "avidemux/cli")
-             (build_component "qt4" "avidemux/qt4")
-             (build_component "plugins_common" "avidemux_plugins"
-                              '("-DPLUGIN_UI=COMMON"))
-             (build_component "plugins_cli" "avidemux_plugins"
-                              '("-DPLUGIN_UI=CLI"))
-             (build_component "plugins_qt4" "avidemux_plugins"
-                              '("-DPLUGIN_UI=QT4"))
-             (build_component "plugins_settings" "avidemux_plugins"
-                              '("-DPLUGIN_UI=SETTINGS"))
-             ;; Remove .exe and .dll file.
-             (delete-file-recursively
-              (string-append out "/share/ADM6_addons"))
-             #t)))
-       (delete 'install))))
+       (let ((ffmpeg "ffmpeg-4.1.1"))
+         (modify-phases %standard-phases
+           (add-before 'patch-source-shebangs 'unpack-ffmpeg
+             (lambda _
+               (with-directory-excursion "avidemux_core/ffmpeg_package"
+                 (invoke "tar" "xf" (string-append ffmpeg ".tar.bz2"))
+                 (delete-file (string-append ffmpeg ".tar.bz2")))
+               #t))
+           (add-after 'patch-source-shebangs 'repack-ffmpeg
+             (lambda _
+               (with-directory-excursion "avidemux_core/ffmpeg_package"
+                 (substitute* (string-append ffmpeg "/configure")
+                   (("#! /bin/sh") (string-append "#!" (which "sh"))))
+                 (invoke "tar" "cjf" (string-append ffmpeg ".tar.bz2") ffmpeg
+                         ;; avoid non-determinism in the archive
+                         "--sort=name" "--mtime=@0"
+                         "--owner=root:0" "--group=root:0")
+                 (delete-file-recursively ffmpeg))
+               #t))
+           (replace 'configure
+             (lambda _
+               ;; Copy-paste settings from the cmake build system.
+               (setenv "CMAKE_LIBRARY_PATH" (getenv "LIBRARY_PATH"))
+               (setenv "CMAKE_INCLUDE_PATH" (getenv "C_INCLUDE_PATH"))
+               #t))
+           (replace 'build
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (lib (string-append out "/lib"))
+                      (top (getcwd))
+                      (sdl (assoc-ref inputs "sdl"))
+                      (build_component
+                       (lambda* (component srcdir #:optional (args '()))
+                         (let ((builddir (string-append "build_" component)))
+                           (mkdir builddir)
+                           (with-directory-excursion builddir
+                             (apply invoke "cmake"
+                                    "-DCMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUE"
+                                    (string-append "-DCMAKE_INSTALL_PREFIX=" out)
+                                    (string-append "-DCMAKE_INSTALL_RPATH=" lib)
+                                    (string-append "-DCMAKE_SHARED_LINKER_FLAGS="
+                                                   "\"-Wl,-rpath=" lib "\"")
+                                    (string-append "-DAVIDEMUX_SOURCE_DIR=" top)
+                                    (string-append "-DSDL_INCLUDE_DIR="
+                                                   sdl "/include/SDL")
+                                    (string-append "../" srcdir)
+                                    "-DENABLE_QT5=True"
+                                    args)
+                             (invoke "make" "-j"
+                                     (number->string (parallel-job-count)))
+                             (invoke "make" "install"))))))
+                 (mkdir out)
+                 (build_component "core" "avidemux_core")
+                 (build_component "cli" "avidemux/cli")
+                 (build_component "qt4" "avidemux/qt4")
+                 (build_component "plugins_common" "avidemux_plugins"
+                                  '("-DPLUGIN_UI=COMMON"))
+                 (build_component "plugins_cli" "avidemux_plugins"
+                                  '("-DPLUGIN_UI=CLI"))
+                 (build_component "plugins_qt4" "avidemux_plugins"
+                                  '("-DPLUGIN_UI=QT4"))
+                 (build_component "plugins_settings" "avidemux_plugins"
+                                  '("-DPLUGIN_UI=SETTINGS"))
+                 ;; Remove .exe and .dll file.
+                 (delete-file-recursively
+                  (string-append out "/share/ADM6_addons"))
+                 #t)))
+           (delete 'install)))))
     (home-page "http://fixounet.free.fr/avidemux/")
     (synopsis "Video editor")
     (description "Avidemux is a video editor designed for simple cutting,
@@ -1983,7 +2018,7 @@ format changes.")
 (define-public xvid
   (package
     (name "xvid")
-    (version "1.3.4")
+    (version "1.3.5")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -1991,7 +2026,7 @@ format changes.")
                     version ".tar.bz2"))
               (sha256
                (base32
-                "1xwbmp9wqshc0ckm970zdpi0yvgqxlqg0s8bkz98mnr8p2067bsz"))))
+                "1d0hy1w9sn6491a3vhyf3vmhq4xkn6yd4ralx1191s6qz5wz483w"))))
     (build-system gnu-build-system)
     (native-inputs `(("yasm" ,yasm)))
     (arguments
@@ -2192,7 +2227,7 @@ be used for realtime video capture via Linux-specific APIs.")
 (define-public obs
   (package
     (name "obs")
-    (version "22.0.3")
+    (version "23.0.2")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -2201,10 +2236,10 @@ be used for realtime video capture via Linux-specific APIs.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0ri9qkqk3h71b1a5bwpjzqdr21bbmfqbykg48l779d20zln23n1i"))))
+                "1c0a5vy4h3qwz69qw3bydyk7r651ib5a9jna4yj6c25p3p9isdvp"))))
     (build-system cmake-build-system)
     (arguments
-     `(#:tests? #f)) ; no tests
+     `(#:tests? #f))                    ; no tests
     (native-inputs
      `(("pkg-config" ,pkg-config)))
     (inputs
@@ -2822,7 +2857,7 @@ many codecs and formats supported by libmediainfo.")
 (define-public livemedia-utils
   (package
     (name "livemedia-utils")
-    (version "2018.10.17")
+    (version "2019.03.06")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -2830,13 +2865,7 @@ many codecs and formats supported by libmediainfo.")
                     version ".tar.gz"))
               (sha256
                (base32
-                "1s69ipvdc6ldscp0cr1zpsll8xc3qcagr95nl84x7b1rbg4xjs3w"))
-              (modules '((guix build utils)))
-              (snippet '(begin
-                          ;; As of glibc 2.26, <xlocale.h> no longer is.
-                          (substitute* "liveMedia/include/Locale.hh"
-                            (("xlocale\\.h") "locale.h"))
-                          #t))))
+                "1gasdl95yjabv811knkmy5laj21a54z1jdfq36jdj984k1nw5l0b"))))
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f ; no tests
@@ -3272,7 +3301,7 @@ create smoother and stable videos.")
 (define-public libopenshot
   (package
     (name "libopenshot")
-    (version "0.2.2")
+    (version "0.2.3")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -3281,7 +3310,7 @@ create smoother and stable videos.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1x4kv05pdq1pglb6y056aa7llc6iyibyhzg93k7zwj0q08cp5ixd"))
+                "0r1qmr8ar5n72603xkj9h065vbpznrqsq88kxxmn9n8djyyvk03k"))
               (modules '((guix build utils)))
               (snippet '(begin
                           ;; Allow overriding of the python installation dir
@@ -3290,9 +3319,7 @@ create smoother and stable videos.")
                              (string-append set " CACHE PATH "
                                             "\"Python bindings directory\")")))
                           (delete-file-recursively "thirdparty")
-                          #t))
-              (patches (search-patches "libopenshot-fixup-tests.patch"
-                                       "libopenshot-tests-with-system-libs.patch"))))
+                          #t))))
     (build-system cmake-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)
@@ -3336,7 +3363,7 @@ API.  It includes bindings for Python, Ruby, and other languages.")
 (define-public openshot
   (package
     (name "openshot")
-    (version "2.4.3")
+    (version "2.4.4")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -3345,10 +3372,15 @@ API.  It includes bindings for Python, Ruby, and other languages.")
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "1qdw1mli4y9qhrnllnkaf6ydgw5vfvdb90chs4i679k0x0jyb9a2"))))
+                "0mg63v36h7l8kv2sgf6x8c1n3ygddkqqwlciz7ccxpbm4x1idqba"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           (delete-file-recursively "src/images/fonts") #t))))
     (build-system python-build-system)
     (inputs
      `(("ffmpeg" ,ffmpeg)
+       ("font-ubuntu" ,font-ubuntu)
        ("libopenshot" ,libopenshot)
        ("python" ,python)
        ("python-pyqt" ,python-pyqt)
@@ -3357,8 +3389,20 @@ API.  It includes bindings for Python, Ruby, and other languages.")
        ("qtsvg" ,qtsvg)))
     (arguments
      `(#:tests? #f                      ;no tests
+       #:modules ((guix build python-build-system)
+                  (guix build qt-utils)
+                  (guix build utils))
+       #:imported-modules (,@%python-build-system-modules
+                            (guix build qt-utils))
        #:phases (modify-phases %standard-phases
                   (delete 'build)       ;install phase does all the work
+                  (add-after 'unpack 'patch-font-location
+                    (lambda* (#:key inputs #:allow-other-keys)
+                      (let ((font (assoc-ref inputs "font-ubuntu")))
+                        (substitute* "src/classes/app.py"
+                          (("info.IMAGES_PATH") (string-append "\"" font "\""))
+                          (("fonts") "share/fonts/truetype")))
+                      #t))
                   (add-before 'install 'set-tmp-home
                     (lambda _
                       ;; src/classes/info.py "needs" to create several
@@ -3366,12 +3410,10 @@ API.  It includes bindings for Python, Ruby, and other languages.")
                       (setenv "HOME" "/tmp")
                       #t))
                   (add-after 'install 'wrap-program
-                    (lambda* (#:key inputs outputs #:allow-other-keys)
-                      (wrap-program (string-append (assoc-ref outputs "out")
-                                                   "/bin/openshot-qt")
-                        `("QT_PLUGIN_PATH" prefix
-                          ,(list (string-append (assoc-ref inputs "qtsvg")
-                                                "/lib/qt5/plugins/")))))))))
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      (let ((out (assoc-ref outputs "out")))
+                        (wrap-qt-program out "openshot-qt"))
+                      #t)))))
     (home-page "https://openshot.org")
     (synopsis "Video editor")
     (description "OpenShot takes your videos, photos, and music files and
@@ -3382,11 +3424,11 @@ transitions, and effects and then export your film to many common formats.")
 (define-public dav1d
   (package
     (name "dav1d")
-    (version "0.2.0")
+    (version "0.2.2")
     (source
       (origin
         (method url-fetch)
-        (uri (list ;; The canonical download site
+        (uri (list ;; The canonical download site.
                    (string-append "https://downloads.videolan.org/pub/videolan/"
                                   "dav1d/" version "/dav1d-" version ".tar.xz")
 
@@ -3394,8 +3436,7 @@ transitions, and effects and then export your film to many common formats.")
                    (string-append "https://code.videolan.org/videolan/dav1d/-/"
                                   "archive/" version "/dav1d-" version ".tar.bz2")))
         (sha256
-         (base32
-          "0q0dbbl91syjnkygz268gh4b7mdcgl6hldj300a4cbqidsadpl5p"))))
+         (base32 "1llf4v486avj83d31670vdd5nshbq10qrx9vwrm1j078dh4ax4q0"))))
     (build-system meson-build-system)
     (native-inputs `(("nasm" ,nasm)))
     (home-page "https://code.videolan.org/videolan/dav1d")
@@ -3432,3 +3473,72 @@ speed and correctness.")
       (description "Wlstream is a screen capture tool for recording audio and
 video from a Wayland session.")
       (license license:lgpl2.1+))))
+
+(define-public gaupol
+  (package
+    (name "gaupol")
+    (version "1.5")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/otsaloma/gaupol/")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0dk44fmcs86ymfxfbpdbrr4x5nn5hnv57wkqjyw61g779xjhlrd2"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("gettext" ,gettext-minimal)
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("python-pygobject" ,python-pygobject)
+       ("gtk+" ,gtk+)
+       ("python-pycairo" ,python-pycairo) ; Required or else clicking on a subtitle line fails.
+       ("python-chardet" ,python-chardet) ; Optional: Character encoding detection.
+       ("gtkspell3" ,gtkspell3)           ; Optional: Inline spell-checking.
+       ("iso-codes" ,iso-codes)           ; Optional: Translations.
+       ("gstreamer" ,gstreamer)
+       ("gst-libav" ,gst-libav)
+       ("gst-plugins-base" ,gst-plugins-base)
+       ("gst-plugins-good" ,gst-plugins-good)
+       ("gst-plugins-bad" ,gst-plugins-bad)
+       ("gst-plugins-ugly" ,gst-plugins-ugly)))
+    (arguments
+     `(#:tests? #f                      ; Tests seem to require networking.
+       #:phases
+       (modify-phases %standard-phases
+         ;; gaupol's setup.py script does not support one of the Python build
+         ;; system's default flags, "--single-version-externally-managed".
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (invoke "python" "setup.py" "install"
+                     (string-append "--prefix=" (assoc-ref outputs "out"))
+                     "--root=/")))
+         (add-after 'install 'wrap-gaupol
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (gst-plugin-path (getenv "GST_PLUGIN_SYSTEM_PATH"))
+                   (gi-typelib-path (getenv "GI_TYPELIB_PATH")))
+               (wrap-program (string-append out "/bin/gaupol")
+                 `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))
+                 `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))))
+             #t))
+         (add-after 'unpack 'patch-data-dir
+           ;; Fix some path variables that setup.py seems to garble.
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (substitute* "setup.py"
+                 (("DATA_DIR = \\{!r\\}\"\\.format\\(data_dir\\)")
+                  (string-append "DATA_DIR = '" out "/share/gaupol'\""))
+                 (("LOCALE_DIR = \\{!r\\}\"\\.format\\(locale_dir\\)")
+                  (string-append "LOCALE_DIR = '" out "/share/locale'\"")))
+               #t))))))
+    (synopsis "Editor for text-based subtitles")
+    (description
+     "Gaupol supports multiple subtitle file formats and provides means of
+creating subtitles, editing texts and timing subtitles to match video.  The
+user interface features a builtin video player and is designed with attention
+to convenience of translating and batch processing of multiple documents.")
+    (home-page "https://otsaloma.io/gaupol/")
+    (license license:gpl3+)))