86 lines
2.5 KiB
Bash
86 lines
2.5 KiB
Bash
#!/bin/bash
|
|
|
|
# Configuration
|
|
QUEUE_DIR="/var/www/download/queue"
|
|
READY_DIR="/var/www/download/ready"
|
|
SETTINGS_FILE="/path/to/settings/settings.json"
|
|
LOG_FILE="/var/log/convert.log"
|
|
|
|
# Create directories if they don't exist
|
|
mkdir -p "$QUEUE_DIR"
|
|
mkdir -p "$READY_DIR"
|
|
|
|
# Load settings from JSON file
|
|
load_settings() {
|
|
VIDEO_FORMAT=$(jq -r '.video_format' "$SETTINGS_FILE")
|
|
AUDIO_FORMAT=$(jq -r '.audio_format' "$SETTINGS_FILE")
|
|
VIDEO_BITRATE=$(jq -r '.video_bitrate' "$SETTINGS_FILE")
|
|
AUDIO_BITRATE=$(jq -r '.audio_bitrate' "$SETTINGS_FILE")
|
|
RESOLUTION=$(jq -r '.resolution' "$SETTINGS_FILE")
|
|
FRAME_RATE=$(jq -r '.frame_rate' "$SETTINGS_FILE")
|
|
GOP=$(jq -r '.gop' "$SETTINGS_FILE")
|
|
}
|
|
|
|
# Function to sanitize filename
|
|
sanitize_filename() {
|
|
local filename="$1"
|
|
# Remove special characters, keep only a-z, A-Z, 0-9, and .
|
|
local sanitized=$(echo "$filename" | sed 's/[^a-zA-Z0-9.]*//g')
|
|
|
|
# If filename starts with number, add prefix
|
|
if [[ "$sanitized" =~ ^[0-9] ]]; then
|
|
sanitized="dev_${sanitized}"
|
|
fi
|
|
|
|
# If filename is empty after sanitization, use timestamp
|
|
if [[ -z "$sanitized" ]]; then
|
|
sanitized="dev_$(date +%s)"
|
|
fi
|
|
|
|
echo "$sanitized"
|
|
}
|
|
|
|
# Main processing loop
|
|
while true; do
|
|
# Load settings at start of each loop
|
|
load_settings
|
|
|
|
# Find all files in queue directory
|
|
for file in "$QUEUE_DIR"/*; do
|
|
# Skip if no files found
|
|
[ -f "$file" ] || continue
|
|
|
|
# Get original filename
|
|
original_name=$(basename "$file")
|
|
|
|
# Sanitize filename
|
|
sanitized_name=$(sanitize_filename "$original_name")
|
|
|
|
# Add .ts extension
|
|
sanitized_name="${sanitized_name}.ts"
|
|
|
|
# Set output path
|
|
output_file="$READY_DIR/$sanitized_name"
|
|
|
|
# Convert file with ffmpeg using settings from JSON
|
|
if ffmpeg -i "$file" \
|
|
-c:v "$VIDEO_FORMAT" \
|
|
-b:v "$VIDEO_BITRATE" \
|
|
-c:a "$AUDIO_FORMAT" \
|
|
-b:a "$AUDIO_BITRATE" \
|
|
-s "$RESOLUTION" \
|
|
-r "$FRAME_RATE" \
|
|
-g "$GOP" \
|
|
"$output_file" 2>>"$LOG_FILE"; then
|
|
# If conversion successful, remove original file
|
|
rm "$file"
|
|
echo "$(date): Successfully converted $original_name to $sanitized_name" >> "$LOG_FILE"
|
|
else
|
|
# If conversion failed, log error
|
|
echo "$(date): Failed to convert $original_name" >> "$LOG_FILE"
|
|
fi
|
|
done
|
|
|
|
# Wait before checking for new files
|
|
sleep 5
|
|
done |