我正在使用 FFMPEG 对 RTMP 流进行转码。如果原始比特率大于 600k,我希望输出具有 600k(近似)的比特率,否则输出应该具有原始比特率。我看过-minrate、-maxrate、-bufsize。但不要认为它们在这里适用。有没有办法实现这一点,最好是在单个 FFMPEG 命令中?
最佳答案
这是如何完成的示例。
使用 ffprobe 短时间读取输入。
如果无法检测到 bit_rate(即 N/A 或为空),这是安全的
q=$(ffprobe -i rtmp://localhost/rtmpapp/key -select_streams v:0 -show_entries stream=width,height,bit_rate -of csv=s=_:p=0 -analyzeduration 100k -probesize 100k)
bit_rate=$(echo $q | cut -d'_' -f 3)
b=$(echo "($bit_rate / 1000)" | bc) #convert to kbps
target=4000 # this will be maximum target bitrate
btarget=$(( (target < b || b == 0) ? target : b )) #get min of the two
bmax=$(echo "($btarget*1.1) /1" | bc) #multiplier for maxrate
bbuf=$(echo "($btarget*1.5) /1" | bc) #multiplier for bufsize
关于FFMPEG:选择原始和指定比特率的最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58062637/