[心得] 個人實況伺服器與高畫質轉碼
各位好,小弟的電腦又被GANK了!
所以來分享一下之前實況的參數!
希望大家可以提升畫質增加母數!
畢竟似乎只有一些高畫質被GANK!
需要一台空閒不使用的前遊戲機!
幾乎只有顯示卡加速轉碼畫質好!
簡單解釋一下: CPU CPU CPU CPU v.s. GPU GPU GPU GPU GPU GPU
(通常匹配記憶體顆粒的數量)
BUT..GPU裡面有至少數百個CPU
以我的前顯卡Bart為例共960個CPU
而CPU基本上越多核心越適合~轉檔
硬碟容量就看要不要自己錄影留存
接下來將一步一步安裝實況轉檔機
1.安裝Linux系統
我是使用Debain8.3.0共13張DVD全部拔縣斷網安裝
如果你不在意網路上自動更新伺服器可以連網安裝
總之一定要斷網安裝後修改/etc/apt/source.list
將裡13張ISO檔之路徑資料夾放進source.list裡面
deb file:/opt/repo/debian-8.3.0-amd64-DVD-1 jessie main contrib
deb file:/opt/repo/debian-8.3.0-amd64-DVD-2 jessie main contrib
deb file:/opt/repo/debian-8.3.0-amd64-DVD-3 jessie main contrib
deb file:/opt/repo/debian-8.3.0-amd64-DVD-4 jessie main contrib
deb file:/opt/repo/debian-8.3.0-amd64-DVD-5 jessie main contrib
deb file:/opt/repo/debian-8.3.0-amd64-DVD-6 jessie main contrib
deb file:/opt/repo/debian-8.3.0-amd64-DVD-7 jessie main contrib
deb file:/opt/repo/debian-8.3.0-amd64-DVD-8 jessie main contrib
deb file:/opt/repo/debian-8.3.0-amd64-DVD-9 jessie main contrib
deb file:/opt/repo/debian-8.3.0-amd64-DVD-10 jessie main contrib
deb file:/opt/repo/debian-8.3.0-amd64-DVD-11 jessie main contrib
deb file:/opt/repo/debian-8.3.0-amd64-DVD-12 jessie main contrib
deb file:/opt/repo/debian-8.3.0-amd64-DVD-13 jessie main contrib
當然要先把每張ISO光碟之內容物複製進指定資料夾
之後要執行 # apt-get update 指令掃描整個清單
我的意思是若沒改清單,預設會連上網掃描雲端更新 (有中毒風險)
建議大家裝完系統後執行 apt-get install build-essential 即可安裝基本的編譯器
2.安裝 nginx 與 nginx-rtmp-module (即實況轉播伺服器的rtmp通訊兵)
nginx
http://nginx.org/
http://nginx.org/download/
nginx-rtmp-module
http://github.com/arut/nginx-rtmp-module
這部分是最麻煩的,若碰到系統缺少lbrary時會錯誤 (*1.電腦也要查一下圖書館)
總之缺少library的時候使用 apt-cache search [******] 即可找到相關的圖書館
若找到 ******-dev 就是代表這是一個用於建構你的程式碼所需要的圖書建議安裝
舉個例子我常常編譯 nginx 時會出現 libssl 的錯誤 ,我會先輸入指令試著搜尋
apt-cache search libssl 通常會跳出 libssl-dev 這個圖書可以供我安裝解問題
即 apt-get install libssl-dev 即可以安裝 libssl-dev 然後讓我的編譯器閉嘴
我好像忘了說編譯 nginx with rtmp module 的指令,我覺得我提供的網站更詳細
不過我還是說一下,在 nginx 的原始碼資料夾下輸入以下指令並加入 rtmp-module
不過還是先看一下清單選擇一下 nginx-rtmp-module 目前推薦的 nginx 版本較好
# mkdir -p /opt/src
# cd /opt/src
/opt/src# wget http://nginx.org/download/nginx-1.11.5.tar.gz
/opt/src# tar -xzf nginx-1.11.5.tar.gz
/opt/src# wget http://github.com/arut/nginx-rtmp-module/archive/master.zip
/opt/src# unzip master.zip
/opt/src# cd nginx-1.11.5/
/opt/src/nginx-1.11.5# ./configure --add-module=/opt/src/nginx-rtmp-module-master
/opt/src/nginx-1.11.5# make
/opt/src/nginx-1.11.5# make install
如果以上安裝流程出現任何問題可以在下方推文發問,我會盡可能回答大家的問題
接下來就可以到 /usr/local/nginx/conf/nginx.conf 修改設定檔,請參考網頁吧
如果想要有不錯的連線與流量顯示頁面可以參考 rtmp-module 中 stat.xsl之用法
3. 安裝 libx264 與 ffmpeg (即實況轉碼伺服器的h264翻譯官)
x264 (含lib)
http://www.videolan.org/developers/x264.html
ffmpeg
http://ffmpeg.org/
總之先下載最新版的程式碼,因為通常x264都是經常在更新保持最佳編碼效率與效能兼顧
當然ffmpeg也很重要因為有時候會編碼失敗通通都是ffmpeg的錯!除非你的電腦有穩題!
這次我就不提供詳細的解決方案了,我只提供下載路徑與編譯的方式還有最後要如何用!
/opt/src# wget ftp://ftp.videolan.org/pub/x264/snapshots/last_x264.tar.bz2
/opt/src# tar -xvjf last_x264.tar.bz2
/opt/src# wget http://ffmpeg.org/releases/ffmpeg-3.2.4.tar.bz2
/opt/src# tar -xvjf ffmpeg-3.2.4.tar.bz2
一定有人問為什麼解壓縮的參數不同,因為我也不知道為何tar能解壓縮其實還蠻神奇的
總之tar與bz2的關係就像ffmpeg與x264的關係,如果有閒可以去下載tar與bz2的原始碼!
/opt/src# cd x264-snapshot-20170319-2245/ (*時間流逝可能讓路徑不同請自行修正)
/opt/src/x264-snapshot-20170319-2245# cd ..
為了確保下載到今天的最新版本的 x264 所以我要選擇使用另一個方法下載 x264 好嗎?
/opt/src# git clone http://git.videolan.org/git/x264.git
/opt/src# cd x264
/opt/src/x264# ./configure --enable-static --enable-shared --enable-lto --enable-strip --enable-pic
/opt/src/x264# make
/opt/src/x264# make install
說明一下static library與shared library的不同好了,就差在.a是塞進執行檔.so放系統
不過通常我都是用 $LD_LIBRARY_PATH 指定要用哪個版本的.so,還可以排PATH的優先順序
不過一般人如果要將自己的 lib/*.so 列入清單,只要在 /etc/ld.so.conf.d/ 加lib路徑
然後執行 ldconfig 就可以更新,而且 /etc/profile.d/ 可以放登入時要執行的系統參數
例如置換 $PATH 與 $LD_LIBRARY_PATH 可以用 export PATH=myPATH:$PATH 讓myPATH優先
好了廢話講太多了,不過還可以加在個人的 ~/.bashrc 或 ~/.profile 等相關方式設定之
接下來我們要安裝ffmpeg並引入libx264的函式庫(圖書館)讓ffmpeg可以使用x264壓縮編碼
/opt/src/x264# cd ../ffmpeg-3.2.4/
/opt/src/ffmpeg-3.2.4# ./configure --enable-gpl --enable-libx264 --enable-pic --enable-hardcoded-tables -enable-memalign-hack --enable-memory-poisoning
(不理新版x264) --extra-ldflags=-static
(編不過的參數) --enable-lto
/opt/src/ffmpeg-3.2.4# make
/opt/src/ffmpeg-3.2.4# make install
基本上就會置換你系統中的 ffmpeg 讓它可以用最新版的 libx264 並高畫質壓縮你的實況
------------------------------------------------------------------------------
以下這三行給有需要很多版本的勇者: (這樣就可以把x264直接塞進ffmpeg避免被換掉)
/opt/src/ffmpeg-3.2.4# ./configure --help
/opt/src/ffmpeg-3.2.4# ./configure --prefix=/opt/ffmpeg-3.2.4_with_current_x264ver#.# --enable-gpl --enable-libx264 --enable-pic --enable-thumb --enable-lto --enable-hardcoded-tables --disable-safe-bitstream-reader --enable-memalign-hack --enable-memory-poisoning --extra-ldflags=-static
/opt# ln -s ffmpeg-3.2.4/ ffmpeg
其中--enable-lto舊版gcc應該可以編得過, --enable-thumb好像是ARM的指令及加速160%
------------------------------------------------------------------------------
4.轉媽參數設定: (我直接分享我的YouTube與Twitch參數囉)
在分享我的參數之前,請您先使用 ldd ffmpeg 檢視圖書館中 libx264 路徑是否正確無誤
-twitch_720p.sh---------------------------------------------------------------
!#/bin/sh
ffmpeg -i rtmp://127.0.0.1/live_in/CardLin -vcodec libx264 -preset veryfast -x264opts "qp=25:keyint=100:min-keyint=100:threads=4:opencl=1:opencl_device=0:partitions=all:aq-mode=2:trellis=2:deblock=-1,-1:rc-lookahead=25:scenecut=25:ref=1:b-adapt=2" -maxrate 2300k -bufsize 23000k -s 1280x720 -r 50 -force_fps -sws_flags lanczos -acodec copy -f flv rtmp://127.0.0.1/twitch_live_out/CardLin -rtmp_buffer 30000 -rtmp_live live
------------------------------------------------------------------------------
-youtube_1080p.sh-------------------------------------------------------------
!#/bin/sh
ffmpeg -i rtmp://127.0.0.1/live_in/CardLin -vcodec libx264 -preset veryfast -x264opts "qp=25:keyint=100:min-keyint=100:threads=8:opencl=1:opencl_device=0:partitions=all:aq-mode=2:trellis=2:deblock=-1,-1:rc-lookahead=25:scenecut=25:ref=1:b-adapt=2" -maxrate 8000k -bufsize 80000k -s 1920x1080 -r 50 -force_fps -acodec copy -f flv rtmp://127.0.0.1/youtube_live_out/CardLin -rtmp_buffer 30000 -rtmp_live live
------------------------------------------------------------------------------
分析一下:這兩個是畫質還不錯的低碼率動態碼率參數!以下是你有可能會更改的數據!
threads=8 //執行序數量,建議最多為實體核心數*1.5
opencl=1 //是否開啟OpenCL加速,建議一定要開啟
opencl_device=0 //設定OpenCL裝置編號 (多張GPU才有效)
keyint, min-keyint = 100 //FPS等級的keyframe_interval, 建議2秒即
r 50 //FPS設定成50
s 1920x1080 //畫面寬長大小
sws_flags lanczos //使用lanczos的方法降低解析度
好啦,今天就分享到這邊了,聰明的你應該有發現127.0.0.1可以改成其他電腦的IP位址
如果你有多部舊電腦的話就可以用全部的電腦效能一起做出和大型網站一樣多種解析度!
再提供兩個指令給大家自己查詢要如何使用ffmpeg與如何搭配libx264的"..."內設定值!
$ ffmpeg --help full
$ x264 --fullhelp
總結就是我會把我的OBS的rtmp網址設為實況伺服器,然後輸出25Mbps以上的高畫質!
然後再到我的實況伺服器或其他的子伺服器輸入指令以轉碼並輸出到不同的實況網站中!
可以在 nginx 設置 push 到實況網站,當然你要 push 到另一個實況伺服器當分流也可~
所以基本上大家可以參考一下轉出來的流量有多寬再決定要投放到哪個區域的實況網站!
補充一下OBS的設定好了,可以用"使用裝置時間戳記"的320kbps,44100hz音質會較好!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.164.252.34
※ 文章網址: https://www.ptt.cc/bbs/Live/M.1490041511.A.C4D.html
跟大家開個玩笑,所以修改了內容,其實我只是在比擬通訊兵責任較輕,翻譯官要負責!
※ 編輯: a34021501 (1.164.252.34), 03/21/2017 04:42:55
推
03/21 06:50, , 1F
03/21 06:50, 1F
→
03/21 19:52, , 2F
03/21 19:52, 2F
→
03/21 19:53, , 3F
03/21 19:53, 3F
→
03/21 19:55, , 4F
03/21 19:55, 4F
→
03/21 20:01, , 5F
03/21 20:01, 5F
※ 編輯: a34021501 (1.164.252.34), 03/21/2017 21:33:45
來講一下壓縮參數好了,不過我不是開發人員,我所知道的都是我在網路上搜尋到的結果
首先講一下壓縮時的 I P B 三種 frame!! 在時間的流逝就像 IBBPBBPBBIBBPBBPBBI....
講白了 I 最重要! P 次要! B 普通! 說普通就是因為如果 B 的品質差畫面也會很差
所以重點是 I frame 已經固定了,反正我也不知道以後的 x264 如何定義 I frame間距
不過那不重要,重要的是 P frame 是由 I frame 搭配一些參數計算而成的預測未來畫面
我要說未來是因為那個未來是 I 的未來,但 P 其實是要與真實的未壓縮影像匹配算參數
總而言之在你看到 IPB 這三種 frame 出現在你的螢幕上的時候,代表那是以前發生的事
好了,現在來提一提 B frame 其實可以定義 bframe=0 關掉所有 B 就是只有 IP 這兩種
總之建議你不要設定 bframe=0 因為我加了 b-adapt=2 就是 Adaptive BFrame decision
再來就是我最喜歡的 trellis2 讓影像壓縮使用全模式的 decision 使整個壓縮效率增加
然後再來是我覺得應該這些參數都應該預設開啟可是不知道為什麼沒有開可能我沒很懂吧
先來說說 weightp 好了,因為 B 通常夾在兩個 P 中間,所以 B 是由 P 經過向量計算!
我還是沒講 weightp 因為我真的不太懂,不過看手冊的意思大概是有些P重要有些不重要
所以就以這 weight 比重來計算出要用哪個 P 參考較多,哪個 P 參考較少,畫質會變好
反正 I 還是最重要,畢竟 P 是由 I 計算而成,所以 me 與 subme 有很多種模式可以調
但我建議還是保留預設值,因為通常調高之後但腦會無法負荷而無法正常實況例如沒畫面
至於 aq-mode 似乎是用於評估上面這些參數及壓縮後的影像是否滿足我們設定的 qp=25
總之 aq-mode = 2 是我玩一些明亮遊戲時用的參數, aq-mode = 3 是我玩恐怖遊戲所用
畢竟 aq-mode = 3 有考慮黑暗場景,所以我還是設成 aq-mode = 2 好了壓縮率應該較高
至於 weightp 我還是覺得怪怪的所以我先設為 veryfast preset 的預設參數即不複製圖
畢竟經過了一段時間,這張圖像如果還一樣我覺得真的要考慮是否有畫面定格的情況發生
以上是我個人的理解,並且我其實不明白 x264 與 ffmpeg 的搭配與組合似乎有點很複雜
我的意思是說 ffmpeg 有很多種不同版本,而且還附上不同的 resize 程式碼讓我好難選
因為我從 3840x2160 解析度降到 1920x1080 的之後還要再降到 1280x720 字體有點模糊
我可能還要再花點時間查詢一下是否有包含增強邊緣的 Edge Detection Resize Method!
總之這樣應該可以非常低流量又可以有很清晰的字體,變更解析度似乎是 ffmpeg 的責任
等我研究出來再跟大家分享,今天先分享到這了!感謝大家的支持!記得用 qp 調整畫質
qp 數值越低越接近原始圖片,但我覺得如果原始圖片很糟糕就讓 qp 增加也沒甚麼感覺!
※ 編輯: a34021501 (1.164.252.34), 03/22/2017 03:18:24
討論串 (同標題文章)
完整討論串 (本文為第 1 之 3 篇):
Live 近期熱門文章
PTT數位生活區 即時熱門文章