adding video to mp3 converter script
This commit is contained in:
parent
7ba49face9
commit
a45d4a27e6
105
vid-mp3
Executable file
105
vid-mp3
Executable file
|
@ -0,0 +1,105 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Check if input directory is provided
|
||||
if [ -z "$1" ]; then
|
||||
echo "Usage: $0 /path/to/directory"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Define input directory and output folder
|
||||
input_dir="$1"
|
||||
output_dir="$input_dir/output"
|
||||
|
||||
# Create the output folder if it doesn't exist
|
||||
mkdir -p "$output_dir"
|
||||
|
||||
# Log file for errors and detailed output
|
||||
log_file="$input_dir/conversion_log.txt"
|
||||
error_log="$input_dir/conversion_errors.log"
|
||||
missing_file_log="$input_dir/missing_files.log"
|
||||
|
||||
# Clear old logs
|
||||
> "$log_file"
|
||||
> "$error_log"
|
||||
> "$missing_file_log"
|
||||
|
||||
# Create a list of expected filenames (based on video files)
|
||||
expected_files=()
|
||||
|
||||
# Loop over each subdirectory in the input directory
|
||||
for subdir in "$input_dir"/*/; do
|
||||
# Skip if it's not a directory
|
||||
if [ ! -d "$subdir" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
echo "Processing directory: $subdir" | tee -a "$log_file"
|
||||
|
||||
# Change to the subdirectory
|
||||
cd "$subdir" || continue
|
||||
|
||||
# Loop over all video files in the subdirectory and convert them to mp3
|
||||
for video_file in *.mp4 *.mkv *.avi *.webm *.flv *.mov; do
|
||||
# Skip if no video files are found
|
||||
if [[ ! -e "$video_file" ]]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
# Extract filename without extension and add to expected list
|
||||
filename=$(basename "$video_file")
|
||||
filename_noext="${filename%.*}"
|
||||
expected_files+=("$filename_noext.mp3")
|
||||
|
||||
# Set output mp3 path
|
||||
output_mp3="$output_dir/$filename_noext.mp3"
|
||||
|
||||
# Convert video to mp3
|
||||
echo "Converting: $video_file to $output_mp3" | tee -a "$log_file"
|
||||
|
||||
# Run ffmpeg and capture output and error
|
||||
ffmpeg -y -i "$video_file" "$output_mp3" >> "$log_file" 2>> "$error_log"
|
||||
|
||||
# Check if conversion was successful
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "Successfully converted: $video_file to $output_mp3" | tee -a "$log_file"
|
||||
else
|
||||
echo "Error converting: $video_file" | tee -a "$error_log"
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
# Create a list of actual output filenames
|
||||
actual_files=()
|
||||
for mp3_file in "$output_dir"/*.mp3; do
|
||||
if [ -e "$mp3_file" ]; then
|
||||
actual_files+=("$(basename "$mp3_file")")
|
||||
fi
|
||||
done
|
||||
|
||||
# Compare the expected and actual files
|
||||
missing_files=()
|
||||
|
||||
for expected in "${expected_files[@]}"; do
|
||||
if [[ ! " ${actual_files[@]} " =~ " $expected " ]]; then
|
||||
missing_files+=("$expected")
|
||||
fi
|
||||
done
|
||||
|
||||
# Output the results of the conversion and missing files check
|
||||
echo "Conversion completed. Check $log_file for detailed output and $error_log for errors."
|
||||
|
||||
if [ ${#missing_files[@]} -eq 0 ]; then
|
||||
echo "All files were converted successfully!"
|
||||
else
|
||||
echo "Missing files (not converted):" | tee -a "$missing_file_log"
|
||||
for missing in "${missing_files[@]}"; do
|
||||
echo "$missing" | tee -a "$missing_file_log"
|
||||
done
|
||||
fi
|
||||
|
||||
# Now, run the command to check missing files by comparing video and MP3 filenames
|
||||
find "$input_dir" -type f \( -iname "*.mp4" -o -iname "*.mkv" -o -iname "*.avi" -o -iname "*.webm" -o -iname "*.flv" -o -iname "*.mov" \) -exec basename {} \; | sed 's/\(.*\)\..*/\1/' | sort > video_list.txt
|
||||
find "$output_dir" -type f -iname "*.mp3" -exec basename {} \; | sed 's/\(.*\)\..*/\1/' | sort > mp3_list.txt
|
||||
diff video_list.txt mp3_list.txt | tee -a "$missing_file_log"
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user