使用 FFMPEG 将 MKV 转换为 MP4

pla*_*l01 1 xubuntu bash scripts ffmpeg

我正在使用以下行进行转换

for f in *.mkv; do ffmpeg -i "$f" -c:v copy -c:a aac -b:a 256k "${f%%mkv}mp4";&& rm "{$f}.mkv"; done
Run Code Online (Sandbox Code Playgroud)

我还需要这个来检查子目录,但我不断收到令牌错误或 bash 错误

完成转换后它也不会删除 mkv 文件

一旦我的线路正常工作,我将如何更进一步并使其自动运行(例如每天一次)以转换任何新添加的 mkv 文件。

mur*_*uru 7

ffmpeg -i "$f" -c:v copy -c:a aac -b:a 256k "${f%%mkv}mp4";&& rm "{$f}.mkv";是一个语法错误 - 你不能&&在 a 之后有一个;。应该只是这样ffmpeg -i "$f" -c:v copy -c:a aac -b:a 256k "${f%%mkv}mp4" && rm "{$f}.mkv";。然后,你$f已经以 结尾.mkv,所以rm命令应该只是rm "$f"

要递归到子目录,请使用globstar

shopt -s  globstar
for f in **/*.mkv; do ... done
Run Code Online (Sandbox Code Playgroud)

总而言之:

#! /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
Run Code Online (Sandbox Code Playgroud)

要按计划运行它,请参阅每天使用 cronjob 运行脚本如何正确安装 systemd 计时器和服务?