我正在处理以日期命名的文件,例如“2020-02-24-16-13.h264”。我试图让 MP4Box 在 bash 脚本中处理所有这些文件,但我不知道如何正确命名输出文件。
本质上,我希望脚本自动获取 .h264 文件的名称并输出到相同的名称,即 .mp4
我用来手动执行此操作的命令是:
MP4Box -add /mnt/usb/Convert/2020-02-24-16-13.h264 /mnt/usb/Converted/2020-02-24-16-13.mp4
我无法在我的情况下切换到ffmpeg
作为解决方法。
我非常希望这是一个简单的命令调整,但任何输入都非常感谢!
答案1
像这样的东西。
for f in /mnt/usb/Convert/2020-02-24-16-13.h264; do
echo MP4Box -add "$f" "${f%.*}.mp4"
done
输出
MP4Box -add /mnt/usb/Convert/2020-02-24-16-13.h264 /mnt/usb/Convert/2020-02-24-16-13.mp4
如果您有很多以以下结尾的文件*.h264
for f in /mnt/usb/Convert/*.h264; do
echo MP4Box -add "$f" "${f%.*}.mp4"
done
如果你在里面/mnt/usb/Convert
用这个。
for f in *.h264; do
echo MP4Box -add "$f" "${f%.*}.mp4"
done
将转换后的文件输出到 Converted 目录,这是OP的原始问题(抱歉没有注意到这一点。)
for f in /mnt/usb/Convert/2020-02-24-16-13.h264; do
n=${f/Convert/Converted}
echo MP4Box -add "$f" "${n%.*}.mp4"
done
输出。
MP4Box -add /mnt/usb/Convert/2020-02-24-16-13.h264 /mnt/usb/Converted/2020-02-24-16-13.mp4
批量处理所有文件。
for f in /mnt/usb/Convert/*.h264; do
n=${f/Convert/Converted}
echo MP4Box -add "$f" "${n%.*}.mp4"
done
${string/search/replace}
bash 特定 PE的替代方案
for f in /mnt/usb/Convert/*.h264; do
n=${f##*Convert}
m=${f%Convert*}
echo MP4Box -add "$f" "${m}Converted${n%.*}.mp4";
done
上面(最后一个例子)不限于 bash 语法,但应该在任何兼容 POSIX 的 shell 中工作。
echo
如果您对输出满意,请删除。参见参数扩展
PAGER='less +/^[[:space:]]*parameter\ expansion' man bash