所以,我正在使用我制作的脚本将视频转换为 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.