저는 영화 폴더 내의 모든 폴더를 읽고 파일의 각 비디오에 대한 정보를 출력하는 스크립트를 작성 중입니다.
내가 현재 가지고 있는 것은 다음과 같습니다.
movies=0
rm movielist
for dir in Movies/*
do
(cd "$dir" && pwd|cut -d \/ -f5|tr -s '\n' ', ' >> ../../movielist &&
>> ../../movielist )
echo "Movie $movies - $dir ADDED!"
let movies=movies+1
done
rm moviefinal
cat movielist | while read MovieName;
do
echo "$MovieName" | cut -d ',' -f2 | cut -d 'x' -f2 | sort | uniq | while read MovieRes;
do
case $MovieRes in
[461-660]*)
echo "$MovieName,480p" >> moviefinal
;;
[661-890]*)
echo "$MovieName,720p" >> moviefinal
;;
[891-1200]*)
echo "$MovieName,1080p" >> moviefinal
;;
*)
echo "$MovieName,DVD" >> moviefinal
;;
esac
done
done
읽혀지는 것은영화각 영화에 대한 폴더(예: Movies/The Matrix/Matrix.mkv)를 만들어 Movies 폴더 내의 movieex라는 파일로 보냅니다. 파일에 포함된 정보는 다음과 같습니다.
The Matrix, 1920x1080, MKV
The Matrix 2, 1280x720, AVI
....
지금 추가할 것은 높이와 너비(예: Exiftool을 사용한 SourceImageHeight 및 SourceImageWidth)를 읽고 높이가 X이고 너비가 Z인 경우 출력 파일에 다른 변수를 추가하는 CASE 또는 IF를 수행하는 방법입니다. 품질( 예: 720p, 1080p, DVD...). 위의 내용은 다음과 같습니다.
The Matrix, 1920x1080, MKV, 1080p
The Matrix 2, 1280x720, AVI, 720p
업데이트 - 스크립트는 이제 품질(720p, 1080p)을 표시하지만 CASE 부분이 잘못되었습니다. 예를 들어, 때때로 720개의 비디오를 가져와서 DVD 품질을 제공하지만 실제로는 스크립트에서 720개를 명시적으로 언급했습니다.
답변1
미래에도 같은 일을 하고 싶은 사람이 있다면 최종 스크립트는 다음과 같습니다.
movies=0
rm movielist
for dir in Movies/*
do
(cd "$dir" && pwd|cut -d \/ -f5|tr -s '\n' ', ' >> ../../movielist &&
exiftool * -t -s3 -ImageSize -FileType|tr -s '\t' ',' >> ../../movielist )
echo "Movie $movies - $dir ADDED!"
let movies=movies+1
done
rm moviefinal
cat movielist | while read MovieName;
do
echo "$MovieName" | cut -d ',' -f2 | cut -d 'x' -f2 | sort | uniq | while read MovieRes;
do
if (($MovieRes>=461 && $MovieRes<=660))
then
echo "$MovieName,480p"
elif (($MovieRes>=661 && $MovieRes<=890))
then
echo "$MovieName,720p"
elif (($MovieRes>=891 && $MovieRes<=1200))
then
echo "$MovieName,1080p"
else
echo "$MovieName,DVD"
fi >> moviefinal
done
done