首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在某些情况下,如何创建重写所有参数的包装器?

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

Unix & Linux用户
提问于 2021-12-08 07:28:46
回答 1查看 104关注 0票数 0

我想为FFMPEG做一个包装器,因为更改我的应用程序并不容易,也因为我只想在特定的命令中操作。

默认情况下,我希望转发所有命令,但总是将-loglevel warning更改为error

如果包装器接收到字符串"id=2015“或"id=2016”或"id=2017“的命令,则只希望将参数转发给ffmpeg。

我该怎么做?

示例:

代码语言:javascript
复制
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:

代码语言:javascript
复制
ffmpeg $mycommands

如果原始命令包含id=2015|2014|etc,则不会传递原始命令中的任何内容。

EN

回答 1

Unix & Linux用户

发布于 2021-12-08 08:18:22

我不认为简单的替换是一个好主意,也许您的文件将warning作为其名称的一部分?

-loglevel发现时,我宁愿循环参数并替换它:

代码语言:javascript
复制
ffmpeg(){
  args=()
  while (( $# )); do
    args=("${args[@]}" "$1")
    if [ "$1" = "-loglevel" ]; then
      args=("${args[@]}" "error")
      shift
    fi
    shift
  done
  /usr/bin/ffmpeg "${args[@]}"
}
票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/680613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档