특정 상황에서 모든 매개변수를 재정의하는 래퍼를 만드는 방법은 무엇입니까?

특정 상황에서 모든 매개변수를 재정의하는 래퍼를 만드는 방법은 무엇입니까?

내 응용 프로그램을 변경하는 것이 쉽지 않고 특정 명령 내에서만 작업을 수행하고 싶기 때문에 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[@]}"
}

관련 정보