討論如何在Linux系統安裝VapourSynth。
「VapourSynth」是一款開源跨平台的影片處理軟體,使用C++和Python寫成,支援Linux、Windows、macOS系統。
VapourSynth開發靈感來自另一款古老的軟體Avisynth,功能很類似,它能給影片加上許多效果,再搭配其他轉檔軟體使用,組成完整的影片處理管線 (Video Pipeline)。
VapourSynth用途舉例:
- 給影片加濾鏡、去色帶、調整顏色,再交給ffmpeg轉檔(壓制)影片
- 配合vs-mlrt,使用RealESRGAN放大、RIFE補幀後轉檔。
- 使用SVP或MVToools,配合MPV播放器給影片即時補幀。
VapourSynth在轉檔操作時需要撰寫名為.vpy的指令稿(script,語法類似於Python),再交給vspipe程式執行。
不過VapourSynth沒有影片轉碼功能,它得搭配ffmpeg、小丸工具箱、格式工廠、Handbrake這類軟體做進一步處理。
1. 安裝Python#
VapourSynth需要Python 3才能運作,任意版本都可以。Linux發行版大部分都內建Python 3了,沒有的話自行安裝。
為了方便轉檔,順便安裝ffmpeg吧。
Arch Linux
sudo pacman -S python python-pip ffmpeg
Ubuntu
sudo apt install python3 python3-pip ffmpeg
註:如果需要與系統隔離VapourSynth的Python環境,可以先裝 Anaconda再設定VapourSynth
conda create -n vapoursynth python=3.11
conda activate vapoursynth
which python
# 再開始安裝VapourSynth
2. 安裝VapourSynth本體#
根據VapourSynth版本R66官方文件,各大發行版應該都有收VapourSynth。
Arch Linux可以直接從官方套件庫裝:
sudo pacman -S vapoursynth
再使用vspipe指令確認是否安裝成功:
vspipe --version
至於Ubuntu嘛,搞笑的來了,Debian的 deb-multimedia PPA有收VapourSynth,但沒人維護Ubuntu版的套件。所以只好自行編譯了。
Ubuntu 22.04編譯指令:
# 安裝依賴套件
sudo apt-get install build-essential yasm intltool automake autoconf libtool devscripts equivs libavutil-dev libavcodec-dev libswscale-dev python3-dev python3-pip
# CPython > 3.0.5,改用pip裝
python -m pip install Cython
# 手動抓最新版libzimg-dev和libzimg2的deb套件安裝:
wget https://launchpad.net/ubuntu/+archive/primary/+files/libzimg-dev_3.0.5+ds1-1_amd64.deb
wget https://launchpad.net/ubuntu/+archive/primary/+files/libzimg2_3.0.5+ds1-1_amd64.deb
sudo apt install ./libzimg2_3.0.5+ds1-1_amd64.deb
sudo apt install ./libzimg-dev_3.0.5+ds1-1_amd64.deb
# 使用穩定版的Vapoursynth原始碼
wget https://github.com/vapoursynth/vapoursynth/archive/refs/tags/R66.zip
unzip R66.zip
cd vapoursynth
./autogen.sh
./configure
make -j$(nproc)
sudo make install
再用vspipe指令測試是否有安裝成功。你可能需要手動用LD_LIBRARY_PATH
和PYTHONPATH
指定程式位置。
# 確認Python版本
python --version
# 設定動態連結庫路徑
echo "LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib/" >> ~/.bashrc
# 設定Python套件路徑,應為python3.x
echo "PYTHONPATH=${PYTHONPATH}:/usr/local/lib/python3.10/site-packages/" >> ~/.bashrc
source ~/.bashrc
vspipe --version
3. 安裝指令稿編輯器VapourSynth Editor#
VapourSynth Editor是Aleksey Lyashin (Mystery Keeper) 開發的小型IDE,專門用於偵錯.vpy檔案,裡面也有簡單的轉檔功能。
雖然 Flathub有上VapourSynth Editor,但五年沒更新了。
目前有一個持續更新的分支版,由 YomikoR維護,作者只提供Windows版。
Linux版的話 Arch Linux的AUR有套件可以裝。
開啟後就可以編寫vpy指令稿了,按一下Script → Check Script可檢查有無語法錯誤。
Script → Preview預覽效果
Script → Encode轉檔影片,通常是呼叫ffmpeg處理輸出。輸出的影片最好填絕對路徑否則會發生權限錯誤。
4. VapourSynth插件的安裝方式#
VapourSynth的插件(plugin)以Python指令稿方式載入,有的需要使用到動態連結函式庫(Linux系統是.so檔,Windows系統則是.dll檔)。
Windows版VapourSynth內建vsrepo.py install
指令可從官方套件庫安裝插件,但Linux版本沒有這工具,得手動安裝。
有些VapourSynth插件,Linux用戶會將其打包放在套件庫,比如Arch Linux官方套件庫就有 vapoursynth-plugin-mvtools、 vapoursynth-plugin-bestsource等等插件。
如果沒有的話,你就得按照插件作者的指示,手動編譯VapourSynth插件,並將.so檔案放到VapourSynth的插件目錄了。
Linux的插件目錄位於/usr/lib/vapoursynth
或/usr/local/lib/
你也可以手動在~/.config/vapoursynth/vapoursynth.conf
指定插件所在目錄:
UserPluginDir=/home/asdf/vapoursynth/plugins
SystemPluginDir=/special/non/default/location
5. 撰寫.vpy指令稿#
新增script.vpy
檔案,第一行引入VapourSynth模組:
from vapoursynth import core
接著呢…施主,接下來你得自己寫呀,我怎麼知道你要處理什麼呢?影片處理細節講起來會很複雜,請到文末的「參考資料」處找範本。
6. VapourSynth使用例#
搭配ffmpeg使用#
讀取scripy.vpy的內容,處理影片,將影片輸出為y4m格式,並傳給ffmpeg處理。-i -
的部份即vspipe處理後的影片流程,後面可以加上處理參數。
vspipe -c y4m script.vpy - | ffmpeg -i - encoded.mkv
不過vspipe只能單獨輸出視訊流或音訊流,沒辦法二者都放,所以在處理完影片後,還要手動用ffmpeg把視訊流和音訊流合在一起。
除了ffmpeg以外,Vapoursynth也可以輸出給其他編碼器使用,例如flac、x265、aom-av1。
搭配MPV使用#
用法有兩種:使用MPV內建的VapourSynth,或是由VapourSynth透過管道傳給MPV播放。
Arch Linux官方套件庫的MPV 0.37以後版本已經內建VapourSynth,所以你可以直接在MPV的設定檔設定快捷鍵,調用VapourSynth處理正在播放的影片。
例如 MVTools + VapourSynth + MPV達成即時補幀
如果你的MPV沒有內建VapourSynth,就透過管線傳輸處理結果給MPV播放吧。
讀取scripy.vpy的內容,處理影片,並將影片輸出為y4m格式,並傳給MPV
vspipe -c y4m script.vpy - | mpv -
參考資料#
非常詳細的BD影片轉檔教學: 第五章 VapourSynth基础 - VCB Studio
How to VapourSynth, flash3kyuu_db for mpv on Ubuntu & Mint.rst