Convert to WebP files for Raycast Script

최근 이미지 파일을 WebP 포멧으로 변환할 일이 많아졌다. 아쉽게도 애플 환경은 HEIC 포멧을 밀고 있기 때문에 공식적으로 WebP 변환 방법은 없다.

가장 간단한 방식은 cwebp 커맨드를 활용하는 것이다. 커맨드 실행은 접근성이 낮으니 macOS 파인더에서 선택한 파일을 즉시 변환해주는 스크립트를 작성하고, 이를 Raycast 스크립트 실행에 연동하였다.

convert-to-webp-file.sh

#!/bin/bash
 
# Required parameters:
# @raycast.schemaVersion 1
# @raycast.title Convert to WebP file
# @raycast.mode fullOutput
 
# Optional parameters:
# @raycast.icon 🖼️
 
# Documentation:
# @raycast.author chorr
# @raycast.authorURL https://raycast.com/chorr
 
# Check if cwebp is installed
if ! command -v cwebp &> /dev/null; then
    echo "cwebp could not be found. Please install it using 'brew install webp'."
    exit 1
fi
 
# AppleScript to get the selected files in Finder
selected_files=$(osascript <<EOD
  tell application "Finder"
    set theSelection to selection
    if (count of theSelection) is 0 then
      return "no selection"
    else
      set selectedPaths to ""
      repeat with anItem in theSelection
        set selectedPaths to selectedPaths & POSIX path of (anItem as alias) & linefeed
      end repeat
      return selectedPaths
    end if
  end tell
EOD
)
 
# Check if no files were selected
if [ "$selected_files" = "no selection" ]; then
    echo "No files selected."
    exit 1
fi
 
# Convert the newline-separated list of selected files into an array
IFS=$'\n' read -r -d '' -a files_array <<< "$selected_files"
 
# Convert each selected image file to WebP
for input_file in "${files_array[@]}"; do
    # Trim any trailing whitespace or newlines
    input_file=$(echo "$input_file" | tr -d '[:space:]')
 
    # Check if the selected file exists and is a image file
    if [ ! -f "$input_file" ]; then
        echo "The selected file does not exist: $input_file"
        continue
    fi
 
    # Set the output file path by replacing the extension with .webp
    output_file="${input_file%.*}.webp"
 
    # Convert image to WebP
    cwebp "$input_file" -o "$output_file"
 
    if [ $? -eq 0 ]; then
        echo "Successfully converted $input_file to $output_file"
    else
        echo "Failed to convert $input_file"
    fi
done

이 스크립트 역시 친절한 ChatGPT 친구가 만들어줬다.

Prompts

bash를 활용한 Raycast Scripts 만들 수 있니?
오케이 좋아. jpg 이미지 파일을 webp 파일로 변환하고 싶어. Raycast Script 적합하게 스크립트 생성.
`@raycast.argument1` 대신 finder에서 선택된 파일을 사용할 수 있니?
execution error: Can’t make item 1 of selection of application "Finder" into type alias. (-1700) No file selected or the selected file does not exist.
--
이 결과를 반환하고 있어.
만약 `selected_file` 부분이 `selected_files`가 된다면?
IFS=$'\n' read -r -d '' -a files_array <<< "$selected_files"
--
해당 라인 코드에서 files_array 결과는 항상 1개여서 문제가 되고 있습니다.
AMAZING! it worked perfectly!