1. 程式人生 > >Python中基於imageio讀取視訊進行完美編解碼的簡易方法

Python中基於imageio讀取視訊進行完美編解碼的簡易方法

讀視訊和寫視訊一直由於編解碼的問題給程式設計師造成很多麻煩。對此進行了一些探索。用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()