ffmpeg再帰スクリーンショットファイル

ffmpeg再帰スクリーンショットファイル
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

次のようにglobに置き換えることができますfind

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

関連情報