首页 > 解决方案 > bash for 循环中的ffmpeg:寻找匹配的'}'时出现意外的EOF

问题描述

我有一个基本命令 ( ffmpeg -i input_file out.srt) 可以将.mkv视频文件转换为.srt字幕文件。问题是我必须为每个.mkv文件手动运行命令。所以我尝试在 Bash 中实现一个 for 循环,但我不断收到错误。

 #!/bin/bash
 # ffmpeg -i input_file out.srt


 for i in *.mkv ; do
      ffmpeg -i "$i" "$(basename "${i/.mkv)")".str
      sleep 30
 done

我得到的两个错误是:

./subcon.sh: line 6: unexpected EOF while looking for matching `}'
./subcon.sh: line 9: syntax error: unexpected end of file

我不熟悉 Bash 以了解发生了什么。有谁知道我可以在哪里查找资料或如何解决这个特定问题?

标签: bashfor-loopffmpeg

解决方案


问题:

  • 不匹配的括号。更改{(
  • 字幕扩展名不正确。更改strsrt
  • basename语法不正确。更改"$(basename "${i/.mkv)")".str"$(basename "$i" .mkv)".srt。或者使用 Bash 参数扩展而不是basename.

新脚本:

#!/bin/bash
# ffmpeg -i input_file out.srt

for i in *.mkv ; do
     ffmpeg -i "$i" "$(basename "$i" .mkv)".srt
     sleep 30
done

您可以消除basename

#!/bin/bash
# ffmpeg -i input_file out.srt

for i in *.mkv ; do
     ffmpeg -i "$i" "${i%.*}.srt"
     sleep 30
done

我推荐shellcheck.net来检查你的 Bash 脚本。


推荐阅读