因此在下再次編寫文章的第二版本
由於希望使用者不需要花太多時間學習 FFmpeg 指令,因此在下將選項設定值獨立成可閱讀的變數名(盡量)
#/bin/bash # live-ams - Amsterdam, NL 阿姆斯特丹 # live-arn - Stockholm, SE 斯德哥爾摩 # live-cdg - Paris, FR 巴黎 # live-dfw - Dallas, TX 達拉斯 # live-fra - Frankfurt, Germany 法蘭克福 # live-hkg - Hong Kong 香港 # live-iad - Ashburn, VA 阿什本 # live-jfk - New York, NY 紐約 # live-lax - Los Angeles, CA 洛杉磯 # live-lhr - London, UK 倫敦 # live-mia - Miami, FL 邁阿密 # live-prg - Prague, CZ 布拉格 # live-sel - Seoul, South Korea 首爾 # live-sin - Singapore 新加坡 # live-syd - Sydney 雪梨 # live-tpe - Taipei, Taiwan 台北 # live-tyo - Tokyo, Japan 東京 # live - San Francisco, CA 三藩市 stream_server='live-hkg' stream_key='' x='0' y='0' in_width='800' in_height='600' out_width='800' out_height='600' video_source='x11grab' video_input=':0.0' video_codec='libx264' video_bitrate='1200k' audio_source='alsa' audio_input='default' audio_codec='libmp3lame' audio_bitrate='128k' audio_rate='44100' audio_channels='2' output_format='flv' fps='30' constant_bitrate='2000k' rendering_format='yuv420p' rendering_quality='ultrafast' rendering_tune='film' rendering_threads='2' rednering_strict='normal' i_frame_interval=$(($fps*2)) i_frame_interval_min=$fps ffmpeg \ -f "${video_source}" -s "${in_width}x${in_height}" -r "${fps}" -i "${video_input}+${x},${y}" \ -f "${audio_source}" -i "${audio_input}" \ -f "${output_format}" \ -ab "${audio_bitrate}" -ac "${audio_channels}" -ar "${audio_rate}" \ -vcodec "${video_codec}" -vb "${video_bitrate}" -g "${i_frame_interval}" -keyint_min "${i_frame_interval_min}" -b "${constant_bitrate}" -minrate "${constant_bitrate}" -maxrate "${constant_bitrate}" -pix_fmt "${rendering_format}" \ -s "${out_width}x${out_height}" -preset "${rendering_quality}" -tune "${rendering_tune}" -acodec "${audio_codec}" -threads "${rendering_threads}" -strict "${rednering_strict}" \ -bufsize "${constant_bitrate}" "rtmp://${stream_server}.twitch.tv/app/${stream_key}"使用者最主要是設定 stream_server, stream_key, x, y, in_width, in_height, out_width, out_height
桌面及 stream 矩形都是以左上角為 (0,0) 座標
x 及 y 是相對桌面座標的位置,x 及 y 都不能小於 0 ,而且分別不能大於桌面闊度及桌面高度
in_width 及 in_height 分別是 stream 矩形的闊度及高度,都不能小於 1 ,而且 x + in_width 及 y + in_height 分別不能大於桌面闊度及桌面高度
out_width 及 out_height 分別是 stream 到的 RTMP 伺服器 的影片闊度及高度
但 out_width 及 out_height 不能是任意大小,必須是指定大小,例如:
320x240, 640x480, 720x480, 1280x720, 1920x1080 之類
否則會出錯
若果 stream 的速度不流暢, stream_server 可以選擇其他能提供較流暢的 RTMP 伺服器位置
stream_key 是由 RTMP 伺服器所提供,可以在 http://www.twitch.tv/<your-twitch-account>/dashboard/streamkey 找到
按下「Show Key」顯示 Stream Key
與 justin.tv 的 Stream Key 相同,是一個不應該讓自己以外的使用者知道的資料
擁有 Stream Key 的使用者可以不需要登入便可以以閣下的帳戶 stream 影像
若果被自己以外的使用者知道,必須要按「Reset」重設 Stream Key
由於經常在 Linux 進行聲音收集時,選取錯誤的聲音頻道,導致不能正常錄音
因此將 pulse 改為 default 讓系統自動選取合適的聲音頻道
同樣建議使用 PulseAudio Volume Control 來管理聲音音量等設定會較簡單
輸入
sudo apt-get install pavucontrol來安裝
開啟 PulseAudio Volume Control
先檢查 Configure
在內建音訊中確定是使用 類比立體聲雙工
確保音訊能進行輸入與輸出
在 Input Device
在 Show 選擇 All Input Devices
選取聲音頻道,例如在下的聲音頻道為 Monitor of 內建音訊 類比立體聲
在 Output Device
在 Show 選擇 All Output Devices
查看哪一條聲音頻道有音訊活動,例如在下聲音頻道為 內建音訊 類比立體聲 使用 類比輸出
正常情況下,輸入及輸出的設定、運作正常,便可以透過 line out 裝置聽到正在播放的聲音
在 Recording
在 Show 選擇 All Streams
將由 FFmpeg 收集的聲音來源設定為與 Input Device 相同
在 Playback
在 Show 選擇 All Streams
由於使用 ALSA ,若需要調整 stream 時的音量,除了調整整體的音量,還可以調整指定 stream 的音量
例如在第二幅圖中有很多不同的聲音來源 (圖片由 0079 提供)
在下是使用 Linux Mint 17
由於 Ubuntu 不再提供 FFmpeg 的 repository ,因此 Linux Mint 17 不能透過 Ubunut 安裝 FFmpeg
使用者需要自行到 FFmpeg 的官方網 下載原始碼進行編譯
或
尋找由其他開發者提供的 FFmpeg PPA ,Launchpad 是一個不錯的選擇
但 Launchpad 開發者所提供的 FFmpeg 並非最新版本,若需要使用最新版本便需要使用 FFmpeg 官方源始碼
可以使用以下指令加入 PPA 並安裝 FFmpeg
sudo add-apt-repository ppa:mc3man/trusty-media sudo apt-get update sudo apt-get install ffmpeg
安裝 FFmpeg 後便可以執行以上的 Shell Script
(借用 Compiz 只是強調是使用 Linux 進行 stream ,並沒有實際意義)
需要停止 FFmpeg 按 Ctrl + C 即可
這方法看來非常複雜,但暫時在 Linux 未有較好的桌面 Stream 操作
比較值得期待的是 Open Broadcaster Software (OBS) 已不斷進行開發
現階段已經提供 Mac OS X 版本,而 Linux 版本仍在開發中
希望不久在將來在 Linux 進行桌面 Desktop 會更簡單
沒有留言 :
張貼留言