Skip to content

Instantly share code, notes, and snippets.

@norrs
Created June 26, 2012 06:40
Show Gist options
  • Save norrs/2993839 to your computer and use it in GitHub Desktop.
Save norrs/2993839 to your computer and use it in GitHub Desktop.
#!/bin/bash
set -e
die () {
echo "$1" >&2
exit 1
}
print_usage_and_die () {
die "Usage: $0 [ webm | flv | all ] \$DIRECTORY"
}
print_ok () {
echo -e "[\e[00;32mOK\e[00m] $@"
}
print_error () {
echo -e "[\e[00;31mERROR\e[00m] $@"
}
webm () {
filename="$1"; shift
file_no_ext="${filename%.*}"
vargs=(-i "$filename" -vn -acodec copy "$file_no_ext.ogg")
#echo -n "ffmpeg ${vargs[@]}"
ffmpeg "${vargs[@]}"
if [ $? -eq 0 ]; then
print_ok $(basename "$file_no_ext.ogg")
else
print_error $(basename "$file_no_ext.ogg")
fi
return $!
}
flv () {
filename="$1"; shift
file_no_ext="${filename%.*}"
vargs=(-i "$filename" -acodec flac "$file_no_ext.flac")
ffmpeg "${vargs[@]}"
if [ $? -eq 0 ]; then
print_ok $(basename "$file_no_ext.flac")
else
print_error $(basename "$file_no_ext.flac")
fi
return $1
}
convert_file () {
search="$1"; shift
echo find $1 -type f '(' "${x_type[@]}" ')'
find $search -type f '(' "${x_type[@]}" ')' -print0 | while IFS= read -r -d '' filename; do
file_ext="${filename##*.}"
case "$file_ext" in
"webm" ) webm "$filename" ;;
"flv" ) flv "$filename" ;;
* ) echo "no file converter known for $file_ext, skipping $filename" >&2 ;;
esac
done
}
options="fFwhp:"
x_type=()
x_force=false
while getopts $options option
do
case "$option" in
F ) x_force=true;;
f ) x_type+=(-iname '*.flv' -o) ;;
w ) x_type+=(-iname '*.webm' -o) ;;
p ) search="$OPTARG" ;;
h ) print_usage_and_die ;;
* ) print_usage_and_die ;;
esac
done
[ "$#" -lt 1 ] && print_usage_and_die
shift $(($OPTIND - 1))
[ ${#x_type[@]} -gt 0 ] && unset x_type[$(expr ${#x_type[@]} - 1 )]
convert_file "$search"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment