Python中基於imageio讀取視訊進行完美編解碼的簡易方法
阿新 • • 發佈:2018-11-01
讀視訊和寫視訊一直由於編解碼的問題給程式設計師造成很多麻煩。對此進行了一些探索。用Python讀取視訊有兩種主要方法,分別是基於imageio庫和OpenCV,其中OpenCV加上ffmpeg的安裝編譯很麻煩,推薦大家使用第一種方法,不過大家也可依據自己的需求進行使用。
方法一:使用imageio庫
1. 一般imageio庫Anconda自帶的有,不用我們單獨安裝,沒有安裝的可用pip安裝或自己下載。imageio使用方法可參考:http://imageio.readthedocs.io/en/latest/examples.html。
下面是一段使用imageio對視訊進行灰度處理的測試程式碼。
1 2 3 4 5 6 7 8 9 10 11 |
# 將彩色視訊轉為灰度視訊
import
imageio
reader
=
imageio.get_reader(
'imageio:cockatoo.mp4'
) fps
=
reader.get_meta_data()[
'fps'
]
writer
=
imageio.get_writer(
'~/cockatoo_gray.mp4'
, fps
=
fps)
for
im
in
reader:
writer.append_data(im[:, :,
1
])
writer.close()
|
2.一般你沒有按照ffmpeg,直接執行會提示如下所示的要安裝ffmpeg,使用conda安裝即可。另一個編解碼器包含比較全的編譯包是https://www.johnvansickle.com/ffmpeg/
1 2 3 |
imageio.core.fetching.NeedDownloadError: Need ffmpeg exe. You can obtain it
with
either:
- install using conda: conda install ffmpeg -c conda-forge
- download by calling: imageio.plugins.ffmpeg.download()
|
所以按照提示執行如下命令安裝conda-forge編譯好的ffmpeg即可,conda-forge編譯的ffmpeg視訊編解碼庫都很齊全,可以直接對視訊讀存取。
1 |
conda install ffmpeg -c conda-forge
|
PS:小技巧,如果conda安裝國外軟體包速度很慢的話,可以給conda新增清華大學的映象源,依次執行下面幾條命令就可以了,安裝速度一般幾M/s.具體可參考https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/
1 2 3 4 |
conda config --add channels https:
//mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https:
//mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https:
//mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --set show_channel_urls yes
|
方法二:使用OpenCV和ffmpeg
安裝較複雜,需編譯很多庫,自己查詢參考相關方法。
下面是使用OpenCV讀取視訊的方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import cv2
cap = cv2.VideoCapture(
'/path/to/your/video.mp4'
)
while
(cap.isOpened()):
ret, frame = cap.read()
cv2.imshow(
'image'
, frame)
k = cv2.waitKey(20)
#q鍵退出
if
(k & 0xff == ord(
'q'
)):
break
cap.release()
cv2.destroyAllWindows()
|