Update
This commit is contained in:
146
bash/webm_fps_analyse.sh
Executable file
146
bash/webm_fps_analyse.sh
Executable file
@@ -0,0 +1,146 @@
|
||||
#!/bin/bash
|
||||
|
||||
# WebM FPS Analyzer Script
|
||||
# Analyzes FPS of all WebM files in specified directory (or current directory)
|
||||
|
||||
# Usage function
|
||||
usage() {
|
||||
echo "Usage: $0 [directory_path]"
|
||||
echo " directory_path: Path to directory containing WebM files (optional, defaults to current directory)"
|
||||
echo ""
|
||||
echo "Examples:"
|
||||
echo " $0 # Analyze current directory"
|
||||
echo " $0 /path/to/webm/files # Analyze specific directory"
|
||||
echo " $0 ~/Videos # Analyze home Videos directory"
|
||||
}
|
||||
|
||||
# Check if ffprobe is available
|
||||
if ! command -v ffprobe &> /dev/null; then
|
||||
echo "Error: ffprobe is not installed or not in PATH"
|
||||
echo "Please install ffmpeg to use this script"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Handle command line arguments
|
||||
if [[ "$1" == "-h" ]] || [[ "$1" == "--help" ]]; then
|
||||
usage
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Set target directory
|
||||
if [[ -n "$1" ]]; then
|
||||
target_dir="$1"
|
||||
# Expand tilde if present
|
||||
target_dir="${target_dir/#\~/$HOME}"
|
||||
|
||||
# Check if directory exists
|
||||
if [[ ! -d "$target_dir" ]]; then
|
||||
echo "Error: Directory '$target_dir' does not exist"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if directory is readable
|
||||
if [[ ! -r "$target_dir" ]]; then
|
||||
echo "Error: Directory '$target_dir' is not readable"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
target_dir="."
|
||||
fi
|
||||
|
||||
# Initialize variables
|
||||
declare -a fps_values=()
|
||||
declare -a filenames=()
|
||||
total_fps=0
|
||||
count=0
|
||||
min_fps=""
|
||||
max_fps=""
|
||||
|
||||
echo "Analyzing WebM files in directory: $target_dir"
|
||||
echo "========================================"
|
||||
|
||||
# Find all .webm files and process them
|
||||
for file in "$target_dir"/*.webm; do
|
||||
# Check if any .webm files exist
|
||||
if [[ ! -e "$file" ]]; then
|
||||
echo "No WebM files found in directory: $target_dir"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Get just the filename for display
|
||||
filename=$(basename "$file")
|
||||
|
||||
echo "Processing: $filename"
|
||||
|
||||
# Extract FPS using ffprobe
|
||||
fps=$(ffprobe -v quiet -select_streams v:0 -show_entries stream=r_frame_rate -of csv=p=0 "$file" 2>/dev/null)
|
||||
|
||||
# Check if fps extraction was successful
|
||||
if [[ -z "$fps" ]]; then
|
||||
echo " ⚠️ Could not determine FPS for $filename"
|
||||
continue
|
||||
fi
|
||||
|
||||
# Convert fraction to decimal if needed (e.g., "30/1" to "30")
|
||||
if [[ "$fps" == *"/"* ]]; then
|
||||
# Use bc for floating point division if available, otherwise use awk
|
||||
if command -v bc &> /dev/null; then
|
||||
fps_decimal=$(echo "scale=3; $fps" | bc)
|
||||
else
|
||||
fps_decimal=$(awk "BEGIN {printf \"%.3f\", $fps}")
|
||||
fi
|
||||
else
|
||||
fps_decimal="$fps"
|
||||
fi
|
||||
|
||||
echo " 📊 FPS: $fps_decimal"
|
||||
|
||||
# Store values
|
||||
fps_values+=("$fps_decimal")
|
||||
filenames+=("$filename")
|
||||
|
||||
# Update statistics
|
||||
if [[ -z "$min_fps" ]] || (( $(echo "$fps_decimal < $min_fps" | awk '{print ($1 < $2)}') )); then
|
||||
min_fps="$fps_decimal"
|
||||
fi
|
||||
|
||||
if [[ -z "$max_fps" ]] || (( $(echo "$fps_decimal > $max_fps" | awk '{print ($1 > $2)}') )); then
|
||||
max_fps="$fps_decimal"
|
||||
fi
|
||||
|
||||
total_fps=$(awk "BEGIN {printf \"%.3f\", $total_fps + $fps_decimal}")
|
||||
((count++))
|
||||
|
||||
echo ""
|
||||
done
|
||||
|
||||
# Check if any files were processed
|
||||
if [[ $count -eq 0 ]]; then
|
||||
echo "No valid WebM files could be processed."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Calculate average
|
||||
average_fps=$(awk "BEGIN {printf \"%.3f\", $total_fps / $count}")
|
||||
|
||||
# Display results
|
||||
echo "========================================"
|
||||
echo "ANALYSIS RESULTS"
|
||||
echo "========================================"
|
||||
echo "Files processed: $count"
|
||||
echo ""
|
||||
echo "📈 STATISTICS:"
|
||||
echo " Minimum FPS: $min_fps"
|
||||
echo " Maximum FPS: $max_fps"
|
||||
echo " Average FPS: $average_fps"
|
||||
echo ""
|
||||
echo "📋 INDIVIDUAL FILE DETAILS:"
|
||||
echo "----------------------------------------"
|
||||
|
||||
# Display individual file FPS
|
||||
for i in "${!filenames[@]}"; do
|
||||
printf "%-40s | %s FPS\n" "${filenames[$i]}" "${fps_values[$i]}"
|
||||
done
|
||||
|
||||
echo "----------------------------------------"
|
||||
echo "Analysis complete! 🎬"
|
||||
Reference in New Issue
Block a user