ふりかえりのグラウンドルールを定着させるためにリモート会議でルールを銀魂風に映す

ふりかえりのグラウンドルールはそれなりにあります。
子供の頃トイレやお風呂にひらがな表は貼ってあったりしないでしょうか？
Web会議では毎日のように自分のアイコンが流れます。
それをひらがな表のようにグラウンドルールを毎日流すと覚えてくれるという試みをしました。

相手からはこういうふうに見えていると思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230043/0741b2ae-17d6-beb1-c9de-93416195da4c.png)

画像だけでもいい感じですね。

![image6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230043/1b7e511d-7a4e-ba1a-a8aa-c01494c453c3.png)
![image7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230043/bcdcc2ea-5eb1-66b1-af7f-710bc017b9fe.png)
![image8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230043/eeba01cc-3bdb-df3c-e6a6-b0f3bd8b0b16.png)

## 作り方
### 画像を作る

ふりかえるのグラウンドルールはこちらを参考にしました。
https://www.agile-studio.jp/post/update-retrospective-guide-v35


```bash
git clone https://github.com/misogihagi/ground-rules-camera
cd ground-rules-camera
```

ここからフォントをダウンロードします。
https://fontfree.me/762

解凍し、画像を生成します。

```bash
unzip kssweetheavycalligraphy100.zip
node .
sudo mkdir /usr/local/share/images
sudo mv image*.png /usr/local/share/images
```

### カメラに登録
後は仮想カメラを作ってffmpegに流し込むだけです。

```bash
sudo apt install ffmpeg v4l2loopback-dkms
echo "options v4l2loopback video_nr=42 exclusive_caps=1" | sudo tee -a /etc/modprobe.d/v4l2loopback.conf

echo v4l2loopback | sudo tee -a /etc/modules-load.d/modules.conf
sudo systemctl restart systemd-modules-load.service
/usr/bin/ffmpeg -loop 1 -re -i /usr/local/share/images/image0.png -f v4l2 -pix_fmt yuv420p /dev/video42
```

systemdに入れておくと起動時に使えるので便利です。

```bash
cat << 'EOF' | sudo tee /etc/systemd/system/ground-rules-camera.service 
[Unit]
Description=Stream Image to Virtual Video Device
After=network.target

[Service]
ExecStart=/usr/bin/ffmpeg -loop 1 -re -i /usr/local/share/images/image$((10#$(date +%%d) %% 9)).png -f v4l2 -pix_fmt yuv420p /dev/video42

Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl start ground-rules-camera.service
sudo systemctl enable ground-rules-camera.service
```

ffmpegで書き込む代わりにプログラム自作する方法もあります。
その場合は一度yuv形式に変換して
```
ffmpeg -i /usr/local/share/images/image0.png -pix_fmt yuv420p /usr/local/share/images/image0.yuv
```

標準入力に渡してあげるだけです。
こっちのほうが軽いかもしれませんね。

```golang
package main

import (
    "io/ioutil"
	"os"
)

func main() {
    bytes, err := ioutil.ReadFile("/usr/local/share/images/image0.yuv")
    if err != nil {
        panic(err)
    }


	for {
		os.Stdout.Write(bytes)
		os.Stdout.Sync()
	}
}
```


## おまけ
![image0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230043/15abbcf8-0185-18ce-f70d-a6dfbd4a88ed.png)
![image1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230043/f0f4195f-b5b7-1f81-da31-6b30dc24de5c.png)
![image2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230043/b5e6561c-a07f-27db-37ab-1edec0b98f42.png)
![image3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230043/93fba58b-60c2-37a4-ee6f-f3c0f8a138b0.png)
![image4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230043/f5411dd0-6102-3afa-457c-072b30a3e76c.png)
![image5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230043/b3ac6ae8-38db-902d-fb91-690e8c662395.png)
![image6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230043/1b7e511d-7a4e-ba1a-a8aa-c01494c453c3.png)
![image7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230043/bcdcc2ea-5eb1-66b1-af7f-710bc017b9fe.png)
![image8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230043/eeba01cc-3bdb-df3c-e6a6-b0f3bd8b0b16.png)


## 参考

https://askubuntu.com/questions/1028898/systemd-service-startup-script-worked-in-16-04-but-throws-an-error-in-18-04

https://superuser.com/questions/1585515/how-do-i-stream-jpgs-to-v4l2loopback-with-ffmpeg

https://biacco42.hatenablog.com/entry/2020/05/12/233429