星期二, 4月 05, 2011

GoPro 又一神兵利器:慢速播放補插圖(Synthetic Slow Motion)

GoPro的其中一個模式,就是以每秒六十格的速度拍攝解析度達720P的影片,也就是R3模式。這個模式是我最常使用的,因為他的畫質最好,每單位畫素所獲得的碼率,是1080p(R5)攝影模式的4.5倍。
在R3模式下所拍得的影片,如果經由每秒三十格播放(常見的播放規格NTSC),就會形成慢一倍的慢動作播放,而且保有畫面流暢度。

但假如我們希望慢更多倍呢?

這時最直覺的想法就是,把播放率再降低,好比說降到10fps,這樣等於是降了六倍的速度在播放,但這會衍生一個嚴重的問題,影像看起來會不連續,動作會一頓一頓的,有點像是快速連播靜態的相片,影像中任何會動的物體都無法流暢的運動。

想解決這個不流暢的問題,硬體上的辦法就是,買支援更高速度攝影的機器,但這是要花錢的,假如不花錢該怎麼解決呢?

之前在數位減震的文章中,曾經提到免費又專業的影像編輯軟體『Avisynth』,這個開放式的編輯工具就提供一種方式解決此問題,透過運算以類似補插點的方式產生影像,


第一步:將你準備處理的影片,先以Deshaker做畫面穩定,穩定的畫面對於畫素的向量運動偵測會有幫助,補插圖效果會越好。

當你已經有了畫面穩定的影像,到這個網頁下載一個叫做mvtool的外掛,檔案下載之後,直接複製到plugins資料夾即可,這個小工具是用來量測畫素的移動,他並非是Avisynth原本就內建的工具,所以必須以手動的方式匯入。

第二步:(程式碼出處:http://nerds-central.blogspot.com/2007/04/synthetic-slow-motion-with-avisynth.html

LoadPlugin("C:\Program Files (x86)\AviSynth 2.5\plugins\mvtools.dll")
source = AVISource("E:\GoPro影片編輯相關\slowMotion\Sde3765_2.avi",false)
oSource=source
source=ConvertToYV12(source)
source=AssumeFPS(source,30)
backward_vec = source.MVAnalyse(isb = true, truemotion=true, pel=2, idx=1)
forward_vec = source.MVAnalyse(isb = false, truemotion=true, pel=2, idx=1)
cropped = source.crop(4,4,-4,-4) # by half of block size 8
backward_vec2 = cropped.MVAnalyse(isb = true, truemotion=true, pel=2, idx=2)
forward_vec2 = cropped.MVAnalyse(isb = false, truemotion=true, pel=2, idx=2)
fSource=source.MVFlowFps2(backward_vec,forward_vec,backward_vec2,forward_vec2,num=400,idx=1,idx2=2)
fSource=AssumeFPS(fSource,30)
return fSource

以上程式碼,你只要注意我所標出的紅色粗體部分,第一串路徑請直接指向你的mvtools.dll檔案位置。Source=AssumeFPS(source,30)裡的這個『30』所講的是你影片原來的每秒拍攝格數,假如你是用GoPro R3模式拍攝,那麼這裡就要設定成60,其實設定成30也沒什麼不可以,只是他會從放慢一倍的速度開始處理。
倒數第二行的數字400,這個數字就是指,每30格拍攝畫面之間,你想請這個程式幫你模擬產生的虛擬畫面數目。
最後一行的30是用來設定輸出影片的播放率,設定30就是一般NTSC的規格,每秒播放三十格。

確認好你的程式碼以後,用Windows記事本儲存成附檔名.avs的檔案,然後用VirtualDub開啟這個avs檔案,接著你就可以在VirtulaDub裡面得到順暢且慢速的影片,你可以直接選擇你要的編碼並請VirtualDub輸出最後成品,或者再進行其他影片編輯。

使用這種補插圖的方式,要注意一個觀念,類似這樣的作法其目的都不是為了增加解析度(畫面精細度),他只是幫助觀賞者可以欣賞到比較順暢的影片,僅只是順暢,原本沒拍到的細節不可能透過這種方式而無中生有,真正的高速攝影機,才可以進一步拍攝短瞬時間裡的細節。
底下是我所做的範例影片,第一個影片是未處理而直接將影片的播放率降十三倍,第二個影片則是處理後,以慢速十三倍播放。


上面兩個影片的順暢度,相信你們很容易可以察覺。以60fps拍攝,並放慢十倍以上的作法是有點過火了,這大概是等同於60X13.5=810fps的高速攝影了,也因為模擬的畫面比例很高,所以你如果仔細看,可以看到影像上的瑕疵(可注意移動物體的邊緣),假如我們放慢個四、五倍播放,就很難以肉眼察覺補插圖所形成的影像瑕疵,可以更成功模擬出超高速攝影機所達到的拍攝效果。這就是以免費的方法,將GoPro的高速攝影功能進一步發揮到更高等級的效果,而且依照上面這樣的說明,你根本不需要會寫程式碼,以我現在菜的程度,我自己也寫不出來,多虧Dr. Alexander J Turner 這位熱心分享的達人,經過他本人同意後,再此特別與大家分享他的程式碼。

你也許會喜歡的相關文章:

37 則留言:

Alex Turner 提到...

Love your post - and a very cute kid.

Thanks very much.

Google translate did not do too bad a job :)

Best wishes - AJ

馬林魚 提到...

真的蠻威的~

不過學長你的示範影片中,兒子一身藍站在紅色地面上~這樣的差異應該對數位處理來說是蠻容易的,如果是像你平時拍的海底(一片藍藍的),會不會很容易出現畫面異常呢~還是說這是可以用參數修正的哩?

咖哩 提到...

Dear 馬林魚:

你說的很可能會是一個問題,但是我們平常在拍攝的時候,很少會使得想拍攝的主題(物體)和背景太過相似,因為這樣的影片不夠能凸顯主題,可能不太值得用來跑後製成為超慢速的播放橋段。

咖哩 提到...

Dear Alex:

hahahaha.......He is my son.

Thanks for your sharing,so amazing code!!!

子亮 提到...

有趣,看來瞬間動態不太大的動作,這樣處理還蠻有效果的

咖哩 提到...

親愛的子亮:

算是一種變通的作法,只要動作不要太劇烈(相對的拍攝的速度不要太慢、放慢倍數不要太高),效果都會不錯。

Yon 提到...

原來如此,難怪之前把影片速度直接拉低會有頓頓的感覺,感謝無私的分享。

咖哩 提到...

Dear Yon:

有了這個補插圖的小工具,就可以成功解決這個問題,不過放慢倍數也不要太高喔!否則很有可能會出現一些錯誤的插圖而使得影像非常『奇特』。

Yon 提到...

咖哩大哥,我又來發問了

請教一下,使用virtualdub來deshaker(第一步),及第二步的slowmotion是要分兩次來執行嗎?

Filter的功能選單是允許同時加入多個濾件,再同時進行[run video analysis]?

avs 文件是算程式碼而不是filter?

麻煩你了。

咖哩 提到...

Dear Yon:

因為我每次Deshaker完以後,都會確認一下影片結果,所以我自己都是分開做,我覺得一起做應該也可以,因為原本就可以多個filter一起跑。

avs是一段程式碼(文字檔),本身不能像是濾鏡這樣匯入,他只是讓virtualdub按照指令下去跑,我覺得算是一種後製的操作方式。

fish 提到...

有大大願意交交我這個呆子嗎?手裡有一部kodak zx5可拍1280*720(60fps)檔案格式為mp4(h.264),想試試看能不能也慢速播放,這兩天爬了很多文,試了很多次都失敗,有大大願意交如何才能成功嗎?感恩!

咖哩 提到...

Dear Fish

慢速播放和補插圖是兩回事,你如果手中已經有60fps的檔案,要慢速播放一倍速,那就直接在後製軟體裡選擇輸出成30fps的影像,這個過程應該非常快就可以完成了。

假如你是要放慢到接近十倍速的慢,那才需要來補插圖,請說明清楚你的問題癥結,這樣才好幫你回答。

fish 提到...

謝謝大大的回覆,我真的是門外漢所以請多多包涵,透過大大回覆的內容我才知道我該怎樣表達我的問題,感謝您!我想問的意思是我用60fps的模式下去拍,主要是拍隊友打球畫面,但是揮棒到擊球的過程中卻是會頓,無法完整看到揮棒到打到球的過程,請問大大可用什麼軟體來加強呢?感謝大大的回覆!

咖哩 提到...

『我想問的意思是我用60fps的模式下去拍,主要是拍隊友打球畫面,但是揮棒到擊球的過程中卻是會頓,』

請問你播放的時候,是多少fps在播放?

fish 提到...

我是用繪聲繪影這套軟體製作然後剪下從揮棒到擊到球的片段選擇播放速度10%(軟體選項只能選10%-100%)這樣看起來就一頓一噸的不會順暢,謝謝您!

咖哩 提到...

Dear Fish

我不知道你所使用的軟體怎麼做後製的,這種套裝軟體就是麻煩在這裡,用起來好像很方便,但就是為了方便,他不告訴你背後的處理細節。

假如你把60fps的影片,改成以30fps播放,這是不可能有一頓一頓的感覺,但假如你要慢到十倍速,那就請忘了套裝軟體這回事,請你參考本文,使用Avisynth,假如你在使用上有什麼問題,歡迎隨時提出來,我們一起討論,其方便性絕對不如套裝軟體,但使用的靈活度絕對會讓專業玩家滿意。

fish 提到...

謝謝您的指導,先專心研究Avisynth這套軟體了!

咖哩 提到...

別客氣!歡迎隨時討論~

fish 提到...

咖哩大,馬上又來麻煩您了,我下載了 AviSynth 2.5.8版,安裝後卻找不到可執行的圖檔...裡面有三個網站,兩個資料夾,一個字幕檔,還有一個解除安裝漲檔,裡面沒有執行檔,請問咖哩大要怎麼用呢?麻煩您了,謝謝!

咖哩 提到...

Dear Fish:

Avisynth不是用來執行的.......

如文章所寫的步驟:
1.『到這個網頁下載一個叫做mvtool的外掛,檔案下載之後,直接複製到plugins資料夾即可,這個小工具是用來量測畫素的移動,他並非是Avisynth原本就內建的工具,所以必須以手動的方式匯入。』

2.到Windows筆記本裡頭去寫程式碼,如文章所附,附檔名存成.avs。

3.到Virtualdub裡頭去開剛剛的程式碼,成功開啟後就可以輸出完成影像。

fish 提到...

咖哩大您好,我終於試出畫面了,先決條件是不是要先將h.264(60fps)轉成avi(60fps)現在遇到一個問題是...開啟avs檔所播出的畫面非常慢(快要接近靜止畫面)要選哪一個選項才能像影片中小朋友第二張的撥放速度呢?謝謝您!

咖哩 提到...

Dear fish

將MP4轉成AVI幾乎是所有影片後製的基本原則,畢竟AVI的相容性最好。

關於你的播放速度的問題,請參考文章中的這一段

『以上程式碼,你只要注意我所標出的紅色粗體部分,第一串路徑請直接指向你的mvtools.dll檔案位置。Source=AssumeFPS(source,30)裡的這個『30』所講的是你影片原來的每秒拍攝格數,假如你是用GoPro R3模式拍攝,那麼這裡就要設定成60,其實設定成30也沒什麼不可以,只是他會從放慢一倍的速度開始處理。
倒數第二行的數字400,這個數字就是指,每30格拍攝畫面之間,你想請這個程式幫你模擬產生的虛擬畫面數目。
最後一行的30是用來設定輸出影片的播放率,設定30就是一般NTSC的規格,每秒播放三十格。』

fish 提到...

咖哩大您好,請問您有用gopro這款攝影機嗎?我有一個疑問是當gopro錄滿一個4g的容量後會自動另外再生一個檔案然後繼續錄下去嗎?還是說就停住了。
另外是不是碼率越高錄像會越清晰用輔助軟體的效果會越好,還有我個人認為gopro加軟體輔助好像極限就是這樣,無法做出真正高張力的slowmotion。
如果攝影需求是上山下海,以萬元附近的價位考量我看非gopro莫屬了,還是說大大有可以推薦的機種,還請大大不吝指教,謝謝您!

咖哩 提到...

Dear Fish:

『請問您有用gopro這款攝影機嗎?』

你這個問題真的是很誇張!非常的不可思議,我不是一直都在用GoPro攝影,並在部落格上發表一大堆作品,幾乎每個作品的文章都一直在GoPro長GoPro短的嗎?

GoPro的錄影會一直連續下去,不會就停住,除非記憶卡有問題。

能不能做出好的慢動作,要問機器的fps,GoPro就是60fps,別的dv如果也只是60fps,那做出來效果完全一樣,這不是機器的問題。

至於我有沒有其他推薦機種,請你『稍微』爬過我部落格的文再發問。之前你問慢動作補插圖的問題,我不曉得你有沒有注意到,我的回答幾乎都是從文章中複製貼上的,不是從別篇文章,正是從你發問的這篇文章上擷取下來。這顯示你根本沒有稍微看過這篇文章,我誠摯的建議你,要學習一件新東西之前,應該以自己做功課為主,真的遇到沒有辦法想通的問題,再請教別人,這樣你才能學得快又好。

fish 提到...

咖哩大,在此跟您說聲抱歉,其實會這樣問您是因為我從您其他文章去確認作者名稱是不是寫咖哩這兩個字,當時不確定您就是版主所以才會這樣問,再次跟您說聲抱歉,請您別見怪!
還有一點我想要補充,我不是沒有看您其他文章而是有看沒有懂....術業有專攻....您這已是專業級的...就好比我是個黑手...對車輛外行的人或車主跟他講解專業術語他不見得聽的懂...所以請您見諒...我真是外行人啦!

咖哩 提到...

Dear Fish

我是這個部落格板主,所有的文章都是我自己寫的。只要你自己做過功課,有問題,還是很歡迎隨時提出來討論!

fish 提到...

謝謝您,可能是我問的方式不對,因為我想買gopro這款攝影機,但是在別的論壇有人說這款雖然支援32g的容量但是連續錄滿一個4g的容量後就停住了,要手動按下錄影鍵才會另外生一個檔案繼續錄,想請問大大真的會這樣嗎?還是錄滿4g後會自動另外生成一個檔案繼續錄?謝謝!

咖哩 提到...

我沒聽過4GB這個限制,但實際上錄影的時候,我也想不透為什麼一個單檔可以有這麼大的容量,這樣要如何後製呢?

我每次潛水的錄影總容量大約6到8GB,但是由五十到七十個鏡頭所組成,每個鏡頭都拍攝一到兩個主題,很少有一個鏡頭超過十分鐘的,因為這樣才有可能後製剪接。

假如你真的有那麼特殊的需求,最應該擔心的是電池,因為一顆電池全新的時候,只能讓你錄不到16GB,所以買32GB的記憶卡不如買兩張16GB。

咖哩 提到...

我剛剛做了測試,以r2 mode錄影超過一個小時,並沒有中斷錄影的情況發生,機子在檔案達到3.66GB以後,就自動再產生一個新的檔案,新的檔案錄到1.25GB才被我主動按停。

所以並沒有發生錄到一定容量後自己停止錄影的情形。

fish 提到...

咖哩大,小弟又來麻煩您了,最近一直被相機跟攝影機所困惑,望請大大指點迷津,謝謝!
小弟對於"相機"這名詞在我腦海裡應該算是刻板印象,怎麼說呢?我大約國中時就拿我老爸的單眼像機在玩,那時只知道取景效果不外乎就是光圈搭配快門....後來出現了所謂的傻瓜像機(自動對焦)就沒在碰單眼相機了。直到夏普出了那台手持式(有螢幕)v8攝影機...也讓我更加深了相機跟攝影機的界線。可是最近的研究卻徹底顛覆我的刻板印象,不到一萬五的價格相機可以做到1920*1080p(60fps-28m)可是攝影機卻只達到1920*1080i(60fps*24m)攝影機要達到真正60p的規格價錢都最少要2萬以上,是不是想要作影片後製相機的功能會比較符合?而現在的攝影機卻變成了當初的傻瓜相機呢?(以一萬五價格左右的機器來選)謝謝您!

咖哩 提到...

Dear fish

相機和攝影機的界線確實越來越模糊,但還沒有到誰被誰取代的那種程度,沒錯有些DC有很漂亮的影像規格,但你千萬別忘記了,廠商打廣告的時候只會拿好的出來講,他當然不會把缺點拿出來嚷嚷。

一段好的影像,不單單由影像規格決定,防震呢?就動態攝影而言,DV的防震當然走在專攻靜態攝應的DC,另外大家很容易疏忽的就是錄影時間,DV像是GoPro都是輕易的連續錄影超過兩個小時,你想想看哪一台DC可以讓你有這樣的錄影時間?

其他小地方如,機體的持握形式,也是以DV比較輕鬆,還有多聲道錄音其實也是從DV先開始的,即便到了今天,大部分兩萬元以上的dv其收音品質還是勝過dc。

我會在部落格裡推薦HX9V,是因為性價比,而不是因為這台DC可以完全取代DV,假如今天給我一筆豐厚的預算,要我進行攝影,那我還是會去選擇DV而非DC。

fish 提到...

謝謝您,請問板大,一般dc可連續錄多久呢?我用的dv也都約一個小時就差不多要換電池了.....

咖哩 提到...

你的dv只能拍一個小時?那不就和一般dc一樣了?在一般的印象裡,dv的續航力是明顯的在dc之上的。我在用的gopro可以連續高清攝影兩個半小時。

fish 提到...

版大您好,gopro可能是設計上有考量到潛水的不便,所以才會有連續錄兩個小時以上的能力,一般dv因為體積越做越小導致電池也越來越小顆,所以有的dv一樣是有設定雙電源來禰補不足...不過我不擔心續航力跟防手震的能力,那些都有辦法解決,我比較在乎的是1920*1080p60fps的p上面,是否能真實在不缺電源的狀況下將一張32g的記憶卡用1080p60fps的模式錄到滿...
p.s我真的越來越覺得低價位的攝影機就像以前的傻瓜像機了

咖哩 提到...
作者已經移除這則留言。
咖哩 提到...

Dear Fish

GoPro恰好是沒有針對潛水的設計,如果他有針對潛水設計,那就不用我們在花一筆去改裝潛水殼了。
我不清楚你說的dv是哪一種,但如果是不到一萬五的機子,確實有可能為了省成本,砍掉很多原本dv該有的特點。
其實關於dc和dv的特性比較,在mobile01已經討論很多次了,而dv續航力較佳是公認事實,你可以過去找看看這類文章。

匿名 提到...

當我把AVS檔放到VirtualDub時
好像不能用