skvideo + ffmpeg:无法设置二进制文件的路径

skvideo + ffmpeg: Can't set path to binaries

出于某种原因,设置 ffmpeg 二进制文件的路径并不完全有效。

虽然它看起来像它应该的那样工作:

import skvideo.io
import skvideo.datasets

ffmpeg_path = "C:/Users/xyz/ffmpeg-4.3.1-win64-static/bin/"
skvideo.setFFmpegPath(ffmpeg_path)
print("FFmpeg path: {}".format(skvideo.getFFmpegPath()))
print("FFmpeg version: {}".format(skvideo.getFFmpegVersion()))

>>> FFmpeg path: C:/Users/xyz/ffmpeg-4.3.1-win64-static/bin/
>>> FFmpeg version: b'4'.b'3'.b'1'

运行 这些行紧跟在没有:

videodata = skvideo.io.vread(skvideo.datasets.bigbuckbunny())
print(videodata.shape)

[...]
>>> File "C:\Users\xyz\Anaconda3\envs\cv_env\lib\site-packages\skvideo\io\io.py", line 133, in vread
  assert _HAS_FFMPEG, "Cannot find installation of real FFmpeg (which comes with ffprobe)."
>>> AssertionError: Cannot find installation of real FFmpeg (which comes with ffprobe).

想不通,为什么设置不正确...

感谢官方scikit-video repo中的一些隐藏评论,我想通了。 显然你必须设置路径然后然后再次导入包:

import skvideo

ffmpeg_path = "C:/Users/xyz/ffmpeg-4.3.1-win64-static/bin/"
skvideo.setFFmpegPath(ffmpeg_path)

import skvideo.datasets
import skvideo.io

print("FFmpeg path: {}".format(skvideo.getFFmpegPath()))
print("FFmpeg version: {}".format(skvideo.getFFmpegVersion()))

videodata = skvideo.io.vread(skvideo.datasets.bigbuckbunny())
print(videodata.shape)

>>> FFmpeg path: C:/Users/xyz/ffmpeg-4.3.1-win64-static/bin/
>>> FFmpeg version: b'4'.b'3'.b'1'
>>> (132, 720, 1280, 3)

Ubuntu也不自带ffmpeg。正如@fukiburi 所提到的,一旦 ffmpeg (主要充当独立的二进制文件,无需处理 python 或 skvideo python 包本身)使用 sudo apt-get install ffmpeg,它在 /usr/bin/ 中默认安装 ffmpegffprobeffplay 等,从而解决了问题。