我已经找到了一些在类似情况下执行此操作的示例,但这是我编写的唯一一个shell脚本,除了逐字运行命令之外还执行任何操作,所以我很难将这些示例应用于我自己的情况并需要一些手 - 持有<3
我只是想从MP4批量翻录音频.这个脚本有效:
for f in *.mp4;
ffmpeg -i "$f" -f mp3 -ab 192000 -vn "mp3s/$f.mp3"
done
Run Code Online (Sandbox Code Playgroud)
但文件都以.mp4.mp3结尾.如何摆脱mp4部分?
mik*_*yra 11
如果你正在使用bash
${f%%.mp4}
Run Code Online (Sandbox Code Playgroud)
将给出没有.mp4扩展名的文件名.
尝试使用它像这样:
for f in *.mp4; do
ffmpeg -i "$f" -f mp3 -ab 192000 -vn "mp3s/${f%%.mp4}.mp3"
done
Run Code Online (Sandbox Code Playgroud)
...并且不要忘记do给定示例中的关键字.
bash手册(man bash)说明:
$ {parameter%word} $ {parameter %% word}
删除匹配的后缀模式.这个词被扩展为产生一个模式,就像路径名扩展一样.如果模式匹配参数的扩展值的尾部,则扩展的结果是参数的扩展值,其中
%'' case) or the longest matching pattern (the删除了最短匹配模式(%%''case).如果参数是@或*,则模式删除操作依次应用于每个位置参数,并且扩展是结果列表.如果参数是使用@或*下标的数组变量,则模式删除操作依次应用于数组的每个成员,并且扩展是结果列表.
这只是您可以对shell变量执行的许多字符串操作之一.它们都以参数扩展名称命名.
这也是bash手册中给出的章节标签.因此man bash /paramter exp应该快速带你到那儿.`