Subject: [PATCH v4 1/2] gnu: Add python-ffmpeg-python.

From: Parnikkapore <[email-masked]>
Date: Fri, 4 Aug 2023 22:56:09 +0800

* gnu/packages/python-xyz.scm (python-ffmpeg-python): New variable.
---

Here's a v4 that hardcodes and no longer propagates ffmpeg. One of the tests check the
command to be run, including the ffmpeg command used, so that test has to be patched too.

 gnu/packages/python-xyz.scm | 48 +++++++++++++++++++++++++++++++++++++
 1 file changed, 48 insertions(+)

diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index 755b0af4b6..23d14db449 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -139,6 +139,7 @@
 ;;; Copyright © 2023 Dominik Delgado Steuter <[email-masked]>
 ;;; Copyright © 2023 Ivan Vilata-i-Balaguer <[email-masked]>
 ;;; Copyright © 2023 Ontje Lünsdorf <[email-masked]>
+;;; Copyright © 2023 Parnikkapore <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -8918,6 +8919,53 @@ (define-public python-lfdfiles
 experimental data and metadata at the Laboratory for Fluorescence Dynamics.")
     (license license:bsd-3)))
 
+(define-public python-ffmpeg-python
+  ;; The latest release (0.2.0) is old and its test suite crashs on Python 3.10.
+  (let ((commit "df129c7ba30aaa9ffffb81a48f53aa7253b0b4e6") (revision "0"))
+    (package
+      (name "python-ffmpeg-python")
+      (version (git-version "0.2.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/kkroening/ffmpeg-python.git")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1zj4ac37n4igfj21zy405mdlvbpv6jyb12wfpszf8zkhhj2qby4c"))))
+      (build-system python-build-system)
+      (arguments
+       (list
+        #:phases
+        #~(modify-phases %standard-phases
+            (add-after 'unpack 'hardcode-ffmpeg
+              (lambda* (#:key inputs #:allow-other-keys)
+                (define ffmpeg (search-input-file inputs "bin/ffmpeg"))
+                (substitute* "ffmpeg/_run.py"
+                  (("cmd='ffmpeg'")
+                   (string-append "cmd='" ffmpeg "'")))
+                (substitute* "ffmpeg/tests/test_ffmpeg.py"
+                  (("out_file.compile\\(\\) == \\['ffmpeg'")
+                   (string-append "out_file.compile() == ['" ffmpeg "'")))))
+            ;; Some tests fail with ffmpeg 5+
+            (replace 'check
+              (lambda* (#:key tests? #:allow-other-keys)
+                (when tests?
+                  (invoke "pytest" "-vv"
+                          "-k" "not test_pipe and not test__probe")))))))
+      (inputs (list ffmpeg))
+      (propagated-inputs (list python-future))
+      (native-inputs (list python-future python-numpy python-pytest
+                           python-pytest-mock python-pytest-runner))
+      (home-page "https://github.com/kkroening/ffmpeg-python")
+      (synopsis "Python bindings for FFmpeg - with complex filtering support")
+      (description
+       "ffmpeg-python allows you to write FFmpeg filtergraphs in familiar
+Python terms, taking care of running ffmpeg with the correct command-line
+arguments. It handles arbitrarily large (directed-acyclic) signal graphs.")
+      (license license:asl2.0))))
+
 (define-public python-imageio-ffmpeg
   (package
    (name "python-imageio-ffmpeg")

base-commit: 1d837aaa32a3a2de8f4a1ac391f92effba50834e
-- 
2.41.0