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