Files
scripts_serv/extraudio.sh
2025-12-19 22:56:37 +00:00

108 lines
2.9 KiB
Bash
Executable File

#!/bin/bash
# Ask where to place the MP3 files
read -p "Place MP3s in same folder as MP4s? (y/n) [y]: " same_folder
same_folder=${same_folder:-y}
if [[ "$same_folder" =~ ^[Nn]$ ]]; then
read -p "Enter output folder path: " output_folder
mkdir -p "$output_folder"
else
output_folder=""
fi
# Get default values from folder structure
# Current directory is "The Energies of Love"
default_album=$(basename "$PWD")
# Parent directory is "Donna Eden & David Feinstein"
default_album_artist=$(basename "$(dirname "$PWD")")
# Prompt for metadata with defaults
read -p "Enter Album Artist [$default_album_artist]: " album_artist
album_artist=${album_artist:-$default_album_artist}
read -p "Enter Release Date (YYYY): " release_date
echo ""
echo "Processing MP4 files..."
echo "Album Artist: $album_artist"
echo ""
counter=0
# Process all mp4 files in subdirectories
for file in */*.mp4 *.mp4; do
# Skip if file doesn't exist
[ -e "$file" ] || continue
dir=$(dirname "$file")
filename=$(basename "$file" .mp4)
# Determine album based on folder structure
if [ "$dir" != "." ]; then
# File is in subfolder (Intro, week1, week2, etc.)
album=$(basename "$dir")
else
# File is in current directory
album="$default_album"
fi
# Set output location
if [ -n "$output_folder" ]; then
# Create matching folder structure in output folder
if [ "$dir" != "." ]; then
mkdir -p "$output_folder/$dir"
output="$output_folder/$dir/${filename}.mp3"
else
output="$output_folder/${filename}.mp3"
fi
else
output="$dir/${filename}.mp3"
fi
# Skip if already exists
if [ -f "$output" ]; then
echo "Skip: $filename (exists)"
continue
fi
# Get track number
track_num=$(echo "$filename" | grep -oP '^\d+')
echo "Converting: $filename"
echo " Album: $album"
# Convert using temp file
temp_file="/tmp/convert_$$.mp3"
if [ -n "$track_num" ]; then
ffmpeg -i "$file" -vn -acodec libmp3lame -q:a 0 \
-metadata title="$filename" \
-metadata track="$track_num" \
-metadata album_artist="$album_artist" \
-metadata artist="$album_artist" \
-metadata album="$album" \
-metadata date="$release_date" \
"$temp_file" -y >/dev/null 2>&1
else
ffmpeg -i "$file" -vn -acodec libmp3lame -q:a 0 \
-metadata title="$filename" \
-metadata album_artist="$album_artist" \
-metadata artist="$album_artist" \
-metadata album="$album" \
-metadata date="$release_date" \
"$temp_file" -y >/dev/null 2>&1
fi
if [ -f "$temp_file" ]; then
mv "$temp_file" "$output"
echo " ✓ Done"
((counter++))
else
echo " ✗ Failed"
fi
done
echo ""
echo "Converted $counter files"