自從買了 Synology 的 Nas DS215j 後,就一直覺得它的 Video Station 超級難用,時常卡卡的不時就會在 loading ,理論上我家的區網速度有到 100Mbps ,一部 8G 的兩小時電影,理論上每秒 1.1MB/s 就夠用了,遠遠低於我家的區網 12.5MB/s 的速度,就算是 4G 的電影還是會有點卡卡的,所以我一直都用 Webdav 去資料夾開影片用 QuickTime Player 播放,完全不會有 loading 的問題所以就不太在意 Video Station 了,直到最近不知道為啥通訊埠轉發好像出了問題,Webdav硬硬連不上,用 Video Station 看影片一直卡一直卡,整個就很不爽所以就來看看到底是哪裡出了問題,順手解決了他。
翻了一下 Synology 對 Video Station 的影片支援問題 大意上就是說,如果你用瀏覽器播放,除了 MP4、MOV、M4V 以外所有的影片會經由 Nas 轉檔後才串流出來,當初買 Nas 時想說只是要看影片備份資料,就買了一台入門的,沒想到影片還要轉檔才能串流出來,CPU根本很重要啊!!嘖嘖。
知道了這資訊後就測了幾個檔案,果然除了 MP4、MOV、M4V 外 Nas都會轉檔才串流出來 CPU 都會飆破60,影片大一點或是兩個人同時看影片根本撐都撐不住,看的速度快於轉檔的速度,難怪看影片一直loading,還有一點值得注意的是如果影片是 mp4 音訊是 DTS 的話依然會轉檔才串流。
所以基本上影片的播放速度是這樣的:
不支援的影片播放速度 = 轉檔速度+網路傳輸速度
支援格式的影片 = 網路傳輸速度
入門 Nas轉檔速度又不太夠力,所以時間延遲上會特別明顯
這是一部 8G mkv格式 dts音訊 的影片播放時的效能使用量
這是同一部影片,但是轉成 mp4格式 aac音訊 時的效能使用量
這是一部 4G mkv格式 ac3音訊 的影片播放時的效能使用量
這是跟 4G 同一部,但是轉成 mp4格式 aac音訊 時的效能使用量
可以看到效能上的差異真的非常大
基本上預先轉檔有三大好處:
- 可以快速地跳轉影片位置,左邊是轉檔前、右邊是轉檔後
- 提高影片播放的穩定度,大幅減少卡頓的次數
- 在跟別人展示的時候出糗的機會降低
但是身為一個專業的工程師每次下載完影片要在下指令轉檔真的很不專業,也不符合90秒定律,所以勢必要把它自動化!!
Script的原理基本上是定時排程看現在有沒有影片抓好了,然後用 FFmpeg 把影片轉成 mp4音訊aac,影片轉檔時沒有做任何壓縮的步驟,選擇 mp4的原因是因為基本上所有播放方式 mp4 都能直接串流
然後因為 Nas 內建的 FFmpeg 不支援 DTS 轉檔,所以要裝這個別人編好的 FFmpegWithDTS才能順利轉 DTS的影片,記得要照型號抓喔!
自動轉影片 Script 在 GitHub 這 https://github.com/FuYaoDe/Synology-Smooth-Video/blob
或是用文字編輯器新增一個檔案貼上
#!/bin/sh
x=$(psql -U postgres -d 'download' -c "SELECT task_id,destination,filename,status FROM download_queue where status=5 OR status=8 " -P format=unaligned -R "|")
echo $x
OLD_IFS=$IFS
IFS="|"
set -- $x
IFS=$OLD_IFS
echo $5
if [ "$5" != "(0 rows)" ]; then
if find '/volume1/'$6'/'$7 -iname '*.mkv' -o -iname '*.mp4' 1> /dev/null 2>&1 ; then
for i in $( find '/volume1/'$6'/'$7 -iname '*.mkv' -o -iname '*.mp4'); do
echo $i;
j=$(echo $i | sed -e "s/mp4/T.mp4/g; s/mkv/T.mp4/g");
echo $j;
/volume1/@appstore/FFmpegWithDTS/bin/ffmpeg -i "$i" -c:v copy -c:a libfaac "$j";
done;
fi
fi
存在你想要的位置
接下來就是設定排程了
控制台 > 任務排程表 > 新增 > 使用者定義指令碼
使用者帳號選 root
執行命令填上剛剛放 Script 的路徑,像是我是放在 video 裡面
就是填 sh /volume1/video/SmoothVideo.sh
記得前面要加 /volume1/
如果是放在 home 就是 /volume1/homes/你的帳號/Script名稱
然後跳到排程分頁
選擇每天
執行頻率看喜好,我是選擇30分鐘一次,最後執行時間23:30
OK! 基本上設定完後,之後抓完的影片就會轉成 mp4 ,預設是不會刪掉原先的檔案的,預計未來會加入能選擇是否要刪除原檔
大功告成!! 以後看影片不會卡卡卡了!!
特別感謝:
https://www.reddit.com/r/synology/comments/2epy7v/how_to_automatically_remux_mkv_files_to_mp4_on/