if [ -d "$1" ]; then
echo If files are media, screenshots will be made to ~/Screenshots
for media in $(find "${1%/}/"* -name '*.mkv' -or -name '*.mp4'); do ffmpeg -hide_banner -loglevel panic -ss 00:08:0.0 -i "$media" -vframes 1 ~/Screenshots/$(basename "$media").screenshot1.png; done
for media in $(find "${1%/}/"* -name '*.mkv' -or -name '*.mp4'); do ffmpeg -hide_banner -loglevel panic -ss 00:12:0.0 -i "$media" -vframes 1 ~/Screenshots/$(basename "$media").screenshot2.png; done
for media in $(find "${1%/}/"* -name '*.mkv' -or -name '*.mp4'); do ffmpeg -hide_banner -loglevel panic -ss 00:20:0.0 -i "$media" -vframes 1 ~/Screenshots/$(basename "$media").screenshot3.png; done
fi
我正在尝试将所有 mkv/mp4 文件的 3 个屏幕截图保存到 ~/Screenshots。但我一直失败,找不到问题的根源?似乎只有当文件名中有空格时才会失败,但我引用了所有内容。
答案1
问题来自于您迭代 的结果find
。看这里了解更多信息。为了证明这一点,只需从媒体文件夹中执行以下操作,看看文件名是如何被破坏的:
for media in $(find -name '*.mkv' -or -name '*.mp4'); do echo "$media"; done
您可以将 your 替换find
为 glob,如下所示:
for media in "$1"/*.mp4; do stuff; done
for media in "$1"/*.mkv; do stuff; done
或者使用大括号扩展使其更简单:
for media in "$1"/*.{mp4,mkv}; do stuff; done