我想围绕 FFMPEG 制作一个包装器,因为更改我的应用程序并不容易,而且我只想在特定命令中执行操作。
默认情况下,我想转发所有命令,但总是更改-loglevel warning
为error
如果我的包装器收到带有字符串“id=2015”或“id=2016”或“id=2017”的命令,我只想将我的参数转发给 ffmpeg。
我怎样才能做到这一点?
例子:
ffmpeg -y -nostdin -hide_banner -loglevel warning -err_detect ignore_err -fflags +genpts -async 1 -probesize 5000000 -analyzeduration 5000000 -progress http://127.0.0.1:80/progress.php?stream_id=2015 -i http://link -vcodec copy -scodec copy -acodec copy -map 0 -copy_unknown -individual_header_trailer 0 -f segment -segment_format mpegts -segment_time 10 -segment_list_size 3 -segment_format_options mpegts_flags=+initial_discontinuity:mpegts_copyts=1 -segment_list_type m3u8 -segment_list_flags +live+delete -segment_list /var/html/www/2015_.m3u8 /var/html/www/2015_%d.ts
该命令包含 id=2015,因此如果发生这种情况,我想使用以下命令来调用 ffmpeg:
ffmpeg $mycommands
如果原始命令包含 id=2015|2014|etc,则原始命令中的任何内容都不会被传递
答案1
我认为简单的替换不是一个好主意,也许您的文件有warning
其名称的一部分?
我宁愿循环参数并在-loglevel
找到时替换它:
ffmpeg(){
args=()
while (( $# )); do
args=("${args[@]}" "$1")
if [ "$1" = "-loglevel" ]; then
args=("${args[@]}" "error")
shift
fi
shift
done
/usr/bin/ffmpeg "${args[@]}"
}