Update File Converter

This commit is contained in:
nicole 2025-08-20 20:31:01 +00:00
parent b2eaa009d4
commit e7707f0461

View file

@ -1,5 +1,8 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# IMPORTANT: Ensure xournalpp is installed and in your PATH for .xopp conversions.
# For example, on Debian/Ubuntu: sudo apt install xournalpp
FILES=$(echo -e "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS") FILES=$(echo -e "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS")
if [ -z "$FILES" ]; then if [ -z "$FILES" ]; then
@ -11,6 +14,8 @@ first_file=$(echo "$FILES" | head -n1)
EXT="${first_file##*.}" EXT="${first_file##*.}"
EXT_LOWER=$(echo "$EXT" | tr '[:upper:]' '[:lower:]') EXT_LOWER=$(echo "$EXT" | tr '[:upper:]' '[:lower:]')
# Determine the primary category of the selected files based on the first file
MIME_CATEGORY=""
case "$EXT_LOWER" in case "$EXT_LOWER" in
jpg|jpeg|png|webp) jpg|jpeg|png|webp)
MIME_CATEGORY="image" MIME_CATEGORY="image"
@ -18,6 +23,9 @@ case "$EXT_LOWER" in
pdf) pdf)
MIME_CATEGORY="pdf" MIME_CATEGORY="pdf"
;; ;;
xopp) # NEW: Xournal++ file category
MIME_CATEGORY="xopp"
;;
mp3|ogg|wav|flac) mp3|ogg|wav|flac)
MIME_CATEGORY="audio" MIME_CATEGORY="audio"
;; ;;
@ -25,16 +33,21 @@ case "$EXT_LOWER" in
MIME_CATEGORY="video" MIME_CATEGORY="video"
;; ;;
*) *)
zenity --error --text="Unsupported file extension :(" zenity --error --text="Unsupported file extension for the first selected file: .$EXT"
exit 1 exit 1
;; ;;
esac esac
# Define conversion options based on the determined MIME_CATEGORY
OPTIONS=""
case "$MIME_CATEGORY" in case "$MIME_CATEGORY" in
image) image)
OPTIONS="JPEG\tjpg\nPNG\tpng\nWEBP\twebp\nPDF\tpdf" OPTIONS="JPEG\tjpg\nPNG\tpng\nWEBP\twebp\nPDF\tpdf"
;; ;;
pdf) pdf)
OPTIONS="PDF\tpdf" # PDF files can only be output as PDF in this script's current logic
;;
xopp) # NEW: Options for Xournal++ files
OPTIONS="PDF\tpdf" OPTIONS="PDF\tpdf"
;; ;;
audio) audio)
@ -45,13 +58,14 @@ case "$MIME_CATEGORY" in
;; ;;
esac esac
# Prompt user for output format
OUTPUT_EXT=$(zenity --list \ OUTPUT_EXT=$(zenity --list \
--title="Convert $MIME_CATEGORY files" \ --title="Convert $MIME_CATEGORY files" \
--print-column=2 \ --print-column=2 \
--column="Format" --column="Extension" \ --column="Format" --column="Extension" \
$(echo -e "$OPTIONS")) $(echo -e "$OPTIONS"))
if [ -z "$OUTPUT_EXT" ]; then exit 0; fi if [ -z "$OUTPUT_EXT" ]; then exit 0; fi # User cancelled
QUALITY="" QUALITY=""
case "$OUTPUT_EXT" in case "$OUTPUT_EXT" in
@ -64,6 +78,7 @@ case "$OUTPUT_EXT" in
mp4|webm|avi|mkv) mp4|webm|avi|mkv)
QUALITY=$(zenity --scale --title="Select video bitrate (kbps)" --min-value=500 --max-value=5000 --value=2000 --step=100) QUALITY=$(zenity --scale --title="Select video bitrate (kbps)" --min-value=500 --max-value=5000 --value=2000 --step=100)
;; ;;
# No quality prompt for PDF or XOPP
esac esac
total=$(echo "$FILES" | wc -l) total=$(echo "$FILES" | wc -l)
@ -83,6 +98,9 @@ for FILE in $FILES; do
EXT="${FILE##*.}" EXT="${FILE##*.}"
EXT_LOWER=$(echo "$EXT" | tr '[:upper:]' '[:lower:]') EXT_LOWER=$(echo "$EXT" | tr '[:upper:]' '[:lower:]')
# Determine the category of the CURRENT file in the loop
FILE_CATEGORY="unknown"
case "$EXT_LOWER" in case "$EXT_LOWER" in
jpg|jpeg|png|webp) jpg|jpeg|png|webp)
FILE_CATEGORY="image" FILE_CATEGORY="image"
@ -90,15 +108,15 @@ for FILE in $FILES; do
pdf) pdf)
FILE_CATEGORY="pdf" FILE_CATEGORY="pdf"
;; ;;
mp3|ogg|wav) xopp) # NEW: Detect xopp for individual file processing
FILE_CATEGORY="xopp"
;;
mp3|ogg|wav|flac) # Note: 'flac' input is audio but output options might be limited
FILE_CATEGORY="audio" FILE_CATEGORY="audio"
;; ;;
mp4|webm|avi|mkv) mp4|webm|avi|mkv)
FILE_CATEGORY="video" FILE_CATEGORY="video"
;; ;;
*)
FILE_CATEGORY="unknown"
;;
esac esac
if [ "$FILE_CATEGORY" = "unknown" ]; then if [ "$FILE_CATEGORY" = "unknown" ]; then
@ -108,13 +126,21 @@ for FILE in $FILES; do
# Run commands with error output visible (not silent) # Run commands with error output visible (not silent)
case "$FILE_CATEGORY" in case "$FILE_CATEGORY" in
image|pdf) image|pdf) # ImageMagick's convert can handle images and PDF inputs
if [ -n "$QUALITY" ] && [[ "$OUTPUT_EXT" == jpg || "$OUTPUT_EXT" == jpeg ]]; then if [ -n "$QUALITY" ] && [[ "$OUTPUT_EXT" == jpg || "$OUTPUT_EXT" == jpeg ]]; then
convert "$FILE" -quality "$QUALITY" "$OUTPUT_PATH" || echo "Failed to convert $FILE" >&2 convert "$FILE" -quality "$QUALITY" "$OUTPUT_PATH" || echo "Failed to convert $FILE" >&2
else else
convert "$FILE" "$OUTPUT_PATH" || echo "Failed to convert $FILE" >&2 convert "$FILE" "$OUTPUT_PATH" || echo "Failed to convert $FILE" >&2
fi fi
;; ;;
xopp) # NEW: Handle Xournal++ to PDF conversion
if [ "$OUTPUT_EXT" = "pdf" ]; then
# xournalpp <output_pdf> <input_xopp>
xournalpp -p "$OUTPUT_PATH" "$FILE" || echo "Failed to convert $FILE" >&2
else
echo "Skipping $FILE: XOPP files can only be converted to PDF." >&2
fi
;;
audio) audio)
if [ -n "$QUALITY" ]; then if [ -n "$QUALITY" ]; then
ffmpeg -loglevel error -y -i "$FILE" -b:a "${QUALITY}k" "$OUTPUT_PATH" || echo "Failed to convert $FILE" >&2 ffmpeg -loglevel error -y -i "$FILE" -b:a "${QUALITY}k" "$OUTPUT_PATH" || echo "Failed to convert $FILE" >&2
@ -124,14 +150,14 @@ for FILE in $FILES; do
;; ;;
video) video)
case "$OUTPUT_EXT" in case "$OUTPUT_EXT" in
mp3|ogg|wav) mp3|ogg|wav|flac) # Convert video to audio
if [ -n "$QUALITY" ]; then if [ -n "$QUALITY" ]; then
ffmpeg -loglevel error -y -i "$FILE" -vn -b:a "${QUALITY}k" "$OUTPUT_PATH" || echo "Failed to convert $FILE" >&2 ffmpeg -loglevel error -y -i "$FILE" -vn -b:a "${QUALITY}k" "$OUTPUT_PATH" || echo "Failed to convert $FILE" >&2
else else
ffmpeg -loglevel error -y -i "$FILE" -vn "$OUTPUT_PATH" || echo "Failed to convert $FILE" >&2 ffmpeg -loglevel error -y -i "$FILE" -vn "$OUTPUT_PATH" || echo "Failed to convert $FILE" >&2
fi fi
;; ;;
*) *) # Convert video to another video format
if [ -n "$QUALITY" ]; then if [ -n "$QUALITY" ]; then
ffmpeg -loglevel error -y -i "$FILE" -b:v "${QUALITY}k" "$OUTPUT_PATH" || echo "Failed to convert $FILE" >&2 ffmpeg -loglevel error -y -i "$FILE" -b:v "${QUALITY}k" "$OUTPUT_PATH" || echo "Failed to convert $FILE" >&2
else else