因此,我正在使用我编写的脚本将视频转换为 webm 格式。某个程序调用脚本,发送%f
视频的完整、绝对文件名,如下所示:
converter.sh %f
其中%f
有两个可能的扩展名,.avi
或者.mpg
.
# /bin/bash
ffmpeg -i $1 `dirname $1``basename $1 avi`webm && rm $1
目前,它在$1
包含.avi
文件时可以完美运行,因为basename
删除了.avi
扩展名。当以相反$1
结尾时.mpg
,结果是.mpgwebm
。
我如何修改该脚本才能接收这两种可能的不同格式?
恢复:如果$1
是/somedir/video.avi
,脚本应该执行以下操作:
ffmpeg -i /somedir/video.avi /somedir/video.webm
如果$1
是/somedir/video.mpg
,脚本应该这样做:
ffmpeg -i /somedir/video.mpg /somedir/video.webm
我知道这对某些人来说可能很愚蠢,但我对 bash 还很陌生。
答案1
您可以使用大多数 shell 提供的替换机制:
B=$(basename "$1"); D=$(dirname "$1");
ffmpeg -i "$1" "$D/${B%.*}.webm" && rm "$1"
事实上,basename
也dirname
可以通过替换来模仿。
注意:直接.*
删除后缀在this.dir/file
.