複数の出力先のときの挙動を調整する fifo

フィルタのfifoと、マルチプレクサのfifoの使い方。fifoは複数のストリームの同時出力で処理速度の差が出る、例えばネットワーク障害や書き込み速度の差が付くときなどにつける。複数出力ではなく1出力で再接続するような使い方でも使える。フィルタのfifoにはオプション設定はない。

fifo, afifoフィルタが2024年2月8日以降のffmpeg 7.0から廃止になった。

利用例:
ffmpeg で複数出力
1つの出力内容を複数に振り分ける tee

基本コマンド

テストソースでエラーが出たときに再接続する例。
ffmpeg -f lavfi -re -i testsrc -c:v libx264 -map 0:v -flags +global_header -f fifo -fifo_format flv -max_recovery_attempts 20 -recovery_wait_time 5 -attempt_recovery 1 -recover_any_error 1 rtmp://example.com/livekey

avformat/fifo: avoid repeated scaling of timestamps on failure and re… · FFmpeg/FFmpeg@d9f07a5
Reconnect RTMP stream after disconnect and continue from specific position : ffmpeg

フィルタのfifoの例。最初は普通再生で次に逆再生をつなげる。試すなら動画時間の短いファイルを使う。
ffmpeg -i input -filter_complex "[0:v]reverse,fifo[r];[0:a]areverse,afifo[ar];[0:v][0:a][r][ar]concat=n=2:v=1:a=1 [v] [a]" -map "[v]" -map "[a]" output

映像と音声を逆再生にエンコードする

Continue reading “複数の出力先のときの挙動を調整する fifo”

フェードトランジションのカーブを別フィルタに実装する

afade, acrossfadeフィルタにあるフェードトランジションのカーブを別フィルタにも同様の変化を持たせるために評価式を使って実装する。

入力した2つの音声にクロスフェードをかける acrossfade の使い方

FFmpeg Filters Documentation : afade
FFmpeg Filters Documentation : acrossfade
画像は公式Wikiを引用した:AfadeCurves – FFmpeg

コードはここを参照:FFmpeg/af_afade.c at master · FFmpeg/FFmpeg

Continue reading “フェードトランジションのカーブを別フィルタに実装する”

2019年6月のニコ生統計

2017年1週目から2019年10週目までの取得漏れが判明し、毎週土曜日の放送開始0時から6時までの6時間が入ってなかった。気がついたのが2019年11週目で月間統計は過去のデータを修正したが過去記事は修正してない。

集計期間は週間のニコ生統計の1ヶ月分である。2018年からカテゴリタグの割合は今までと変わらないが、1枠30分の割合が少なくなったので来場者数とコメント数の6000以上を除かないすべての放送を対象にした。それに伴い平均値は除外した。来場者数はTS視聴可能時間が来れば増え、TS来場者数を含まずに計算することは困難な仕様なので、翌日(当日)の朝に前日の6時から当日の6時までを取得している。

Continue reading “2019年6月のニコ生統計”

映像に枠をつける drawbox

指定した場所を四角で囲ったり、埋めたりできるdrawboxフィルタの使い方。四角以外で囲むならgeqフィルタを使う。

数式で線や円、模様が描ける geq

基本コマンド

  • オプション無指定の場合は上下左右の端に4ピクセルの黒枠が描写される

    ffmpeg -i input -vf drawbox output

  • 左上の縦横10ピクセルの位置から幅100X200に太さ8ピクセルの青枠を描写

    ffmpeg -i input -vf drawbox=10:10:100:200:blue:8 output
    ffmpeg -i input -vf drawbox=x=10:y=10:w=100:h=200:c=blue:t=8 output

  • 左上に縦横10ピクセルから幅200X100に枠内を輝度反転した四角を描写
    ffmpeg -i input -vf drawbox=10:10:200:100:invert:fill output

  • ボックス部分だけ透過させる。formatフィルタでアルファチャンネルをつけても最初は全画面255(透明ではない)なので、lutyuvフィルタで 0(透明)にしてボックス部分だけ255にしている。アルファチャンネルの確認にはalphaextractフィルタを使う
    ffmpeg -i input -vf format=yuva420p,lutyuv=a=0,drawbox=0:0:100:100:replace=1 output
    ffplay -i input -vf format=yuva420p,lutyuv=a=0,drawbox=0:0:100:100:replace=1,alphaextract

    アルファチャンネルをグレーで出力する alphaextract

  • 透過部分をcolor, cの指定色に入れ替えてアルファチャンネルをなくす
    ffmpeg -i alpha.png -vf "[0]split=2[bg][fg];[bg]drawbox=c=blue@1:replace=1:t=fill[bg];[bg][fg]overlay=format=auto" output.png

    FFmpeg: Convert transparency to a certain color – Super User

公式ドキュメント:FFmpeg Filters Documentation : drawbox

Continue reading “映像に枠をつける drawbox”

テストシグナルの音声を作る sine

一定の周波数や。1秒間隔のビープ音がつくれる sine オーディオソースの使い方。

基本コマンド

10秒の440Hzのシグナルを 44.1KHz でモノラルの WAV ファイルで出力する。
ffmpeg -f lavfi -i sine=440:0:44100:10 mono.wav

1秒に1回鼓動する心臓音のような音。
ffplay -f lavfi -i sine=10:10

ステレオにするには2入力してamergeフィルタを使う。1入力が左で、2入力が右になる。この順番はffmpeg -layoutsのレイアウトの順番になっている。
ffmpeg -f lavfi -i sine=220:4:d=5 -f lavfi -i sine=220:0:d=5 -filter_complex amerge=2 stereo.wav

音声ストリームのチャンネルレイアウトを指定する amerge

同じ内容ならasplitフィルタで複製してもステレオになる。
ffmpeg -f lavfi -i sine=440:0:44100:10,asplit,amerge=2 stereo.wav

lavfiデバイスで入力した内容は引き続きフィルタを当てることができる。以下の例はvolumeフィルタで右の音量を0にしている。
ffmpeg -f lavfi -i sine=220:4:d=5 -f lavfi -i sine=220:4:d=5,volume=0 -filter_complex amerge=2 stereo-right-mute.wav

映像のテストソースも同時に扱う。
ffmpeg -f lavfi -i smptehdbars=1920x1080:d=10 -f lavfi -i sine=frequency=1000:d=10 output.mp4
ffplay -f lavfi -i smptehdbars=1920x1080[out0];sine=frequency=1000[out1]"

ffmpeg で使える映像のテストソース

公式ドキュメント:FFmpeg Filters Documentation : sine

Continue reading “テストシグナルの音声を作る sine”

2019年5月のニコ生統計

2017年1週目から2019年10週目までの取得漏れが判明し、毎週土曜日の放送開始0時から6時までの6時間が入ってなかった。気がついたのが2019年11週目で月間統計は過去のデータを修正したが過去記事は修正してない。

集計期間は週間のニコ生統計の1ヶ月分である。2018年からカテゴリタグの割合は今までと変わらないが、1枠30分の割合が少なくなったので来場者数とコメント数の6000以上を除かないすべての放送を対象にした。それに伴い平均値は除外した。来場者数はTS視聴可能時間が来れば増え、TS来場者数を含まずに計算することは困難な仕様なので、翌日(当日)の朝に前日の6時から当日の6時までを取得している。

Continue reading “2019年5月のニコ生統計”

2019年4月のニコ生統計

2017年1週目から2019年10週目までの取得漏れが判明し、毎週土曜日の放送開始0時から6時までの6時間が入ってなかった。気がついたのが2019年11週目で月間統計は過去のデータを修正したが過去記事は修正してない。

集計期間は週間のニコ生統計の1ヶ月分である。2018年からカテゴリタグの割合は今までと変わらないが、1枠30分の割合が少なくなったので来場者数とコメント数の6000以上を除かないすべての放送を対象にした。それに伴い平均値は除外した。来場者数はTS視聴可能時間が来れば増え、TS来場者数を含まずに計算することは困難な仕様なので、翌日(当日)の朝に前日の6時から当日の6時までを取得している。

全放送を対象にしたので改めて以前の放送のデータを使って調べ直している。

2018年9月25日から2018年10月1日までの間、ログイン不要で生放送が見られるようになっているのでいつも以上に来場者数が多くなっている。

【10/1更新】【ニコニコ生放送】来場者数集計方法変更のお知らせ|ニコニコインフォ

Continue reading “2019年4月のニコ生統計”

2019年3月のニコ生統計

2017年1週目から2019年10週目までの取得漏れが判明し、毎週土曜日の放送開始0時から6時までの6時間が入ってなかった。気がついたのが2019年11週目で月間統計は過去のデータを修正したが過去記事は修正してない。

集計期間は週間のニコ生統計の1ヶ月分である。2018年からカテゴリタグの割合は今までと変わらないが、1枠30分の割合が少なくなったので来場者数とコメント数の6000以上を除かないすべての放送を対象にした。それに伴い平均値は除外した。来場者数はTS視聴可能時間が来れば増え、TS来場者数を含まずに計算することは困難な仕様なので、翌日(当日)の朝に前日の6時から当日の6時までを取得している。

全放送を対象にしたので改めて以前の放送のデータを使って調べ直している。

2018年9月25日から2018年10月1日までの間、ログイン不要で生放送が見られるようになっているのでいつも以上に来場者数が多くなっている。

【10/1更新】【ニコニコ生放送】来場者数集計方法変更のお知らせ|ニコニコインフォ

Continue reading “2019年3月のニコ生統計”

メンテナンスの顛末

当初はスターサーバーの無料サーバーを使っていて、これをスタードメイン無料特典の無料サーバーに切り替えて、常時httpsに変更するメンテナンスを行った。サーバーが変わり容量も10GBから3GBに変更され、すべてのファイルも入れ替えとなった。インストールも無事終わりプラグイン設定やftpに上げ直し一段落してブログを表示するとエラーが出る。SSL のエラー(ERR_CERT_COMMON_NAME_INVALID、SSL_ERROR_BAD_CERT_DOMAIN)が出て引っ越す前の状態に戻るときと、引っ越した後でSSLのエラーが出ないときと表示が直ったり直らなかったりを繰り返した。

運営に問い合わせると無料サービスなので回答を得られない。質問を変え3度問い合わせると「nico-lab.net」のDNSレコードがスターサーバーの無料サーバーとスタードメイン無料特典の無料サーバーを重複登録しているのを教えてもらった。ありがとう。というわけで、昔使っていたスターサーバーの無料サーバーを削除してエラーはなくなった。

ご契約特典:無料レンタルサーバープラン / スタードメイン – ドメイン取得 1,180円(税抜)~
無料独自SSL設定ガイド | レンタルサーバー【スターサーバー】
Webサイトの常時SSL化 | レンタルサーバー【スターサーバー】