確認環境
Windows
あらかじめgpgのパスをPATHに通しておくと良い
参考値:C:\Program Files (x86)\GnuPG\bin
| Env | Ver |
|---|---|
| Windows 10 Pro | Build 19042.804 |
| git | 2.30.0.windows.1 |
| VSCode | 1.53.2 |
| Kleopatra | Gpg4win-3.1.15 |
Linux
Windows側からVSCodeのRemote - SSHで接続
| Env | Ver |
|---|---|
| Ubuntu Desktop | 20.04.2 |
| git | 2.25.1 |
| gpg | 2.2.19 |
手順
Windows
- Kleopatoraを起動
- ファイル> New Pair Key
- 個人用のOpenPGP鍵ペアを生成
- 期限なし、パスフレーズは適当に
- Exportから
-----BEGIN PGP PUBLIC KEY BLOCK-----の中身を全部GitHubのGPG keys/ Add newに貼り付ける - 追加後にでてきた
Key IDをgit config --global user.signingkey KeyIDとしてcmdに流す - 以下を流す(
gpg.programはなくても動くが、あったほうが問題が起きない)
```bat
git config --global commit.gpgsign true
git config --global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe"
``` - 管理者権限で
cmdを起動し次のシンボリックリンクを作成mklink /D %USERPROFILE%.gnupg %AppData%\GnuPG
- VSCodeで適当なリポジトリを作成
- なんか適当にコミットする
- GitHubに投げる
- GitHubのコミット履歴にverified signatureがついてたら成功
Linux
- Windows側のKleopatoraから公開鍵と秘密鍵をエクスポートして持ってくる
gpg --import FooBarpublic.ascで公開鍵をインポートgpg -kでインポートされていることを確認し、下記XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX相当の部分をコピペ
pub rsa3072 2021-01-17 [SC]
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
uid [ 不明 ] Foo Bar <foobar@example.com>
sub rsa3072 2021-01-17 [E]
gpg --edit-key XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXtrust5を選ぶquitgpg -kで信用度が[ 究極 ]になっていることを確認gpg --import FooBarSECRET.ascで秘密鍵をインポート- SSHで繋いでいる時でタイムアウトする場合、GUIプロンプトからの入力になっている可能性があるので、どうにかして入力
- XRDP経由なら
pkill gnome-sessionを叩くと入れる
- Windowsの時と同様に次のコマンドを流す
git config --global user.signingkey KeyIDgit config --global commit.gpgsign true
- VSCodeで適当なリポジトリを作成
- 何か適当にコミットする
- コミットがコケたらXRDPから入力する
- GitHubに投げる
- GitHubのコミット履歴にverified signatureがついてたら成功
CLIからやる場合でパスフレーズを何度も打ちたくないケース
以下の手順が参考になる
トラブルシュート
Key IDを確認したい
以下のコマンドで確認可能
gpg --list-signatures
GPGキーを消したい
いつも使う時に忘れるので自分用の備忘録がてら。組み合わせることでGrep結果の集計とか、ある程度パターン化されているエクセル設計書の集計とかに使える
こんな地獄のような数式使わないに越したことはないと思うんですが、世の中それで済んだらExcelなんて要らないんですよね!
パターンで文字切り出し
A2に<hoge>あいうえお</hoge>みたいな文字があるとして
D2に<hoge>, E2に</hoge>があるとする場合、B2辺りに以下の数式を入れると特定の文字列で囲まれた文字列を切り出せる
=MID(A2,FIND(D$2,A2)+LEN(D$2),(FIND(E$2,A2)-FIND(D$2,A2)-LEN(D$2)))
条件付き書式を複数列反映
D列の値を条件として同一行複数列に書式設定するものとする
条件式で$D1="HOGE"のように列名をロックした式を設定し、範囲をA:Gのようにすると、常にD列を参照した状態で範囲的に設定できる
最初に出現する行位置の特定
=MATCH("hoge",A:A,0)
ワイルドカード
アスタリスクを生やす
=MATCH("*hoge",A:A,0)
セクション行のグルーピング
Grepとかで抜き出した結果をエクセルに貼り付けてグルーピングする時に使えるやつ
これを
| Title |
|---|
| C:\Hoge\Foo\Src\Hoge001.txt |
| 100,1: aaaa |
| 101,1: bbb |
| C:\Hoge\Foo\Src\Hoge002.txt |
| 10,1: aaaa |
| 11,1: bbb |
| 18,8: cccc |
| ... |
こうしたい
| Title | Section |
|---|---|
| C:\Hoge\Foo\Src\Hoge001.txt | Hoge001 |
| 100,1: aaaa | Hoge001 |
| 101,1: bbb | Hoge001 |
| C:\Hoge\Foo\Src\Hoge002.txt | Hoge002 |
| 10,1: aaaa | Hoge002 |
| 11,1: bbb | Hoge002 |
| 18,8: cccc | Hoge002 |
| ... | ... |
手法
Sectionを抜く列を作る
B2だけは決め打ちで2を入れておき、B3以降に設定
=IF(ISERROR(FIND(E$2,A3)),B2,ROW())
Section名を抜く列を作る
C2以降に設定、タイトル行ならD2とE2の値を元にA列の内容を切り出し、タイトル行でなければB列の値を行番号とし、C列の行を当てに行くロジック
=IF(ISERROR(FIND(D$2,A2)),INDIRECT("C"&B2),MID(A2,FIND(D$2,A2)+LEN(D$2),(FIND(E$2,A2)-FIND(D$2,A2)-LEN(D$2))))
複数条件でのCOUNTIF
COUNTIF()で複数条件を実現するには文字列結合した列を作る事があると思いますが、COUNTIFS()ならその必要はない
=COUNTIFS(条件列1, 条件1, 条件列2, 条件2, ...)
便利関数メモ
よく使うやつ
IF(),AND(),OR(),NOT()- 条件分岐でよく使う
SUM()- 集計用。
SUMIFS()はあんま使ったことない
- 集計用。
COUNTIF(),COUNTIFS()- 条件付き集計
COUNT(),COUNTA(),COUNTBLANK()- 個数カウント
VLOOKUP(),MATCH()- 検索用
ADDRESS(),INDIRECT(),INDEX()MATCH()結果からセルを当てる時に有用INDIRECT()はシート名を書いておくとシート名の変更時に追従しやすい(その際シート名管理用のセルをどっかに作っておく)
FIND(),LEN(),MID()- 文字列切り出しの鉄板
まれに使うやつ
DATEDIF()- DATEの差分がINTで取れる便利な子
概要
Windows 10でffmpegを使ってWebCamの内容をRTPで送受信する事について調べたので、そのログ
送信するフォーマットはH.264, G.711
ffmpeg4.1を使用
基本
ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url}-iの前にあるものがglobal_options- input_file_optionsも
-iの手前にある
- input_file_optionsも
-iで入力を指定- ファイルパスやURL、デバイスIDなどを指定できる
- https://www.ffmpeg.org/ffmpeg.html#Main-options
- input_urlの後ろにあるものが出力
- 但し解釈不能なコマンドはすべて出力として扱われる
- https://ffmpeg.org/ffmpeg-all.html#Description
結論
動作確認はしてないので注意
- 送信側
ffmpeg -re -f dshow -i video="Hoge_Camera":audio="Hoge_MIC" -r 30 -c:v libx264 -an -f rtp rtp://224.0.0.255:1234 -c:a pcm_mulaw -vn -f rtp rtp://224.0.0.255:1235 -sdp_file stream.sdp
- 受信側
ffplay -protocol_whitelist "file,udp,rtp" stream.sdp- ffplayをffmpegに変えてI/O出来るようにしてやるとファイルに落としたり再送したりできる
各オプションについて
-re- 本来のフレームレートで読み込む。指定しない場合は早送りになる?
- ストリーミングを流したりするときに利用する、エンコードで使うと遅くなりそう
- https://ffmpeg.org/ffmpeg.html#Advanced-options
-y- 出力ファイルの上書きを確認しない
- https://www.ffmpeg.org/ffmpeg.html#Main-options
-f- I/Oフォーマットの指定
- ffmpegは自動でフォーマットを検出する機能を持つが、それを無視する場合に使用する
- https://ffmpeg.org/ffmpeg.html#Main-options
- dshow
- DirectShowデバイスを指定
- https://www.ffmpeg.org/ffmpeg-devices.html#dshow
- https://trac.ffmpeg.org/wiki/DirectShow
- DirectShowデバイスの一覧
ffmpeg -list_devices true -f dshow -i dummy- https://www.ffmpeg.org/ffmpeg-devices.html#Examples-2
- 入力デバイスの指定
TYPE=NAME[:TYPE=NAME]- http://ffmpeg.org/ffmpeg-devices.html#dshow
- rtp
- RTPを指定
-formats-fオプションで指定できるフォーマットの一覧を表示- https://www.ffmpeg.org/ffmpeg.html#Generic-options
-r- フレームレートの設定
- https://www.ffmpeg.org/ffmpeg.html#Video-Options
-c[:stream_specifier]- ストリームに対してコーデックを指定する
- 例外的に
-c copyはコーデックコピーとなる - https://www.ffmpeg.org/ffmpeg.html#Main-options
-c:vで動画の-c:aで音声のコーデックを指定できる
- stream_specifier
- 各種オプションで利用するストリーム識別子
- 雑に書くと
vが映像、aが音声 - http://ffmpeg.org/ffmpeg.html#Stream-specifiers-1
-decoders- 利用可能なデコーダーの一覧
- https://www.ffmpeg.org/ffmpeg.html#Generic-options
-an- 音声ストリームをブロックする
- https://www.ffmpeg.org/ffmpeg.html#Audio-Options
- 動画ストリームを切り出すのに利用
-vn- 動画ストリームをブロックする
- https://www.ffmpeg.org/ffmpeg.html#Video-Options
- 音声ストリームを切り出すのに利用
-sdp_file- SDPファイルを出力する
- https://www.ffmpeg.org/ffmpeg.html#Advanced-options
-yオプションの有無に関わらず上書きされる
-protocol_whitelist "tcp, udp, ..."- カンマ区切りでプロトコルを指定することで、プロトコルを利用できるようになる
- https://ffmpeg.org/ffmpeg-protocols.html#Protocol-Options
- SDPファイルを用いてRTPストリームを受ける場合には
"file,udp,rtp"を指定する- file
- ローカルファイルへのアクセスプロトコル
- https://ffmpeg.org/ffmpeg-protocols.html#file
- udp
- UDP
- https://ffmpeg.org/ffmpeg-protocols.html#udp
- rtp
- RTP
- https://ffmpeg.org/ffmpeg-protocols.html#rtp
- なんでfileがいるのかは正直良くわかってない
- file

