2005年11月16日

使用 MPlayer 錄製電視節目

用 MPlayer 播放電視 一文中提到怎麼用 MPlayer 來看電視,也提到應該可以用 MPlayer 來預錄電視節目。

現在,為了看 Keroro 的台灣配音版聽過幾次後,發覺比之前 Cartoon Network 配的好!贊! 其實是同一片… )只好下決心研究怎麼讓 Server 自動給我錄下來… (嗯,萬能的 Server ,我將賜給你神奇的力量~~~)

參考過這篇 Recording TV with MPlayer 後,試出以下的指令:

使用 lavc 編碼
mencoder tv:// -tv driver=v4l2:chanlist=us-cable:decimation=2:\
>input=$INPUTSOURCE:normid=$NORM:device=/dev/video0:\
>alsa:amode=$AUDIOMODE:channel=$CHANNEL \
>-oac mp3lame -ovc lavc -o $FILENAME -endpos $SECONDS

使用 xvid 編碼
mencoder tv:// -tv driver=v4l2:chanlist=us-cable:decimation=2:\
>input=$INPUTSOURCE:normid=$NORM:device=/dev/video0:\
>alsa:amode=$AUDIOMODE:channel=$CHANNEL \
>-oac mp3lame -ovc xvid -xvidencopts bitrate=$BITRATE \
>-o $FILENAME -endpos $SECONDS

變數說明:

  1. $INPUTSOURCE: 輸入訊號源,取得方式至少有兩種:
    1. 若有安裝 xawtv 的話,執行 v4l-info 並查看 inputs 那個段落中的說明,會指出 Television 所屬的 index 是多少。
    2. 執行 mplayer tv:// -tv driver=v4l2:device=/dev/video0 指令,檢查 Inputs 的輸出內容(有可能會出現 v4l2 錯誤)。
  2. $NORM: 訊號種類,台灣是 NTSC,所以應該都要放 4 才對(若 driver 使用 v4l 則改為 norm=NTSC )
  3. device: 要確認電視卡被編到那一個 device name 去喔!一樣,執行 v4l-info 就可得知:
    ### v4l2 device info [/dev/video0] ###
  4. $AUDIOMODE: 音源種類,可參考 mplayer 的操作手冊說明。通常是設為 1 (Stereo) ,若訊號源支援 MTS 雙語輸出時,應該可以設為 2 (但我沒試過)。
  5. $CHANNEL: 頻道編號,例如 Discovery 是 19,華視是 12 (請參考第四台的資訊)。
  6. $BITRATE: 使用 xvid 編碼時,必須給定一個編碼比率(?),台灣的第四台訊號好像給 600 就很不錯了!
  7. $FILENAME: 輸出檔名
  8. $SECONDS: 錄影長度,這是以秒為單位!
成果:
  1. 建立了一個 recTV.sh,用法:
    ./recTV.sh 頻道編號 輸出檔案識別碼 錄影長度
  2. 在星期一到五 17:59 分起自動開始錄影 1860 秒並存到 ~/Keroro/ 目錄下,crontab 是這麼設定的:
    59 17 * * 1,2,3,4,5 /Files/Linux/recTV.sh 12 ~/Keroro/Keroro 1860
  3. 預錄 2005-11-16 上午 11:00 的 國家地理雜誌頻道 - 重返危機現場 II:英倫航空92號班機,一小時下來的檔案大小約為 444MB。
附註 - 其他參考資料:
  1. 選購電視卡前可參考 kernel 目錄下的 Documentation/video4linux/CARDLIST.* ,例如 2.6.13 中針對 saa7134 晶片電視卡已可自動辨識出 63 張了,想當初 2.6.0 只有 2x 張時還真是逛遍了光華商場才找到一張被直接支援的 Compro VideoMate TV ,台灣的產品清單中沒有這個型號,只有 M300 / M350 / M500 / M800 而以。
  2. 使用 lavc 編碼格式壓縮畫面,以 MP3 編碼格式壓縮聲音,這樣錄 60 秒約佔 7.8MB。
  3. 使用 xvid 編碼且 bitrate 設為 600 ,同樣以 MP3 編碼格式壓縮聲音,這樣錄 60 秒約佔 5.8MB。不過聽說 xvid 編碼可能無法在 Windows 上正常撥放!
  4. 檔案大小可能和被 drop 掉的 frame 數有關!
  5. 如果原本的訊號畫質就不怎樣,那麼錄下來的畫面也會很抱歉!
  6. 如何錄下電視節目
  7. pts' TV recording with video4linux tutorial