MMEditing 是面向底層視覺任務的工具包,屬于 OpenMMLab 開源算法體系。近期,我們在 MMEditing 中拓展了一個新的方向:視頻插幀。本文將簡要介紹視頻插幀的技術原理,并帶大家使用 MMEditing 實現一個視頻插幀的 Demo。
難度:入門
經過社區開發者的不懈努力,MMEditing 已經支持了大量先進的超分辨率模型,可以將視頻和圖像從低分辨率無損放大到高分辨率,解決了觀眾對超清畫質的追求與經典電影欠佳的畫質之間的矛盾。
然而這還不夠,影響觀看體驗的不僅僅是畫質,還有流暢度,否則。。
技術層面上,畫質對應分辨率,而流暢度則對應幀率。
視頻是連續播放的圖像序列,幀率則表示圖像序列的播放速度。幀率通常以 FPS(Frames per second),即每秒幀數為單位,幀率越高,視頻的流暢度越高,觀感體驗越好。在知乎上,相關的討論也層出不窮。
現如今,主流視頻平臺上 30 FPS、60 FPS 的視頻隨處可見,部分平臺已支持 120 FPS 的視頻。但受限于早期攝影技術以及互聯網有限傳輸帶寬,許多經典影視作品只有 24 FPS 甚至 15 FPS 的幀率,讓我們在回味經典時不免有些小遺憾。而視頻插幀技術可以提高低幀率視頻的流暢度,讓經典重現精彩。
視頻插幀旨在提高視頻的幀率和流暢度,讓視頻看起來更加“絲滑”。
提升幀率似乎并不困難,只需要在相鄰的視頻幀之間插入一個新的視頻幀,視頻的幀率就可以提高一倍。但問題是,這一幀圖像的內容應該是什么樣的?
假設當前幀為
,下一幀為
,中間幀為
,三者均為
的三維數組。
我們可以令
或
,但這樣只是形式上提高了幀率,視頻流暢度沒有得到改善。
我們也可以令
,其中
,即通過像素加權平均產生模糊的中間幀,從而起到一定的過渡效果。但這種方法會降低單幀圖像的質量,產生虛影。如下圖所示,第1、5、8幀是清晰的,而其余中間幀都包含虛影。
而最優方案,則是根據視頻中物體運動狀態,估計出一個清晰的中間幀,如下圖所示。但這個方法有一定難度,因為這個理想的中間幀并不存在于原視頻中,也不能通過簡單的像素平均從相鄰幀獲得。因此,視頻插幀與圖像超分辨率類似,都需要解決“無中生有”的問題。
圖片出處:https://commons.wikimedia.org/wiki/File:Motion_interpolation_example.jpg
在深度學習出現之前,視頻插幀的主流技術大多基于光流。簡單來說,我們通過光流估計算法,得到當前幀
和下一幀
之間的運動矢量場
,再通過圖像扭曲(Image wrapping)技術,用一半矢量場
對圖像
做扭曲,就可以得到中間幀
,如下示意圖所示:
這種方法依賴光流的估計,而傳統的光流估計算法通常速度較慢,精度也較低。
插播一條廣告:OpenMMLab 開源算法體系中的 MMFlow 是首個光流算法的統一框架,支持多種基于深度學習的光流算法。
隨著深度學習技術的出現,光流估計、視頻插幀技術也得到了發展。目前,基于深度學習的視頻插幀算法可分為以下幾類:
各類算法各有優劣,目前 MMEditing 已支持的 CAIN 算法屬于基于 CNN 的算法,使用 MMEditing 支持的 CAIN 算法進行兩次插幀,將幀率從 24 FPS 提高到 96 FPS 的效果。
目前 MMEditing 已支持 CAIN 算法,接下來將詳細介紹其調用方法。
準備環境
a. 創建 Python 環境
我們推薦使用 Conda 創建 Python 環境,以 Python 3.8 為例:
conda create -n mmedit python=3.8 -y
conda activate mmedit
b. 安裝 PyTorch 和 MMCV
MMEditing 基于 PyTorch 和 MMCV,支持 PyTorch 1.5 以上的所有版本,此處以 PyTorch 1.7 為例。
例:安裝 CUDA 版本的 PyTorch 和 MMCV
conda install pytorch==1.7.1 torchvision cudatoolkit=10.1 -c pytorch
pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu101/torch1.7/index.html "opencv-python<=4.5.4.60"
例:安裝 CPU 版本的 PyTorch 和 MMCV
conda install pytorch==1.7.1 torchvision cudatoolkit=10.1 -c pytorch
pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu101/torch1.7/index.html "opencv-python<=4.5.4.60"
您可以根據需要調整 PyTorch 的版本,但需要根據 PyTorch 的版本調整 MMCV 的下載路徑,具體請參考 安裝 MMCV — mmcv 1.4.5 文檔
針對 macOS 平臺,您需要從源碼編譯 MMCV,詳見 從源碼編譯 MMCV — mmcv 1.4.5 文檔
c. 克隆 MMEditing 代碼倉庫
git clone https://github.com/open-mmlab/mmediting.git
cd mmediting
d. 安裝 MMEditing
使用 pip 安裝相關依賴,并從源碼安裝 MMEditing
pip install -r requirements.txt
pip install -v -e . # or "python setup.py develop"
e. 驗證安裝
安裝完成后,可以切換到 /home 目錄,并嘗試在 python 中導入 mmedit,導入成功則證明安裝成功
$ cd ~
$ python
>>> import mmedit
>>> mmedit.__version__
'0.12.0'
我們提供了一個插幀的小 demo 方便大家測試視頻插幀的效果,調用命令如下:
python demo/video_interpolation_demo.py \
configs/video_interpolators/cain/cain_b5_320k_vimeo-triplet.py \
https://download.openmmlab.com/mmediting/video_interpolators/cain/cain_b5_320k_vimeo-triple_20220117-647f3de2.pth \
${INPUT_PATH} \
${OUTPUT_PATH} \
[--fps_multiplier ${FPS_MULTIPLIER}] \
[--fps ${FPS}]
其中,INPUT_PATH 是輸入視頻的路徑,OUTPUT_PATH 是輸出視頻的路徑。路徑可以是一個視頻文件路徑,也可以是包含若干圖像的文件夾(圖像排列需要有序)。
輸出視頻的幀率(FPS)可由 --fps 參數指定,例如:
python demo/video_interpolation_demo.py \
configs/video_interpolators/cain/cain_b5_320k_vimeo-triplet.py \
https://download.openmmlab.com/mmediting/video_interpolators/cain/cain_b5_320k_vimeo-triple_20220117-647f3de2.pth \
input.mp4 \
output.mp4 \
--fps 60
也可根據 --fps_multiplier 在輸入視頻幀率的基礎上倍增(前提是 INPUT_PATH 為視頻文件路徑)
python demo/video_interpolation_demo.py \
configs/video_interpolators/cain/cain_b5_320k_vimeo-triplet.py \
https://download.openmmlab.com/mmediting/video_interpolators/cain/cain_b5_320k_vimeo-triple_20220117-647f3de2.pth \
input.mp4 \
output.mp4 \
--fps_multiplier 2.0
可使用重復調用插幀程序,以獲得更高幀率的視頻:
下面這段代碼可以將兩個視頻左右拼接,并放慢速度,得到文章開頭的對比視頻。代碼行數雖然較多,但邏輯并不復雜,僅調用 MMCV 和 OpenCV 視頻相關的功能,限于篇幅我們這里就不詳細介紹啦。
import cv2
import mmcv
import numpy as np
def vfi_cain_demo(ori_path, vfi_path, result_path, slow=1.0):
"""Compare ori video and interpolated video.
Args:
ori_path (str): Path of original video.
vfi_path (str): Path of interpolated video.
result_path (str): Path of the result video.
slow (float): Slow factor.
"""
print(f'load the original videos: {vfi_path}')
ori_reader=mmcv.VideoReader(ori_path)
ori_fps=ori_reader.fps
ori_images=[]
for img in ori_reader:
ori_images.append(img)
print(f'load the interpolated video: {vfi_path}')
vfi_reader=mmcv.VideoReader(vfi_path)
vfi_fps=vfi_reader.fps
vfi_images=[]
for img in vfi_reader:
vfi_images.append(img)
print(f'merge videos and save to {result_path}')
h, w=vfi_images[0].shape[:2]
rate=round(len(vfi_images) / len(ori_images))
fourcc=cv2.VideoWriter_fourcc(*'mp4v')
video_writer=cv2.VideoWriter(result_path, fourcc, vfi_fps/slow, (w, h))
for i in range(len(vfi_images)):
image=np.zeros_like(vfi_images[i])
print(i, rate, i//rate)
image[:, :w//2]=ori_images[i//rate][:, :w//2]
image[:, w//2:]=vfi_images[i][:, w//2:]
image[:, w//2:w//2+1]=0
video_writer.write(image)
cv2.destroyAllWindows()
拷貝并調用以上函數即可獲得對比視頻。
如果大家對視頻插幀、底層視覺和 MMEditing 感興趣,可以關注我們的代碼庫:
https://github.com/open-mmlab/mmeditinggithub.com/open-mmlab/mmediting
點亮右上角的小星星。
相信一致和模塊化的設計可以減少大家復現各個算法的難度,提升使用體驗。
未來我們會添加更多視頻插幀算法,并發布插幀算法的系列教程。小伙伴們有什么想法可以積極留言,提issue。MMEditing 是共創共享的非盈利項目,我們也歡迎大家參與建設,多提 PR。
PS:我們計劃以插幀任務為例提供代碼庫各模塊詳細介紹與參與指南,大家有什么建議或想了解的內容可以積極發 issue,提 PR
近期我們也建立了 MMEditing 的微信交流群,想要加入的可以私信小編哦~
精致的產品是在線商店成功的一個重要元素。雖然Adobe Photoshop長期以來一直是編輯圖像的行業標準,但也有許多免費或廉價的應用程序和類似的工具。
本文將為大家介紹一些Photoshop的替代品,包括在線應用程序和圖形軟件套件,它們都具有創建動態圖像的高級功能。一些應用程序被設計成使用有用的模板快速格式化圖像,而另一些則具有高級功能來創建令人驚嘆的視覺效果。所有的工具都是免費的或相對便宜的。
1、GIMP
GIMP是GNU Image Manipulation Program的縮寫。它是一個免費的、跨平臺的編輯器,用于照片修飾、圖像合成和圖像創作。GIMP包括一套繪畫工具,包括畫筆、鉛筆、噴槍等??梢允褂眉m正模式修復數碼缺陷,使用克隆工具消除不需要的細節,或者使用新的修復工具修補次要的細節。GIMP有許多來自其龐大的設計人員和開發人員社區的插件和擴展。適用于Linux、macOS和Windows。
價格:免費。
2、Pixelmator
Pixelmator提供了一套用于桌面和移動環境的高級圖像編輯應用程序,包括用于編輯和修飾照片、創建圖形設計、繪圖和繪制矢量圖形的專業工具。添加多個非破壞性效果來顯影圖像,然后將效果組合保存為配方。使用100多種雙紋理筆刷和20多種混合模式進行繪畫。使用適用于iPhone、Mac和Apple Watch的模板創建新圖像。Pixelmator還提供了適用于iPad的照片應用程序(帶有擴展名,可以鏈接到Pro應用程序),以及Pixelmator for iOS應用程序。適用于MacOS和iOS。
價格:標準版為29.99美元;專業版為39.99美元。
3、Sumopaint
發布于2008年的Sumopaint是一個動態的在線工具,用于創建和操作數字圖像。它包括超過300個筆刷(或者自定義創建),以及創造性的工具和濾鏡。包括重力、梯度編輯器、透視映射、線性模糊、閃電效果、液體波、動畫和3D筆刷等等。離線使用Sumopaint可以保存到計算機。Sumopaint社區允許用戶共享圖像,并獲得近100萬注冊用戶的評論。
價格:免費。專業版每月4美元。
4、Acorn
Acorn是MacOS的專業級圖像編輯器。使用Acorn的濾鏡面板可以方便地添加和修改效果,包括傾斜移動、光暈、陰影、漸變、銳化、色彩校正、扭曲和模糊。你可以使用Acorn的形狀工具創建路徑,然后添加文本。使用魔棒選擇工具或即時阿爾法橡皮擦工具刪除圖像背景。使用Acorn的內置設計器創建新畫筆或修改現有的畫筆。Acorn具有超過25個無損混合模式選項。發現一個廣泛的組合層樣式和過濾器。使用Automator、AppleScript和JS執行批處理圖像編輯,對MacOS可用。
價格:29.99美元。
5、Pixlr X
Pixlr X是一個網絡應用程序與必要的在線工具,可以迅速編輯照片,進行裁剪、調整圖片大小、剪切或刪除背景。調整鮮艷度、顏色、亮度等。Pixlr X提供多種濾鏡,如模糊、銳化、紋理,和虛影。同時還提供了許多預制效果,如Artzy、Shades、Retro和Friends。用戶可以使用液化工具來增長、縮小或推動圖像的一部分。Pixlr X可以自動保存圖片,避免丟失。在Dropbox中運行無縫照片編輯工作流程(通過擴展程序),可以立即編輯圖片。Pixlr也有編輯圖片和創建圖片拼貼的移動應用程序。適用于iOS、Android和web應用程序。
價格:免費。
6、Affinity Photo
Affinity Photo是一款提供跨Windows、MacOS和iOS的文件格式兼容性的圖片編輯器。Affinity Photo提供了一個巨大的工具集的創意和攝影專業編輯、潤色,并創建多層次的組成。它提供實時編輯、濾鏡和蒙版、鏡頭校正、校正工具和一組效果,包括模糊、變形、平鋪、陰影、曝光、高光等等。創建自定義畫筆和噴嘴完全控制先進的動態。將多個筆刷和顏料組合在一起。實時預覽你的工作。適用于Windows、MacOS和iOS。
價格:桌面版為49.99美元;iPad版本為19.99美元。
7、PicMonkey
PicMonkey是一個創建有影響力的視覺效果的圖像編輯平臺。應用基本編輯,例如裁切,調整大小和曝光校正。修飾圖像,添加設計師設計的紋理和框架,并應用效果和濾鏡并對其進行分層。PicMonkey提供超過6000個圖形和圖標,數百種字體和數千個模板。用戶可以使用云存儲自動保存圖片。PicMonkey提供桌面和移動版本。還提供一個拼貼工具和平面設計工具,以及用于開發編輯技能的視頻和分步教程。
價格:每月7.99美元起。
8、Photopea
Photopea是一個柵格和矢量圖形的在線編輯器??梢詫⑵溆糜诤唵蔚娜蝿眨缯{整圖像大小,以及復雜的需求,如創建插圖、處理照片、設計web頁面等。Photopea支持圖層并提供多種功能,包括圖層蒙版、混合模式、筆刷、模糊工具、涂抹工具、漸變工具、克隆工具等等。Photopea可以在你的設備中運行,并支持大多數圖像格式,包括RAW、Sketch和PSD。Photopea不會把你的任何文件上傳到互聯網上。
價格:免費。高級計劃每月5美元起。
9、Canva
Canva是一個設計演示文稿、社交媒體圖形等的在線平臺,擁有數千個模板和布局來啟動這個過程。Canva還包含多種用于照片編輯的工具,包括圖像剪切器、校直器、文本工具、語音氣泡發生器、透明度工具、照片增強器、模糊滑塊、用于復古風格的小插圖工具、相框、貼紙、徽章、紋理和免費圖標。設計網格將頁面分為復雜的排列。適用于iOS、Android和網絡應用程序。
價格:每月9.95美元起。
10、Paint.net
Paint.net 最初是由微軟指導的一個本科院校設計項目,最初的目的是免費替換Windows附帶的Microsoft Paint。與其他高級圖像應用程序一樣,Paint.net允許分層工作。該工具包括用于繪制形狀的簡單工具,包括用于樣條曲線或Bezier曲線的易于使用的曲線工具。它還提供漸變工具、克隆工具、文本編輯器、重新著色工具,和一個選擇區域顏色的魔杖。可用于Windows。
價格:免費。
11、Adobe Photoshop Express Editor
Adobe Photoshop Express Editor是一個在線圖像編輯和拼貼工具。提供邊框和文本、增強顏色和圖像、創建圖片拼貼、快速修復等功能,并增強濾鏡和效果。通過添加隨時可用的背景、漸變和布局創建專業質量的照片拼貼。應用樣式轉移功能可在拼貼中的所有圖像上應用相同的外觀。適用于iOS、Android和web應用程序。
價格:免費。
(編譯/雨果網 王璧輝)
【特別聲明】未經許可同意,任何個人或組織不得復制、轉載、或以其他方式使用本網站內容。轉載請聯系:editor@cifnews.com