64 lines
2 KiB
Bash
Executable file
64 lines
2 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
# sf variables
|
|
sfdesc="Convert multiple media files from one format to another.\nSubdirectories are visited recursively."
|
|
sfargs+=("FROM_FORMAT;From format")
|
|
sfargs+=("TO_FORMAT;To format")
|
|
sfargs+=("directory;d;DIRECTORY;current work directory;Convert files in DIRECTORY")
|
|
sfargs+=("keep;k;Keep original files")
|
|
sfargs+=("list;l;List files which match the FROM_FORMAT")
|
|
sfargs+=("move;m;DIRECTORY;;Move old files to DIRECTORY (omits --keep)")
|
|
sfexamples+=("ffconv mp3 opus;Convert all mp3 files to opus")
|
|
sfexamples+=("ffconv -m trash mp4 mkv;Convert all mp4 to mkv and move the original ones to './trash'")
|
|
sfexamples+=("ffconv -d ~/music -l wma mp3;List all wma files from '~/music' and ask for converting them to mp3")
|
|
sfdeps=("ffmpeg")
|
|
|
|
source "$(dirname $0)/../lib/sf"
|
|
|
|
# Handle default directory
|
|
[ "$directory" == "current work directory" ] && directory="."
|
|
|
|
# Get files
|
|
mapfile -d $'\0' files < <(find "$directory" -name "*.$FROM_FORMAT" -print0)
|
|
|
|
# Check number of files
|
|
if [ "${#files[@]}" == 0 ]; then
|
|
echo "No files of format ${sftbf}$FROM_FORMAT${sftrs} found"
|
|
exit
|
|
fi
|
|
|
|
# Create move directory if set
|
|
if [ "$move" != "" ]; then
|
|
mkdir -p "$move"
|
|
fi
|
|
|
|
# List files
|
|
if [ "$list" == true ]; then
|
|
for file in "${files[@]}"; do
|
|
echo "$file"
|
|
done
|
|
echo
|
|
sfask "Do you want to convert the files to ${sftbf}$TO_FORMAT${sftrs}" "no"
|
|
[ "$sfin" == false ] && exit
|
|
fi
|
|
|
|
echo -e "Converting ${sftbf}${#files[@]}${sftrs} files from ${sftbf}$FROM_FORMAT${sftrs} to ${sftbf}$TO_FORMAT${sftrs}\n"
|
|
|
|
# Convert files
|
|
for i in "${!files[@]}"; do
|
|
|
|
file="${files[$i]}"
|
|
filename=$(basename "${file%.*}")
|
|
echo "${sftclr}Processing file ${sftbf}$((i+1))${sftrs}/${sftbf}${#files[@]}${sftrs}: ${sftbf}$filename${sftrs}"
|
|
ffmpeg -hide_banner -loglevel error -nostdin -i "$file" "${file%.*}.$TO_FORMAT"
|
|
|
|
if [ "$?" != 0 ]; then
|
|
echo
|
|
elif [ "$move" != "" ]; then
|
|
mv --backup=t "$file" "$move"
|
|
elif [ "$keep" == false ]; then
|
|
rm "$file"
|
|
fi
|
|
done
|
|
|
|
echo "done"
|