Update File Converter
This commit is contained in:
parent
b2eaa009d4
commit
e7707f0461
1 changed files with 35 additions and 9 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue