特定の状況ですべてのパラメータをオーバーライドするラッパーを作成するには?

特定の状況ですべてのパラメータをオーバーライドするラッパーを作成するには?

私のアプリケーションを変更するのは簡単ではなく、特定のコマンド内でのみ作業をしたいので、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[@]}"
}

おすすめ記事