Hack 你的 Synology Download Station

自從買了 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音訊 時的效能使用量

可以看到效能上的差異真的非常大
基本上預先轉檔有三大好處:

  1. 可以快速地跳轉影片位置,左邊是轉檔前、右邊是轉檔後
  2. 提高影片播放的穩定度,大幅減少卡頓的次數
  3. 在跟別人展示的時候出糗的機會降低

但是身為一個專業的工程師每次下載完影片要在下指令轉檔真的很不專業,也不符合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/

使用 Webduino 做一個實體 Jenkins build status

上週末在 Mopcon 聽到,Yahoo 每個 Scrum Team 都有用硬紙板燈代表 Jenkins Build 現況,整個就潮潮der 議程傳送門
沒有去聽的可能不知道那個燈是什麼,這裡影片支援
剛好! 我們 Team 有在跑 Scrum
剛好! 我們 Team 有在用 Jenkins 做持續整合
剛好! 我們 Team 有在很認真的寫 Test
剛好! 我手邊有一台 Webduino
所以就捲起袖子怒山寨一個拉!!

整個完成品是長這樣子的
反應速度還比 Jenkins 的 dash board 快

build成功是白色的
build失敗是紫色的
其他狀態是黃色的
剛剛發現燈號好像沒有抄的很標準,但是調顏色好累...
不過下面有教怎麼換顏色

喜歡的人可以直接 clone 回家,然後架在自己的 server 上面
https://github.com/FuYaoDe/webWhistle
然後把你的 Webduino device id 在這填上去
如果有裝 node 的朋友可以直接用 npm i && npm start 開啟server
如果有 docker 的朋友可以直接用 docker-compose up 起來

話說我的 RGBled 燈怪怪的所以調色起來可能跟大家的不一樣
可以在 index.js 232527 改上自己喜歡的顏色

最後就是要設定讓 Jenkins 傳值修改我們 Webduino LED的顏色了
找到並安裝一個叫做 Notification Plugin 的 Plugin
然後進到要顯示燈號的 Project 的設定會看到 Job Notifications
然後這樣設定

哦哦~ 簡單就完成一個 Whistle 燈號拉~~~
開始享受實體燈號的刺激感吧!!!

InInder 讓 Mac 變 Spotify 高級鬧鐘

最近換了台MBP,在這之前我有台Tx300變形金剛,因為裝電池的鬧鐘常常有一些奇奇怪怪的問題導致不會響,我都會用它來當鬧鐘,這是我當時用的網路上隨便抓下來的鬧鐘Free Alarm Clock

換了MBP後原本也想隨便找一個Spotify鬧鐘軟體來頂替的,但是Google了一圈後都找不到我喜歡的方案,所以就決定ininder自幹了一個Spotify鬧鐘,順便玩一下在Windows下玩不到的Bash和Applescript。

在搜尋時有看到別人寫的用command line 操控 Spotify
shpotify

$ spotify play list [playlist name]

這樣就能用 command line 播放某個清單,但是輸入 playlist name 它每次都是用 curl 呼叫 Spotify 的 API , 輸入關鍵字很容易拿到不一樣的結果很不穩定,而且有些中文清單會搜尋不到.....不知道為啥:|

所以我就刻了一個簡單的可以輸入 Spotify URL、播放清單連結、專輯連結或是藝人連結的Spafly因為是要給鬧鐘用的,所以有做淡入音樂的效果讓鬧鐘響的時候不會嚇到。

完成了Script後就~

開始設定!!

  1. 首先要先下載Spafly
  2. 解壓縮完成後用終端機cd到該資料夾,並確保它能執行

    $ cd Downloads/Spafly-master
    $ chmod +x spafly
    
  3. 然後

    $ sudo cp ./spafly /usr/bin/spafly
    

    或是你能放到喜歡的路徑把他加進PATH

  4. 過來測試一下能不能用

    $ spafly "spotify:user:spotifytaiwan:playlist:6rnBixkR4lXh2djtI6esk6"
    

    哦哦哦~ 如果開始播Spotify的“今日最夯”這樣就成功了!

  5. 成功後還是不夠,身為一個鬧鐘應該要自己喚醒電腦且開始播音樂
    系統偏好設定 > 能源節約器 > 排程 > 設定喚醒的時間


     
    但是系統上只有這些能選擇

    如果想要更複雜的 1、3、5 早上7點喚醒電腦的話能用下指令的

    $ sudo pmset repeat wake MWF 07:00:00
    

    MWF 指的是 1、3、5

    • 星期一: M
    • 星期二: T
    • 星期三: W
    • 星期四: R
    • 星期五: F
    • 星期六: S
    • 星期日: U

    不過使用以上兩種方法的缺點是都只能設定一組重複

    如果想要設定多組建議使用這個Power Manager的 Power on daily 這樣就能設定多組不同的喚醒了

  6. 能成功喚醒電腦後就要排程讓我們的Spafly跑起來了,這裏使用的是 crontab,聽說 Mac 有自己的排程可以用(?
    身為一個彭個菜鳥不知道....求各位大大們指點指點
    這是crontab的小小教學,更多詳細點這,切記0是星期日


    好的簡單的看完教學後我們知道假如要架設一個 1、3、5 早上7點都會定時執行的指令的話要用

    0 7 * * 1,3,5 執行的command
    

    但是因為7點的時候電腦剛喚醒所以會跟我們的指令衝到要往後延一分鐘

    1 7 * * 1,3,5 執行的command
    

    好的過來再加入Spafly的command就變成

    1 7 * * 1,3,5 spafly -m 100 -s "spotify:user:spotifytaiwan:playlist:6rnBixkR4lXh2djtI6esk6"
    

    -m 50 代表最大音量為100,如果不加預設值為80
    -s 代表音樂會淡入,如果不要淡入就不要加入-s
    後面的 Spotify URL可以從這裡獲得,也可以使用播放清單連結,專輯或是藝人連結同樣的地方可以拿到,不建議使用單首歌,一首會叫不醒吧....


    Command準備好後就可以把它加進Crontab了

    $ crontab -e
    

    會開啟vi按i後貼上

    1 7 * * 1,3,5 spafly -m 100 -s "spotify:user:spotifytaiwan:playlist:6rnBixkR4lXh2djtI6esk6"
    

    再按ESC
    再輸入:wq退出vi
    出現

    crontab: installing new crontab
    

    就代表完成了!!!
    明天早上7點會準時喚醒Mac,7點01會開始播放Spotify,讓您每天早上起床就像泡Spa一樣!!哦哦哦~~

注意

  • 螢幕不蓋才能讓Spotify順利喚醒後播放
  • 不使用 Power Manager 的狀態下只能設定一組鬧鐘
  • 有些人喜歡7:00、7:15、7:30都設定一組鬧鐘,在這裡建議是不要這麼做,要用Power Manager才能設定多組且crontab排程也要設定很多組,超麻煩der,建議是直接用長一點的音樂清單,這樣就能響很久了~
  • 想設定多組鬧鐘記得要有多組crontab+多組喚醒
  • 記得crontab要比喚醒的時間慢一分鐘,否則會跟喚醒時間衝到

後記

  • 如果有空的話我會盡量讓Spafly下一行指令就能設定喚醒+新增至crontab,讓連設定都能像泡SPA一樣....不過要等我有空
  • 如果想幫我加上上方功能,歡迎 Pull requests
  • 如果有任何issus歡迎在下面留言,或是GitHub上回報

特別感謝

  • hnarayanan-讓我知道怎麼用 Command 控制 Spotify 的方法
  • 鳥哥-其實我也第一次寫這種複雜的Bash,如果錯誤或是什麼怪怪的地方請多多指教 XDD

Spafly GitHub在這