ffmpeg-python icon indicating copy to clipboard operation
ffmpeg-python copied to clipboard

error during building on python 3.10

Open chiboreache opened this issue 3 years ago • 6 comments

Arch Linux - everything is bleeding edge..

==> Starting build()...
running build
running build_py
creating build
creating build/lib
creating build/lib/ffmpeg
copying ffmpeg/_view.py -> build/lib/ffmpeg
copying ffmpeg/_filters.py -> build/lib/ffmpeg
copying ffmpeg/_probe.py -> build/lib/ffmpeg
copying ffmpeg/_utils.py -> build/lib/ffmpeg
copying ffmpeg/dag.py -> build/lib/ffmpeg
copying ffmpeg/_run.py -> build/lib/ffmpeg
copying ffmpeg/_ffmpeg.py -> build/lib/ffmpeg
copying ffmpeg/__init__.py -> build/lib/ffmpeg
copying ffmpeg/nodes.py -> build/lib/ffmpeg
==> Starting check()...
=========================================================================== test session starts ===========================================================================
platform linux -- Python 3.10.2, pytest-6.2.5, py-1.11.0, pluggy-0.13.1
rootdir: /home/chibo/.cache/yay/python-ffmpeg/src/ffmpeg-python-0.2.0, configfile: pytest.ini, testpaths: ffmpeg/tests
plugins: mock-3.7.0
collected 60 items                                                                                                                                                        

ffmpeg/tests/test_ffmpeg.py .....................................................F......                                                                            [100%]

================================================================================ FAILURES =================================================================================
________________________________________________________________________________ test_pipe ________________________________________________________________________________

def test_pipe():
width = 32
height = 32
frame_size = width * height * 3  # 3 bytes for rgb24
frame_count = 10
start_frame = 2

out = (
ffmpeg.input(
'pipe:0',
format='rawvideo',
pixel_format='rgb24',
video_size=(width, height),
framerate=10,
)
.trim(start_frame=start_frame)
.output('pipe:1', format='rawvideo')
)

args = out.get_args()
assert args == [
'-f',
'rawvideo',
'-video_size',
'{}x{}'.format(width, height),
'-framerate',
'10',
'-pixel_format',
'rgb24',
'-i',
'pipe:0',
'-filter_complex',
'[0]trim=start_frame=2[s0]',
'-map',
'[s0]',
'-f',
'rawvideo',
'pipe:1',
]

cmd = ['ffmpeg'] + args
p = subprocess.Popen(
cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE
)

in_data = bytes(
bytearray([random.randint(0, 255) for _ in range(frame_size * frame_count)])
)
p.stdin.write(in_data)  # note: this could block, in which case need to use threads
p.stdin.close()

out_data = p.stdout.read()
>       assert len(out_data) == frame_size * (frame_count - start_frame)
E       AssertionError: assert 30720 == (3072 * (10 - 2))
E        +  where 30720 = len(b'\xe1\xb7\xc8hT\x7fN\x87\xfe\xf7\xda\x16\x14\x1b26H\xb6\xc2\xddm\x00\xac\xbeRa\x98\x9c(\x05\n\xddl\xec0\xbc+}\x0bv\t\...9\xe2\xc8L\x829\xd5\xa4-w\\\xb6l\x88`\xa3is\xa1\x91\x97~\xb4\x85\xee\xc9F\xdb\xba\xe2\t\xd0\x85$\xfc\x16\xe6\xb9\x97eG')

ffmpeg/tests/test_ffmpeg.py:699: AssertionError
============================================================================ warnings summary =============================================================================
../../../../../../../usr/lib/python3.10/site-packages/past/builtins/misc.py:45
/usr/lib/python3.10/site-packages/past/builtins/misc.py:45: DeprecationWarning: the imp module is deprecated in favour of importlib and slated for removal in Python 3.12; see the module's documentation for alternative uses
from imp import reload

ffmpeg/tests/test_ffmpeg.py:31
/home/chibo/.cache/yay/python-ffmpeg/src/ffmpeg-python-0.2.0/ffmpeg/tests/test_ffmpeg.py:31: DeprecationWarning: invalid escape sequence '\:'
assert ffmpeg._utils.escape_chars('a:b', ':') == 'a\:b'

ffmpeg/tests/test_ffmpeg.py::test__get_filter_complex_input
ffmpeg/tests/test_ffmpeg.py::test__multi_output_edge_label_order
/home/chibo/.cache/yay/python-ffmpeg/src/ffmpeg-python-0.2.0/ffmpeg/tests/test_ffmpeg.py:722: FutureWarning: Possible nested set at position 20
m = re.search(r'\[([^]]+)\]{}(?=[[;]|$)'.format(name), flt)

-- Docs: https://docs.pytest.org/en/stable/warnings.html
========================================================================= short test summary info =========================================================================
FAILED ffmpeg/tests/test_ffmpeg.py::test_pipe - AssertionError: assert 30720 == (3072 * (10 - 2))
================================================================ 1 failed, 59 passed, 4 warnings in 0.59s =================================================================
==> ERROR: A failure occurred in check().
Aborting...
-> error making: python-ffmpeg

chiboreache avatar Feb 20 '22 16:02 chiboreache

I have the same issue. I'm on Artix, compiling in a clean chroot. I tried building the most-recent version from git as well, same result. I attempted to see if the problem was ffmpeg 5 rather than 4.4, but the legacy ffmpeg4.4 package doesn't seem to have files in the right directories and I'm not totally sure how to work around that.

frankspace avatar Mar 17 '22 01:03 frankspace

Getting the same error from AUR repository. Any idea on how to fix this?

ghost avatar Mar 23 '22 18:03 ghost

After analyzing this issue, it looks like @frankspace 's hypothesis is correct - it is not caused by python 3.10, but ffmpeg 5.0. It can be worked around by doing a downgrade.

Command for downgrading on Arch-based distributions (downgrades ffmpeg, vmaf and x264 - downgrading other packages may be needed as well): THIS WAS TESTED ONLY IN A CONTAINER - DOWNGRADING PACKAGES MAY BREAK YOUR SYSTEM - USE AT YOUR OWN RISK pacman -U https://archive.archlinux.org/packages/f/ffmpeg/ffmpeg-2%3A4.4.1-1-x86_64.pkg.tar.zst https://archive.archlinux.org/packages/x/x264/x264-3%3A0.163.r3060.5db6aa6-1-x86_64.pkg.tar.zst https://archive.archlinux.org/packages/v/vmaf/vmaf-1.5.3-1-x86_64.pkg.tar.zst Alternatively it is possible to use pacman's cache, as described here.

Depending on your use case, another possible workaround is to remove the failing test (test_pipe) from ffmpeg/tests/test_ffmpeg.py.

gardockt avatar Apr 14 '22 19:04 gardockt

downgrade was never an option..

chiboreache avatar Apr 15 '22 14:04 chiboreache

Here's another build log failing in the same way: https://builds.garudalinux.org/repos/chaotic-aur/logs/python-ffmpeg.log

Technetium1 avatar Jul 27 '22 08:07 Technetium1

Possible fix here? https://aur.archlinux.org/cgit/aur.git/tree/test_pipe.patch?h=python-ffmpeg-patched-git

diff --git a/ffmpeg/tests/test_ffmpeg.py b/ffmpeg/tests/test_ffmpeg.py
index 8dbc271..df0eb52 100644
--- a/ffmpeg/tests/test_ffmpeg.py
+++ b/ffmpeg/tests/test_ffmpeg.py
@@ -684,6 +684,7 @@ def test_mixed_passthrough_selectors():
     ]


+'''
 def test_pipe():
     width = 32
     height = 32
@@ -741,6 +742,7 @@ def test_pipe():
     out_data = p.stdout.read()
     assert len(out_data) == frame_size * (frame_count - start_frame)
     assert out_data == in_data[start_frame * frame_size :]
+'''


 def test__probe():

Technetium1 avatar Oct 05 '22 16:10 Technetium1