ffmpegを使用して画面内で実行されるrtmpストリームを生成するスクリプトがありますが、どのような理由で失敗しますか?コマンドラインから直接実行すると動作するので > screen を開いて実行した後 ctrl+d で screen をオフにして実行してみましたが、それでもなんとなく終了することがあります。
スクリプト内でコマンドが失敗しますが、直接実行した場合に動作する理由を確認するために、スクリプト内のffmpegからstderrを記録する方法はありますか?
#!/bin/bash
if [ "$1" = "run" ]; then
source $HOME/.bash_aliases
while [ 1 ]; do
ffmpeg -f x11grab -s 1000x563 -framerate 30 -i $DISPLAY+10,151 -f pulse -ac 2 -i default -c:v libx264 -preset ultrafast -tune zerolatency -x264opts keyint=30:min-keyint=10 -b:v 2000k -pix_fmt yuv420p -s 1000x562 -c:a aac -b:a 160k -ar 44100 -t '4:00:00' -threads 0 -f flv rtmp://IPADDRESS:1935/live1/$CHANNEL
done
else
killall -9 ffmpeg > /dev/null 2>&1
sleep 5s;
screen -ls | grep ffmpeg > /dev/null 2>&1
if [ "$?" = "1" ]; then
screen -mdS ffmpeg $0 run
fi
fi
ありがとうございます〜
ベストアンサー1
スクリプト内でコマンドが失敗しますが、直接実行した場合に動作する理由を確認するために、スクリプト内のffmpegからstderrを記録する方法はありますか?
ここでは、ストリーム2、stderrをtmp
.Aに渡し、tmpファイルを上書きしたくないので、名前にPIDを追加します。
my_command 2> /tmp/ffmpeg_error$$.log
今ffmpegに適用します。
ffmpeg -f x11grab -s 1000x563 -framerate 30 -i $DISPLAY+10,151 -f pulse -ac 2 -i default -c:v libx264 -preset ultrafast -tune zerolatency -x264opts keyint=30:min-keyint=10 -b:v 2000k -pix_fmt yuv420p -s 1000x562 -c:a aac -b:a 160k -ar 44100 -t '4:00:00' -threads 0 -f flv rtmp://IPADDRESS:1935/live1/$CHANNEL 2> /tmp/ffmpeg_error$$.log