Related Posts Plugin for WordPress, Blogger...

2013年8月5日 星期一

[軟體] Avisynth + avs腳本

1.5-avisynth-script-creator-menu

嗯…一般來說,大家用來對影片做一些轉檔的動作時,最常用、又免費的軟體,不外乎就是格式工廠freemake video converter倉鼠視頻轉換器 (Hamster Free Video Conver)之類的,有著方便、漂亮介面的軟體。

不過由於最近 android 也好、ios 的手機 app 都已經做得很強大,所以影片大概也不太需要轉檔,不管是 mkv 還是 rmvb,丟進去就可以看了。甚至有些 app 連字幕也可以順利地掛進去。

總覺得轉檔的需求已經慢慢減少了?

接下來要介紹的是比較硬派一點的轉檔方式,Avisynth + megui。還會多少牽涉到一些寫腳本的問題,不喜勿入。XD





1) 什麼是 Avisynth

來源:http://www.pcdvd.com.tw/showthread.php?t=414568

AviSynth是AVI SYNTHesizer的縮寫,意思就是AVI和成器,是一個Frameserver。(Frameserver就是一個把影像文件從一個程序轉換到另外一個程序的過程, 其間沒有臨時文件或中介文件產生)

AviSynth是由Ben Rudiak-Gould首創的一種非常有用的工具,能夠提供各種方式來合並和濾鏡處理影像文件。最獨特的就是AviSynth並不是一個孤立的影像處理程序,而是在影像文件和應用程序之間擔任“中間人”的角色。

AviSynth的基本工作原理是這樣的:

首先建立一個包含特定命令的文本,稱之為“腳本”(后綴為avs),這些命令指定要運行處理的影像文件和濾鏡;

然后運行影像應用程序,比如VD或ND,打開腳本。此時AviSynth就開始工作了,打開腳本中指定的影像文件,運行特定的濾鏡,並把輸出結果提供給影像應用程序。但影像應用程序並不了解AviSynth在后台所做的處理,而認為是直接打開了一個“被處理過”的影像文件。

簡單一點來說,可以這樣想:

avisynth:料理產生機

濾鏡:料理產生機的蒸煮炒炸各式功能

影片、音樂、圖片:食物的原料

avs腳本:食譜

你只要把先把「原料」放到機器裡面,再把「食譜」也放到機器裡面,接下來這台機器就會產出你要的料理,也就是後製過的影片。

這個食譜裡面你可以加上很多東西,比如說「柔化」、「變亮」、「放大縮小」等非常多的功能都可以做。比較厲害的甚至連消除雜訊都有。

原本的avisynth裡面,就有許多功能可以用。但如果嫌功能不夠的話,厲害的可以自己寫函式庫掛進去。不厲害的可以去下載強者在網路上分享的外加功能(濾鏡)。

換言之,料理產生機的功能是可以擴充的。





2) AVS 腳本

要使用 avisynth,除了要學會軟體本身的使用之外,最大的問題就是「食譜」,也就是如何撰寫需要的腳本。

http://avisynth.org/mediawiki/Script_examples

舉上面的第一個例子來說:

AVISource(“somevideo.avi”)

Trim(0, 12000) ++ Trim(20000, 32000) ++ Trim(44000, 0)

第一行是載入 somevideo.avi 這個影片 第二行則是取出這個 somevideo.avi 影片的 0~12000 frames 變成第一段,20000~32000 frames變成第二段,44000~結束 frames變成第三段,然後把這三段再重新組合成一個新的影片。

這算是最簡單的,像第四個例子裡面的參數已經出矩陣了,這個就需要去認真看該 function 的 input 是什麼意思才行。

不過相對來說,因為裡面可使用的功能非常多,再加上腳本的寫法不同,可以自由組合先後順序。也有類似 if else 的 condition 、以及類似 for loop 的語法可用:

http://avisynth.org/mediawiki/Block_statements

整體來說變化度相當的高。因為你在寫程式嘛…當然,難度也相當的高…雖然我的工作是號稱寫程式,但連我也覺得很麻煩。

(工作真的沒問題嗎 XD)  



3) Avisynth 的輔助軟體

最早,avs腳本搭配 avisynth 的用法,應該是先開個 notepad 把 avs腳本打一打,然後就直接 command line 呼叫類似exe檔 + 參數一大堆之類的來完成。 但是由於這樣實在是太麻煩了。所以後來大家還是會使用一些 gui 的補助小程式,來完成這整套的流程。 最早我接觸的是 VirtualDub。

virtualdub

 雖然這套現在還是很紅。但最近比較紅的 (?),應該是有 megui 跟 mediacoder。

megui 20090726011724

其實這三套軟體做的事情應該是差不多的。

提供圖形化介面來讓你設定參數

--> 把你設定過後的參數,轉換成 avs 腳本檔

--> 再將 avs 腳本丟到 avisynth 去做處理

當然,既然軟體最後也是使用「avs腳本+avisynth」的方式做處理,所以這三套軟體也都支援直接輸入avs腳本

換句話說,你可以不要搭理他的圖形化介面設定 (不能完全不理,最後還是有一些小地方要設)。自己開 notepad 寫一個 avs 腳本以後,就塞給他讓他去處理。

專業的人就自己從頭到尾寫 avs 腳本,然後叫軟體做代工,OEM?
偷懶的人可以利用軟體的圖形化界面,設定參數以後,連腳本都叫軟體幫你生,ODM?

嘛…大概就是這樣的感覺。

virtualDub大概有兩三年沒摸了。所以我已經忘記怎麼用了。

而最近用的 megui 跟 mediacoder 來比較的話。我覺得各有擅場。 megui 的介面相對簡單,也就是說,如果要做比較複雜的事的話,多少需要手動修改 avs 腳本。也就是要學會怎麼寫。

mediacoder的話因為可以設定的介面相當多,大部分的事,光靠軟體本身的設定應該就可以解決了,需要手動修改 avs 腳本的機會比較少一點。

如果想要深入學 avs 腳本寫法的人,我比較推薦用 megui。



4) Avisynth 與 Megui 的安裝及使用

安裝的部分可以先看這篇:MeGUI字幕壓製新手教學 - 環境安裝

然後再看這篇:【教學】MeGUI影片壓制,更新壓制

上面的兩篇網址也有包含軟體的下載點。

注意一下兩篇當中提到的neroaacenc的部分。

這兩篇應該就已經包含安裝跟基本使用了。 因為整個要寫下來覺得很麻煩。所以就請大家直接看別人寫好的教學吧。




5) 我自己用的簡單 avs 腳本

LoadPlugin("C:\Program Files (x86)\MeGUI_2308_x86\tools\ffms\ffms2.dll")
LoadPlugin("C:\Program Files (x86)\MeGUI_2308_x86\tools\VSFilter.dll")

########################################
#  自定義 function
#  其中 FF系列跟DirectShowSource系列
#  會視情況挑一個用

########################################
function TacoConvert(string path, float delay, float fps_num)
{
     #v = FFVideoSource(path, threads=1).AssumeFPS(fps_num, true)
     #a = FFAudioSource(path)
     v = DirectShowSource(path, audio=false, fps=fps_num, convertfps=true)
     a = DirectShowSource(path, video=false).DelayAudio(delay)
     return AudioDub(v,a)
}

########################################
#  取得影片+聲音
########################################
video = TacoConvert("E:\test\source.mp4", 0, 29.97)

########################################
#  加黑邊 左,上,右,下,顏色
########################################
video = video.AddBorders(0, 0, 0, 35, $000000)

########################################
#  加入ass字幕
########################################
video = video.TextSub("E:\test\source.ass", 1)

########################################
#  剪輯片段
########################################
video = video.Trim(1000, 20000)

########################################
#  淡入淡出
########################################
video = video.FadeIn2(20)
video = video.FadeOut2(20)

#######################################################
#  Resize
#  16:9 (480, 270)(720, 405)(1280, 720)(1440, 810)
#  4:3  (480, 360)(720, 540)(1280, 960)(1440, 1080)
#######################################################
video = video.LanczosResize(720,480)


########################################
#  回傳結果
########################################
return video



上面紅色的部分關係到你的路徑問題,請自行更換。Trim的 Frame 數也記得自己換一下。不需要的功能可以用 # 註解掉。

還有,avisynth對於中日文路徑的支援度很差,所以盡量都用純英文的路徑

網路上一般 avs 的寫法,都會像 javascript 一樣寫一長串,一路 call 到底。但因為我平常習慣寫 C ,所以我比較喜歡一行一行慢慢寫,自己看得懂。

兩種寫法都可以。就看大家自己的喜好。

針對 avs 語法有興趣的人,可以看看下面這份文件:http://nuuacgclub.dyndns.org/download/AviSynth_teach.pdf

再利用 google 去搜尋相關濾鏡,或是 avisynth 的 wiki 頁面即可。

其實網路上相關的資料還蠻多的。只是不容易看懂就是。XD





5) 用potplayer檢查影音不同步的問題

如果你寫好 avs 腳本,雖然可以用 megui 看到影像部分的處理。但聲音的部分, megui 跟 virtualDub 我記得都是沒辦法事先檢查。

有的時候往往花了大半的時間轉檔,才發現「影音不同步」。

這時候其實你可以在轉檔前,先用 potplayer (kmplayer應該也行) 來檢查。

5-1) 首先,寫好 avs 腳本。

5-2) 直接把 avs 腳本用滑鼠拖到 potplayer 去開

這時候你就會發現,potplayer 會直接播放出轉換過後的效果。不管是聲音也好、影像也好、字幕也好,該有的特效應該都會出現。

但是,這時候 potplayer 其實是處於一種「邊轉檔邊播放」的程度。會吃電腦效能吃蠻多的。

影片的處理部分,可以先用 megui 預覽即可。

如果你還想試再檢查影音同不同步的話,再利用 potplayer 來做,通常播一小段就知道了,也不會佔用太多的時間。

最好是等到檢查都沒事之後再進行轉檔。要不然花了大半時間轉出來結果不能用,會想哭啊…。

如果大家有發現什麼關於 avs 的好教學,可以的話,請留言告知,總覺得還有好多濾鏡的使用法不清楚…。





ass字幕的語法我還學不太熟…所以也沒辦法寫一些介紹文。那些特效寫得出來真的是超級變態啊啊啊啊~~~~~~

像素還是小粒子的噴射做出羽毛效果之類的,這真的是人類做得出來的事情嗎?

沒有留言:

張貼留言