論理学FAQのブログ

授業でもらったコメントに対して書いたリプライを、ブログ形式に編集しました。

オンライン講義YouTube配信実録(9)― Atem miniとV-02HD

ひさしぶりの更新です。音ズレについては、前回書いた

takuro-logic.hatenablog.com

教えてもらった方法でやっています。それでも起こるときは起こりますね。起こったのは、「スライド+PinPでカメラ」からカメラ映像のみに切り替えたときです。しばらくすると、映像が早回しになる感じで動いて音声に追いつきます。このまま解決しないままシリーズは終わってしまいそうです。。。

 

これまたすごく細かい話ですが、以前

takuro-logic.hatenablog.com

takuro-logic.hatenablog.com

で書いた、スイッチャーにかんする、Atem mini (Pro)とV-02HDでは帯に短し襷に長しですね、という話。

どちらも解決方法はあるようで、Atem mini (Pro)の方は「マクロ」を使うということですね。いや、わかってはいたんですが、解説してくれてる動画があったので紹介します。

youtu.be

これで、

  • 設定したPinPのウィンドウの大きさや場所が保存されない
  • PinPの「主」と「従」が切り替えられない

という問題は解決できます。ただ、これは結局はソフトウェア上で切り替え操作をやることになるので、うーん。ハードウェアのボタンでポチッとやりたいですよねー。

V-02HDの方の弱点は、PinPのウィンドウの場所をワンボタンで変えられないということでしたが、こちらは、V-02HDをiPadとUSBでつないで、アプリで操作するという方法があるようです。

f:id:takuro_logic:20200824195536p:plain

f:id:takuro_logic:20200824195702p:plain

ウィンドウの大きさや位置の設定をpreset memoryとして複数記憶させておいて(上図)、それをiPad上でタップして切り替える(下図)ということのようです。音声に対するエフェクトも、というか基本全部これで操作できるスグレモノなんですが、まあ、iPadもう1枚持っていかないといけないのはちょっとキツい。でも、ガチの配信するならこれもありでしょうか。

Atem mini Pro ISOというのも出ましたがこれまた機能的に歯がゆいところで、お値段もそこそこ高くなってきました。決定版というものが出るのはもう少し先でしょうか。(ISOは、USB出力が2つあったら100%買いましたね。)

 

ともあれ、講義配信はあと1回です。いまのところ大きなトラブルなくこれているので、気を引き締めて参ります。

0項述語

とつぜん論理学ネタに復帰しますが。動画で言えばこのあたりです。

youtu.be

述語の項数

述語論理の原子式は項と述語からなるわけですが、述語には1項述語、2項述語、3項述語…と項数 (arity) が決められています。

日本語と対応させるなら「…は人間である」なんかが1項、「…は…を尊敬している」なんかが2項、「…は…と…の間にある」なんかが3項述語でしょうか。4項以上になると、さすがに自然言語には自然な対応物がなさそうですが、数学的にはいくらでも増やすことができます。

で、学生さんから、

では0項述語ってあるんでしょうか、あるとすればどういうものでしょう

という質問が来ました(意訳)。

答え:0項述語は、古典命題論理で出てきた命題変項のことです。日本語で言えば、文ですね。今回はこれを、モデルにおける付値の観点から説明します。

1項述語に対する付値

述語論理のモデルは、個体領域  D (空でない集合)とその上の付値 v からなります*1。付値は、述語論理の言語中の各語彙に、モデル中の何らかの数学的対象を割り当てます。

例えば1項述語 ( P とします) には、 Dの部分集合を割り当てます。要するに  D 中の個体のうち P を満たすものの集合ですね。つまり、

(*)  v(P) \subseteq D (1項述語の付値は D の部分集合)

です。ここではこれからの議論のために、これに対して別の見方をします。D の部分集合を1つ決めることは、 D から真理値  \{1,0\} への写像を1つ決めることにほかなりません (こういうのに慣れている人はしばらくスキップしてください)。

例えば、 D=\{a,b,c\}として、その部分集合を1つ、これも例えば

 X=\{a,b\} \subseteq D

と決めることは、D の要素のうち a b には「Yes (入っていいよ)」、 c には「No (入ってはいけないよ)」と決めることにほかなりません。そして、Yesを1、Noを0とするなら、これは

  •  a\mapsto 1
  •  b\mapsto 1
  •  c \mapsto 0

という写像を定めることにほかなりません。もちろん、反対に  D から  \{1,0\} への写像が1つ与えられたら、そこから  D の部分集合(yesと言われているやつら)を1つ決めることができます。

とすると、上の(*)は次のように書き換えることができます。

(**)  v(P)\in D\to \{1,0\} (1項述語の付値は D から \{1,0\}への写像)

ただし、 X\to YX から Y への写像全体の集合を表すものとします。すでに確認したように、(*)と(**)は同じことをちがう仕方で言っているだけです。

まあ、「…は人間である」という述語は「…」に入るモノに対して、「Yes」と「No」を返す関数ですよね (オオニシに対しては「Yes」、MacBookに対しては「No」等々)。だから、(**)の見方はごく自然なもののはずです。

n項述語に対する付値

2項述語の付値は  D^2=D\times D の部分集合、つまり、 D の要素のペアの集合でした。つまり、2項述語 P に対しては、

(*2)  v(P) \subseteq D^2

でした。先ほどと同じ見方の転換をすれば、これは

(**2)  v(P)\in D^2\to \{1,0\}

と言い換えることができます。つまり、各ペアに対して「Yes」と「No」を返す関数です。

もうおわかりかと思いますが、一般に  n 項述語 P に対しては、

(*n)  v(P) \subseteq D^n

であり、

(**n)  v(P)\in D^n\to \{1,0\}

です。先ほどの1項述語のときの (**) はこれの  n=1 の場合、すなわち、

(**1)  v(P)\in D^1\to \{1,0\}

に当たります。

0項述語に対する付値

さて、よくわからないながらも記号的に進めていけるのが数学のいいところです。以上を踏まえると、0項述語 (というものがあるとして) に対する付値は、

(**0)  v(P)\in D^0\to \{1,0\}

となるはずです。

集合の0乗

この  D^0 とは数の0乗 ( =1) と同じようなもので、あるいみ特別な集合です。すなわち、

 D^0=\{*\}

です。 * は何でもいいんだけど何らかの要素 ( D の要素とは関係ない) で、 \{ *\} とはその  * からなるシングルトン (単元集合) です。これは、この D に限った話ではなく、任意の集合  X に対して、

 X^0=\{ *\}

とすることができます *2

 \{*\} からの写像

さてでは次は、 D^0=\{*\} から \{1,0\} への写像とはどのようなものか考えてみましょう。2つしかないはずです。すなわち、

  •  f_1: *\mapsto 1 と割り当てる写像  f_1 か、
  •  f_0: *\mapsto 0 と割り当てる写像  f_0

しかありません。つまり、

 D^0\to \{1,0\} = \{ f_1, f_0\}

ですね。で、これって、

 D^0\to \{1,0\} = \{ f_1, f_0\}\cong \{1,0\}

ですね ( \cong は集合の同型)。

一般に、 \{*\} から集合  X への写像を1つ決めることは、(\{*\} に割り当てられる値として) 値域集合  X の要素を1つ決めることにほかならず、その逆も同様です。つまり、

 \{*\}\to X \cong X

です。 \{*\} から集合  X への写像の集合は、 X そのものと同一視できます。

0項述語=命題変項

これを踏まえると、(**0)は次のように書き換えられます。

(***0)  v(P)\in \{1,0\}

つまり、あるモデルにおける付値  vは、0項述語  P に対して1か0を割り当てる、ということです。付値によって1か0を割り当てられるものって何だったかと言うと、命題変項にほかなりません。ということで、0項述語とは命題変項のことやんかということになります。

 

以上は、0項述語というものがあるとすればそれは何かということを、述語論理のモデルの枠組みの中で数学的に整理しただけです。命題変項に対応する日本語の文というカテゴリーを「0項述語」と呼ぶことで何かおもしろいことがあるかというと、どうでしょう。無いんじゃないかなあ。

*1:このあたりはだいたい標準的な定義ですが、正確な定義はレジュメを見てください。

*2:この  \{ *\} は何かと言うと「掛け算の単位元」です。上で述べたとおり  1 です。というのは、任意の集合  X について、  \{*\} \times X\cong X\cong X\times \{*\} が成り立つからです ( \cong は集合としての同型関係、すなわち、全単射が存在するということを表します)。数の掛け算について  1\times x=x=x\times 1 が成り立つのと同じです。

オンライン講義YouTube配信実録(8)―新・音ズレ編+スイッチャーこぼれ話

スイッチャーを変えても音ズレ出ちゃったね…ということで

takuro-logic.hatenablog.com

途方に暮れていたのですが、ちょっと気になっていたこともありました。

気になっていたこと

今回の配信の特徴は、

  • カメラとスライドの映像を切り替えたりPinPで合成したりと、かなり異なる解像度(でいいのかしら)の映像データを扱っているところ
  • ただし音声はカメラに接続したマイクからの音声で一定だというところ

です。

YouTubeに配信しているときも、スライドを映しているときは「ビットレート低すぎですけど大丈夫?」と聞かれ、カメラ映像を映しているときは「ビットレート高すぎしんどい」と言われ、という状態です(そういうアラートメッセージが管理画面に出るんです)。

このあたりにヒントというか原因があるんではないかなと思っていたところに、次のようなお助けツイートをいただきました。

前半は現行のセッティングなのでよいとして、「人物はずっとPinPで表示させる必要があります」あたりが、私の推測とわりと合致します。つまり、カメラの映像が映されていない間にズレが生じているのではないかということです。

ただし、ずっとPinPで表示させるのは現実的でないので困ったな、というところに、

ともいただきました。つまり、OBSで配信している映像を映している画面を切るのですね。そんなことで変わるのかしら、とも思いましたが、他の方から「どの段階でズレてるのか確かめるといいよ」ともアドバイスいただいたので、テストしてみることにしました。

テスト

(1) まず、音ズレが生じるであろう方法で配信しました。スイッチャーはV-02HDを使いました(Atem Mini Proでも同じだとは思いますが)。

  • OBSでプレビューを表示させて配信
  • カメラ映像が表示されていない時間を作る

要するにこれまでと同様、です。すると、見事音ズレが再現しました。そして、

  • V-02HDの映像・音声モニターではズレていないが、
  • OBSのプレビュー映像と音声モニターではズレている (配信前はズレてなかった)

ということがわかりました。このOBSでのズレがYouTubeに反映されているんでしょうね。

このズレはOBSを再起動すると直るようですが、1回の再起動では直らないときもありました。2回やれば直ります(たぶん)。

(2) OBSが悪さをしてるんだろうという蓋然性が高まったので、教えてもらった方法を試します。つまり、プレビューを無効化しました。すると、いまのところ音ズレは生じていません。これは期待できるんではないでしょうか。

とはいえ「生じない」というのはなかなか完全に立証できるようなことではないので、過剰な期待はせず、しばらくこの方法を試したいと思います。プレビュー使えないのは操作の観点からするとわりと厳しいんですけどね。

Atem Mini Pro vs V-02HD

スイッチャーのせいではなさそうということで、改めてAtem Mini Proを使うかV-02HDを使うか、選ぶことができるわけですが、Atem Mini Proのひとつの欠点は、PinPの「主と従」をワンタッチで切り替えられないことです。つまり、

「スライド+右隅に講師カメラ」↔「講師カメラ映像+右隅にスライド」

の切り替えですね。ソフトウェアで設定を変えればできるんですが、ワンタッチではできない(たぶん)。対してこれができる、というのがV-02HDのいいところです。

この帯に短し襷に長し感、V-1HDまでいくと解消されるんでしょうか。

PinPと言えば、Zoomがこのあたりをなぎ倒す感じのアップデートを出したようですが、

techwave.jp

なんかZoomのことは好きになれないですねえ。ふだんミーティングで使っているからでしょうね。

オンライン講義YouTube配信実録(7)ーZoomからYouTube編

この仕事は次々やってくるいろんな設定、いろんな環境で録画や編集、配信をしないといけないのでハードです。ソリューションを考えるのは好きなのでいいんですが。

ZoomからYouTubeへの配信

いつもは京都からカメラ映像をそのままYouTubeへ配信するわけですが、今回は先生が東京におられるということで、Zoomで東京と京都を結んで、Zoomの映像音声をYouTubeへ配信することにしました。

Zoomは内部にYouTubeへの配信機能を備えていて、やろうと思えばかんたんにやれてしまいます。例えばこんな感じ。

note.com

ただ、何度か試したかぎりでは画質があまりよくなく、特にスライドの文字がぼやけるレベルだったので、あきらめました。

Zoomのウィンドウ・音声をOBSでキャプチャ on Mac

ということで、こちらのMacBook Proに出てきているZoomの映像(ウィンドウ)と音声をOBSでキャプチャして、それをYouTubeに配信することにしました。

これがMacだとわりとめんどくさいです。Windowsならすぐにできるはずなんですが。すでにウェブ上にいくつも情報は出ていますが、書いておきましょう。

ウィンドウキャプチャ

まず、Macの中で動いているウィンドウを映像としてOBSに取り込むには、

qiita.com

という手順が必要です。

次に画面構成ですが、先生にZoom上でスライドを「画面共有」していただいて、「左右表示モード」で左にスライド、右に先生のお顔を小さく映しました。それをこちらのMacでは全画面表示するときれいです。

ただし、配信中はこちらはYouTubeのチャット欄のチェックなどをしますので、操作の際にウィンドウが動いて、変な挙動が配信画面に出てしまいます。ということで、

f:id:takuro_logic:20200804212906j:plain

てな感じのポータブルディスプレイをつないで、こちらのディスプレイにZoomを全画面表示、MBP本体でYouTubeなど各種操作、ということにしました*1

スライドはぼやけることなく、とてもきれいに表示できたと思います。お顔の方はPCのインカメラですから、画質はまあしょうがないですね。

音声キャプチャ

これがいちばん苦労したところです。Zoomから流れてくる音声、つまるところはいま自分のMac上で流れてくる音声をOBSに取り込むということなんですが…。

一般的な方法とされているのは、SoundflowerとLadiocastというアプリを使うというものですね。例えば次のような感じ(古い記事ですが)。

qiita.com

これがどうもぜんぜんうまく行かず(たぶんMacOSのセキュリティの関係)、けっきょくBackground Musicというアプリを使って解決しました。

jittodesign.org

アプリごとの音量調整をできるようにするのが主眼のアプリのようですが、それにミキサー的な機能もくっついていたのを利用しました。

まあこういうのをやってると何が入力で何が出力なのか、ほんとうにアタマがこんがらがってきますね。弱い。

音質は問題なかったと思います。音ズレはがんばってみましたけど、まあどうにもなりませんでした。実際の配信はこちら。

youtu.be

*1:もっててよかったポータブルディスプレイ、と思ったんですが、よく考えたら、この足元にふつうのでかいディスプレイも転がっていたのでした。そっち使えばよかった。

オンライン講義YouTube配信実録(6)ーslido編

今回はちょっとポジティブな話です。

配信中にアンケート投票

先生から「配信中にアンケート投票やりたいんですけど、できますか」というお問い合わせをいただきました。私がパッと思いついたのは、ニコ動の将棋中継でやってる「次の一手アンケート」でした。あのころはたのしかったですね。いまはAbemaの勢いに押され気味に感じます。

それはともかく、YouTubeライブにはそのような機能はなさそうだったので、slidoというウェブサービスを使うことにしました。

www.sli.do

以前Twitterで成瀬尚志 @ihuru09 さんが紹介されていて、コロナ前の話ですから、成瀬さんはふつうに大学の対面授業で使われていたのですが、それをここでやってみようと思いつきました。

これはもう使用場面を見ていただくのがいちばん早いと思います:

youtu.be

数百人の投票結果がリアルタイムで更新されていくのでなかなか楽しいです。スマホQRコードを読みとってアクセスするか、PCならslidoのページに行って指定のアクセスナンバー(上では#71606)を記入するか、で投票できるようになります。匿名です。

スマホでこの講義を見ている人はちょっとアクセスが難しいですが、平均して、リアルタイム視聴者の約半分に参加していただきました。

参加意識が高まって視聴者のみなさんには楽しんでいただけたと思いますし、YouTubeのチャット欄での「その他」ご記入も盛り上がりました。slidoのシステムの安定性はまったく心配なさそうなので、おすすめです。

配信の段取り

YouTubeとは独立したウェブサービスなので、配信者としては切り替えに少し気を遣います。(slidoと各配信サービスのintegrationもできるようですが、ちょっと「integrateしすぎ」な印象だったので使いませんでした。)

具体的な段取りとしては、

  • slidoには予め質問を登録して、ブラウザで開いておく
  • ブラウザウィンドウをOBSの「ウィンドウキャプチャ」で取り込んでおく
  • 先生が質問を説明し終わったら slidoの「投票スタート」的なボタンを押す
  • 同時にOBSをカメラ/スライド映像からウィンドウキャプチャの映像に切り替える
  • YouTubeのチャット欄に「投票どうぞ〜」と書き込む
  • 先生がスライドに戻ったら映像を切り替えて、slidoの投票受付を終了する

みたいな感じで、ちょっとわちゃわちゃしますが、講義やイベント、シンポ配信する方、いかがでしょうか。

オンライン講義YouTube配信実録(5)ー音ズレ再発編+Atem Mini Proのこまかい話

 

takuro-logic.hatenablog.com

の続きです。

配信中の音ズレがハードウェアの問題かなと思って、ミキサー周りをV-02HDからAtem Mini Proに変えてみたのですが、結局再発しました

配信中にOBSで遅延時間を変更できることがわかったので(一瞬だけ音声は途切れる)、300msほど音声を遅らせてやってちょっとはマシになりましたが、まあ困りました。

この間、以前のハードウェア環境でも何度か実験したのですが、そちらでは問題は再現せず、問題の切り分けもやりようがない状態です。

困りましたね。かなりあきらめモードです。

Atem Mini Pro

ついでなので、Atem Mini Proについてこまか〜いことを書いておきます。HDMI入力を4つ備えたミキサー・スイッチャーでかなり高機能です。今回の配信では、カメラ映像・音声と、講義スライドの映像を入力して、それらをスイッチしたりミックスしたりして、MacBook Proに入力しています。

よいところ(1) USB-CでMacBook Proと接続:あいだにキャプチャーボード挟まなくてよいのは精神的にいいですね。

よいところ(2) PinP (ピクチャーインピクチャー) 操作:講義映像は「スライド+講師の顔ワイプ」が基本なので、PinPは重要です。とくに、ワイプを画面4隅のどこに出すかをワンボタンで操作できるのがありがたいです。わたしは基本、右下隅に置いてますが、そこにスライドの文字が来たら右上隅に逃がすことができます。やりすぎるとうるさくなるでしょうが、なるべく先生のお顔は写したいのです。

残念なところ(1) PinP設定:ひとつ残念なのはデフォルトのワイプが少し小さいところです。もちろん、MBPにインストールしたAtem Software Control内でワイプの大きさや位置設定を変えることはできるのですが、なんと、上述の場所変更操作をすると、設定がデフォルトに戻ってしまうのです!これ、ソフト側のアップデートで早めに何とかしてほしいところです。

残念なところ(2) 直接配信:Atem Mini Proの売りはLANケーブルをつないでの直接配信ですが、それをコントロールするAtem Software Controlが貧弱なので、あまり使えないなあという印象です。配信の前後にスライドショーを流したりしたいのですが、それも無理 (画像1枚表示はできる) となると、なかなか厳しいです。

オンライン講義YouTube配信実録(4)ー続・音ズレ編

前回の

takuro-logic.hatenablog.com

のアップデートです。とくに有益な情報はないかもしれません笑

上記エントリを書いているうちになんとなく、ソフトウェアではなくハードウェアの問題かなと思うようになってきたので、ミキサー周辺を取っ替えることにしました。結果として、不安定な音ズレ問題は解消したようです(いまのところ)。

変更点

これまでは、

カメラ→HDMIケーブル→ミキサーV-02HD→HDMIケーブル→キャプチャボード→USB type A-C変換アダプタ→MacBook Pro

という経路でしたが、

カメラ→HDMIケーブル→ミキサーAtem Mini Pro→USB-Cケーブル

に変更しました。

もともと、ミキサーから3つのケーブル・デバイスを挟むのがあまりいい気分ではありませんでした。トラブルが起こる可能性が3倍 (3乗?) になってしまうので。その点、Atem Mini ProはUSB-Cの1本でつなげるのでわりと気が楽です。

結果

今朝1回のテスト配信および2コマの講義を通じて、不安定な音ズレは起こりませんでした。正確に言うと、最初から音ズレは生じている(200msくらい)のですが、OBSでそのぶん音声を遅延させておけば、それ以上ズレるということはありませんでした。これは先日までのうまくいっていたときと同じ状況です。

ということで、

V-02HD→HDMIケーブル→キャプチャボード→USB type A-C変換アダプタ

のどこかにトラブルが生じているのではないかと思います。今日の配信後、もう一度この従来のセッティングでテスト配信したところ、不安定な音ズレが再現したので、ほぼ確定と言ってよいのではないかと思います。

他方で、自宅の環境(別のカメラ→Atem Mini Pro→iMac)でテスト配信したときはそもそも音ズレはまったく生じなかったので、MacBook Proあるいはカメラ(Lumix)のほうに何かしらの原因があるという可能性も残っています。

今後

Atem Mini Proは私物なので、何とかV-02HDを使いたいところです。ということで、上のセッティングのどこに原因があるのか、ぼちぼちテストしていきたいと思います。V-02HDのファームウェアアップデートとかですぱっと直らないかな。