我正在使用以下行来转换
for f in *.mkv; do ffmpeg -i "$f" -c:v copy -c:a aac -b:a 256k "${f%%mkv}mp4";&& rm "{$f}.mkv"; done
我还需要这个来检查子目录但是我一直收到令牌错误或 bash 错误
转换完成后也不会删除 mkv 文件
一旦我的线路正常工作,我将如何更进一步,使其每天自动运行一次来转换任何新添加的 mkv 文件。
答案1
ffmpeg -i "$f" -c:v copy -c:a aac -b:a 256k "${f%%mkv}mp4";&& rm "{$f}.mkv";
是语法错误 - 你不能&&
在 后面有;
。它应该是ffmpeg -i "$f" -c:v copy -c:a aac -b:a 256k "${f%%mkv}mp4" && rm "{$f}.mkv";
。然后,你的$f
already 以 结尾.mkv
,所以rm
命令应该只是rm "$f"
。
要递归到子目录,请使用globstar
:
shopt -s globstar
for f in **/*.mkv; do ... done
总而言之:
#! /bin/bash
shopt -s globstar
for f in **/*.mkv
do
ffmpeg -i "$f" -c:v copy -c:a aac -b:a 256k "${f%%mkv}mp4" &&
rm "$f"
done
要按计划运行,请参阅使用 cronjob 每天运行脚本或者如何正确安装 systemd 计时器和服务?。