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