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