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