ffmpegの動画エンコーダーにはソフトエンコードとハードエンコードがあります。ソフトエンコードはプログラムとCPUのチカラでエンコード処理をします。ハードエンコードはCPUに加えてGPUのチカラも借りて処理するので、変換速度はハードエンコードの方が早いです。ffmpegでは、一般的なH.264コーデック のソフトエンコードとしてはlibx264があり、Raspberry Pi用のハードエンコードとしてはh264_omxが用意されています。
コマンドラインから
$ ffmpeg -re -i rtmp://localhost:1935/multi/test -c:v h264_omx -vb 6000k -vf scale=-1:720 -acodec copy -f flv rtmp://localhost:1935/live/test;
と実行する分にはh264_omxのラズパイ用ハードエンコードが使えるのですが、nginxの中でexec_pushとして上記コマンドを実行するとうまく動きません。h264_omxの部分をlibx264に変えるとexec_pushとして実行できます。僕が持っているRaspberry Pi 4はメモリ2GBモデルで、topコマンドで確認する限りはエンコード中メモリがいっぱいいっぱいということはないのですが、、、ハードエンコードですとspeedが1倍を超えますので、リアルタイムエンコードもコマ落ちなどなくできていると思います。libx264の場合は、1を切ります。
画質はもしかしたらソフトエンコードの方が良いかもしれませんが、nginxのRTMP設定の中でh264_omxを使ってffmpegが実行できたら良いのになと思います。
解決法がわかるまでは、Windows環境の時と同じように、コマンドラインでffmpegを実行してストリーム名multiの動画を720にトランスコード してストリーム名liveに渡すことで対処します。
$ ffmpeg -re -i rtmp://localhost:1935/multi/test -c:v h264_omx -vb 6000k -vf scale=-1:720 -acodec copy -f flv rtmp://localhost:1935/live/test;
何かわかったらまた記事にしようと思います。