如何创建一个在某些情况下重写所有参数的包装器?

如何创建一个在某些情况下重写所有参数的包装器?

我想围绕 FFMPEG 制作一个包装器,因为更改我的应用程序并不容易,而且我只想在特定命令中执行操作。

默认情况下,我想转发所有命令,但总是更改-loglevel warningerror

如果我的包装器收到带有字符串“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[@]}"
}

相关内容