From 97966fea5d04e1c2bf229ba32e963a27e88b13b6 Mon Sep 17 00:00:00 2001 From: nicole Date: Tue, 29 Jul 2025 19:46:05 +0000 Subject: [PATCH] Upload files to "/" --- File Converter | 146 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 File Converter diff --git a/File Converter b/File Converter new file mode 100644 index 0000000..ae8812e --- /dev/null +++ b/File Converter @@ -0,0 +1,146 @@ +#!/usr/bin/env bash + +FILES=$(echo -e "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS") + +if [ -z "$FILES" ]; then + zenity --error --text="No files selected." + exit 1 +fi + +first_file=$(echo "$FILES" | head -n1) +EXT="${first_file##*.}" +EXT_LOWER=$(echo "$EXT" | tr '[:upper:]' '[:lower:]') + +case "$EXT_LOWER" in + jpg|jpeg|png|webp) + MIME_CATEGORY="image" + ;; + pdf) + MIME_CATEGORY="pdf" + ;; + mp3|ogg|wav|flac) + MIME_CATEGORY="audio" + ;; + mp4|webm|avi|mkv) + MIME_CATEGORY="video" + ;; + *) + zenity --error --text="Unsupported file extension :(" + exit 1 + ;; +esac + +case "$MIME_CATEGORY" in + image) + OPTIONS="JPEG\tjpg\nPNG\tpng\nWEBP\twebp\nPDF\tpdf" + ;; + pdf) + OPTIONS="PDF\tpdf" + ;; + audio) + OPTIONS="MP3\tmp3\nOGG\togg\nWAV\twav\nFLAC\tflac" + ;; + video) + OPTIONS="MP4\tmp4\nWEBM\twebm\nAVI\tavi\nMKV\tmkv\nMP3\tmp3\nOGG\togg\nWAV\twav\nFLAC\tflac" + ;; +esac + +OUTPUT_EXT=$(zenity --list \ + --title="Convert $MIME_CATEGORY files" \ + --print-column=2 \ + --column="Format" --column="Extension" \ + $(echo -e "$OPTIONS")) + +if [ -z "$OUTPUT_EXT" ]; then exit 0; fi + +QUALITY="" +case "$OUTPUT_EXT" in + jpg|jpeg) + QUALITY=$(zenity --scale --title="Select JPEG quality (1-100)" --min-value=1 --max-value=100 --value=85) + ;; + mp3|ogg|wav) + QUALITY=$(zenity --scale --title="Select audio bitrate (kbps)" --min-value=64 --max-value=320 --value=192 --step=16) + ;; + mp4|webm|avi|mkv) + QUALITY=$(zenity --scale --title="Select video bitrate (kbps)" --min-value=500 --max-value=5000 --value=2000 --step=100) + ;; +esac + +total=$(echo "$FILES" | wc -l) +count=0 + +( +IFS=$'\n' +for FILE in $FILES; do + count=$((count + 1)) + echo $(( count * 100 / total )) # update progress bar + echo "Converting: $(basename "$FILE")" + + DIR=$(dirname "$FILE") + BASENAME=$(basename "$FILE") + NAME="${BASENAME%.*}" + OUTPUT_PATH="$DIR/$NAME.$OUTPUT_EXT" + + EXT="${FILE##*.}" + EXT_LOWER=$(echo "$EXT" | tr '[:upper:]' '[:lower:]') + case "$EXT_LOWER" in + jpg|jpeg|png|webp) + FILE_CATEGORY="image" + ;; + pdf) + FILE_CATEGORY="pdf" + ;; + mp3|ogg|wav) + FILE_CATEGORY="audio" + ;; + mp4|webm|avi|mkv) + FILE_CATEGORY="video" + ;; + *) + FILE_CATEGORY="unknown" + ;; + esac + + if [ "$FILE_CATEGORY" = "unknown" ]; then + echo "Skipping unsupported file: $FILE" >&2 + continue + fi + + # Run commands with error output visible (not silent) + case "$FILE_CATEGORY" in + image|pdf) + if [ -n "$QUALITY" ] && [[ "$OUTPUT_EXT" == jpg || "$OUTPUT_EXT" == jpeg ]]; then + convert "$FILE" -quality "$QUALITY" "$OUTPUT_PATH" || echo "Failed to convert $FILE" >&2 + else + convert "$FILE" "$OUTPUT_PATH" || echo "Failed to convert $FILE" >&2 + fi + ;; + audio) + if [ -n "$QUALITY" ]; then + ffmpeg -loglevel error -y -i "$FILE" -b:a "${QUALITY}k" "$OUTPUT_PATH" || echo "Failed to convert $FILE" >&2 + else + ffmpeg -loglevel error -y -i "$FILE" "$OUTPUT_PATH" || echo "Failed to convert $FILE" >&2 + fi + ;; + video) + case "$OUTPUT_EXT" in + mp3|ogg|wav) + if [ -n "$QUALITY" ]; then + ffmpeg -loglevel error -y -i "$FILE" -vn -b:a "${QUALITY}k" "$OUTPUT_PATH" || echo "Failed to convert $FILE" >&2 + else + ffmpeg -loglevel error -y -i "$FILE" -vn "$OUTPUT_PATH" || echo "Failed to convert $FILE" >&2 + fi + ;; + *) + if [ -n "$QUALITY" ]; then + ffmpeg -loglevel error -y -i "$FILE" -b:v "${QUALITY}k" "$OUTPUT_PATH" || echo "Failed to convert $FILE" >&2 + else + ffmpeg -loglevel error -y -i "$FILE" "$OUTPUT_PATH" || echo "Failed to convert $FILE" >&2 + fi + ;; + esac + ;; + esac + +done +) | zenity --progress --title="Batch converting files..." --percentage=0 --auto-close --width=400