1. 程式人生 > 程式設計 >Python做影象處理及視訊音訊檔案分離和合成功能

Python做影象處理及視訊音訊檔案分離和合成功能

一、簡介

Imageio是一個Python庫,提供了一個簡單的介面來讀取和寫入各種影象資料,包括動畫影象,視訊,體積資料和科學格式。它是跨平臺的,執行在Python 2.7和3.4+上,易於安裝。

作為使用者,您只需要記住一些功能:

  • imread()和imwrite() - 用於單個影象
  • mimread()和mimwrite() - 用於影象系列(動畫)
  • volread()和volwrite() - 用於體積影象資料
  • get_reader()和get_writer() - 用於更多控制(例如流式傳輸)
  • 有關更多資訊,請參閱文件。

通過一系列功能簡單的介面。
使用conda或pip 易於安裝。

幾乎沒有依賴(只有Numpy和Pillow)。
純Python,執行在Python 2.7,3.4 +和Pypy上
跨平臺,在Windows,Linux,OS X上執行(Raspberry Pi計劃)
許多支援的格式。
可以讀取檔名,檔案物件,zip檔案,http / ftp和原始位元組。
使用外掛輕鬆擴充套件。
通過許多測試和持​​續整合來維護程式碼質量。

Imageio有一個相對簡單的核心,為不同的檔案格式提供通用介面。這個核心負責從不同的源(如http)讀取,併為外掛公開一個簡單的API來訪問原始資料。所有檔案格式都在外掛中實現。可以輕鬆註冊其他外掛。

一些外掛依賴於外部庫(例如ffmpeg)。Imageio提供了一種通過一個函式呼叫下載這些函式的方法,並在需要時提示使用者這樣做。下載快取在您的appdata目錄中,這可以保持imageio輕鬆和可擴充套件。

Imageio提供各種影象格式,包括科學格式。任何有關實現更多格式的幫助都非常受歡迎!

程式碼庫遵循PEP8樣式指南的(子集)。我們力求最大的測試覆蓋率(核心為100%,每個外掛為> 95%)。

二、程式碼總結:

import subprocess
import imageio
import os
from PIL import Image

def video2mp3(file_name):
 """
 將視訊轉為音訊
 :param file_name: 傳入視訊檔案的路徑
 :return:
 """
 outfile_name = file_name.split('.')[0] + '.mp3'
 subprocess.call('ffmpeg -i ' + file_name
     + ' -f mp3 ' + outfile_name,shell=True)

def video_add_mp3(file_name,mp3_file):
 """
  視訊新增音訊
 :param file_name: 傳入視訊檔案的路徑
 :param mp3_file: 傳入音訊檔案的路徑
 :return:
 """
 outfile_name = file_name.split('.')[0] + '-txt.mp4'
 subprocess.call('ffmpeg -i ' + file_name
     + ' -i ' + mp3_file + ' -strict -2 -f mp4 '
     + outfile_name,shell=True)

def compose_gif(file_path):
 """
  將靜態圖片轉為gif動圖
  :param file_path: 傳入圖片的目錄的路徑
  :return:
 """
 img_paths = sorted([int(p[3:-4]) for p in os.listdir(file_path) if os.path.splitext(p)[1] == ".png"])
 img_paths = img_paths[:int(len(img_paths) / 3.6)]
 gif_images = []
 for path in img_paths:
  gif_images.append(imageio.imread('{0}/out{1}.png'.format(file_path,path)))
 imageio.mimsave("test.gif",gif_images,fps=30)

def compress_png(file_path):
 """
  將gif動圖轉為每張靜態圖片
  :param file_path: 傳入gif檔案的路徑
  :return:
 """
 img_paths = [p for p in os.listdir(file_path) if os.path.splitext(p)[1] == ".png"]
 for filename in img_paths:
  with Image.open('{0}/{1}'.format(file_path,filename)) as im:
   width,height = im.size
   new_width = 150
   new_height = int(new_width * height * 1.0 / width)
   resized_im = im.resize((new_width,new_height))
   output_filename = filename
   resized_im.save('{0}/{1}'.format(file_path,output_filename))

if __name__ == '__main__':
 # video2mp3(file_name='data-a.mp4')
 video_add_mp3(file_name='swap-data-a.mp4',mp3_file='data-a.mp3')
 # compose_gif(file_path='merged')
 # compress_png(file_path='merged')

到此這篇關於Python做影象處理及視訊音訊檔案分離和合成功能的文章就介紹到這了,更多相關python視訊音訊分離和合成內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!