このエントリーをはてなブックマークに追加

Macからffmpegを使って配信

ffmpeg2.5からMacのAVFoundation Frameworkのキャプチャ機能に対応したとかで、AVCaptureDeviceが扱えるようになったようです。
つまり、Macでもカメラやマイクがffmpegで扱えるようになったようですね。
ということで、Macのffmpegを使ってtwitchとニコニコ生放送で配信ができたので書いておく。


1. Mac Portsを使えば簡単にffmpegをインストールできると知ったので、Mac Portsをインストールする。
Mac Portsのサイトへアクセス 「Download」をクリック


2. 自分の使っているMacのバージョンにあったMac Portsをダウンロード


3. ダウンロードしたMac Portsをインストール


4. Xcode Command Line Toolsをインストールしてない場合はターミルから次のコマンドでインストール。
$ xcode-select --install

5. ffmpegをインストール
sudo port install ffmpeg +nonfree +librtmp
nonfreeをつけるとlibfdkaacが使えるようになります。
librtmpオプションを付けなくてもよかったかも


6.キャプチャ機器を確認
 ffmpegで使うことができるキャプチャ機器を確認
ffmpeg -f avfoundation -list_devices true -i ""
ここで使いたい機器の番号を覚えておくこと。

7.配信
 以下ように配信。あくまで例です。パラメータはお使いのMacのスペック、配信先のサービスに合わせて変えてください。
 上で覚えておいた機器の番号は -i の所で指定します。今回は0:4なので、映像に「CamTwist」、音声に「USB Audio CODEC」を指定しています。
ffmpeg -f avfoundation -i "0:4" -maxrate 800k -bufsize 800k -crf 23.0 \
-threads 0 -vcodec libx264 -profile:v high -preset slow -pix_fmt yuv420p \
-acodec libfdk_aac -ar 44100 -profile:a aac_he -signaling explicit_sbr -ab 48k -ac 2 -afterburner 1 \
-s 640x360 -r 25  -f flv "<URL>/<Stream>" -y out.mp4

<例:ニコニコ生放送の場合>
ffmpeg -f avfoundation -i "0:4" -maxrate 336k -bufsize 672k -crf 23.0 \
-threads 0 -y -vcodec libx264 -profile:v high -preset veryfast -pix_fmt yuv420p \
-acodec libfdk_aac -ar 44100 -profile:a aac_he -signaling explicit_sbr -ab 48k -ac 2 -afterburner 1 \
-s 640x360 -r 25  -f flv "rtmp://nlpocaxxx.live.nicovideo.jp:1935/publicorigin/1234567_xx_0?123456:lv123456789:00:1234567890:0:1234567890:xxxxxxxxxxxxxxxxx/lv123456789" out.mp4

<例:twitchの場合>
ffmpeg -f avfoundation -i "0:4" -maxrate 1M -bufsize 2M -crf 23.0 \
-threads 0 -y -vcodec libx264 -profile:v high -preset slow \
-pix_fmt yuv420p -acodec libfaac -ar 44100 -ab 128k -ac 2 \
-s 1280x720 -r 30  -f flv "rtmp://live.twitch.tv/app/live_12345678_XXXXXXXXXX" out.mp4
twitchのrtmpサーバURLはここここを参考にすればいいかと思います。

もちろん-x264opts を付けてx264のオプションを細かく設定もできます。
ffmpeg -f avfoundation -i "0:4" -maxrate 288k -bufsize 576k -crf 23.0 \
-threads 0 -y -vcodec libx264 -profile:v high -preset medium \
-pix_fmt yuv420p -acodec libfaac -ar 44100 -ab 96k -ac 2 \
-s 640x360 -r 25 -x264opts "keyint=250:min-keyint=0:scenecut=40:bframes=3:b-adapt=1:b-bias=0:b-pyramid=normal:no-cabac=0:ref=4:deblock=-2,-2:rc-lookahead=40:vbv-init=0.9:crf-max=0:qpstep=4:ratetol=1.0:ipratio=1.10:pbratio=1.10:chroma-qp-offset=0:aq-mode=1:aq-strength=0.50:no-mbtree=0:qcomp=0.80:partitions=p8x8,b8x8,i8x8,i4x4:direct=spatial:no-weightb=0:weightp=2:me=hex:merange=16:subme=7:no-psy=0:psy-rd=1.00,0.25:no-mixed-refs=0:no-chroma-me=0:no-8x8dct=0:trellis=1:no-fast-pskip=0:no-dct-decimate=1:nr=0:deadzone-inter=6:deadzone-intra=6:colormatrix=smpte170m:level=-1"  \
 -f flv "rtmp://nlpocaxxx.live.nicovideo.jp:1935/publicorigin/1234567_xx_0?123456:lv123456789:00:1234567890:0:1234567890:xxxxxxxxxxxxxxxxx/lv123456789" out.mp4

普段はここで色々やってます。