1、将視訊轉化成圖檔
視訊是在B站下載下傳的FLV格式的,然後我采用網上找的python代碼将視訊轉成了1078張圖檔。

2、處理圖檔
因為老師給的代碼一次隻能處理一張圖檔,且處理後的圖檔名固定為st.jpg,而且貌似不太友善将輸入時的檔案名在輸出時讀出來,是以我想法是直接他輸出的檔案名為随機的,這樣一來不會導緻覆寫,二來可以通過生成檔案的時間戳來進行排序。
後來我探索了幾種方法,以下是總結的兩種。嫌麻煩的話,可以直接看2.2, 2.1是在硬體上做的,出的問題比較多比較麻煩。
2.1、方法一
看了給的源碼,我改了src下面的post_processor.cpp中的代碼。使其輸出的檔案名不唯一,是随機的字元串,輸出檔案統一放到一個out檔案夾下,這個out檔案夾需要手動建立,與src檔案夾同級。
以下是部分截圖 :
修改完post_processor.cpp後,在伺服器端進入Cambricon-Test檔案夾,設定環境,X86貌似不用設定,但是ARM的話,一定要設定,不然make代碼的時候,會報錯。
cd Cambricon-Test
source env.sh
經過環境設定後,然後進入style_transfer_x86/build檔案夾,指令行輸入
cmake …
make
編譯完成後,就可以讓輸出的圖檔名是随機的了。然後我們再去改run_style_transfer.sh,讓他可以處理多個圖檔,這裡我是重新建立了一個1.sh檔案。
改完之後,連上寒武紀的ARM闆子,處理:
ping 10.100.8.234
telnet 10.100.8.234
mount -t nfs -o tcp,nolock 10.100.8.235:/opt/Cambricon/nfs /NFS
cd NFS
export LD_LIBRARY_PATH=/NFS/lib32
cd style_transfer_arm/
sh 1.sh
運作結束後,就可以在out檔案夾下看到1478張處理後的圖檔,但是檔案夾裡面的檔案名都是随機的、混亂的,是以我們要按照他們生成的時間戳來對其排序,在out檔案夾建立一個operation.sh
然後打開終端,cd 到out檔案夾下,然後輸入
sh operation.sh
稍等片刻,就處理完了,圖檔名全部成了生成時的字元串。
然後将out檔案夾,複制出虛拟機,放到電腦桌面,然後全選所有圖檔,再按空格,再用滑鼠左鍵點選檔案夾空白處,所有的圖檔就會按照順序排列。
2.2、處理圖檔
上面方法我試了不下十次,花了兩天,結果不是闆子上報錯,就是處理的圖檔沒有1478張,是以,我後來選擇在伺服器上操作了。
換了一個思路,改檔案名的方法老是出各種問題,導緻出來的圖檔數量沒那麼多。于是,我想到了直接寫一個shell,在每次程式出一個st.jpg圖檔之後,就馬上将那個圖檔重名為輸入的名。
首先,在src同級目錄下,建立一個out檔案夾,放處理後的圖檔,然後建立一個1.sh,
代碼如下:
然後在伺服器端,
sh 1.sh
就在out處獲得了處理後的圖檔,我還讓處理的結果輸入到1.text,看是否有漏掉的。
3、做成視訊
我是用AE做成視訊的,是以這裡說下流程,其他軟體流程應該是相似的。
打開AE後,點選檔案,導入,多個檔案,然後選擇 JPEG序列 ,然後得到序列後,将序列從項目框下,拖動到合成的那個軌道上,然後導入最初的FLV視訊,放到視訊軌道上,關閉視訊,打開音頻。
我們發現原視訊是59:04,但是圖檔序列隻有49:08,是以需要将圖檔序列的時間等比增加,故點選合成框的左下角的 {} 符号,然後合成框會多一個持續時間、伸縮,然後點選持續時間,會彈出一個框,将裡面的49:08改成59:04。
接着點選頂部菜單欄中的合成,點選 添加到渲染隊列,然後在下方會看到一個渲染隊列框。這裡點選渲染,就可以得到視訊了,但是這樣輸出的視訊很大,有一個多G,是以需要讓輸出的視訊很小。
點選輸出子產品對應的 無損 ,然後将格式改為QuickTime,然後點選右邊的 格式選項,将視訊編解碼器,設定為H.264,然後确定,渲染,就可以得到想要的視訊啦。
具體操作圖如下:
4、視訊結果
歡迎大家去點贊、評論、收藏。
https://www.bilibili.com/video/av53303275/