Add encode_ogg and encode_ogg_client scripts
authorSteve McIntyre <steve@einval.com>
Sun, 19 Feb 2012 19:22:15 +0000 (19:22 +0000)
committerSteve McIntyre <steve@einval.com>
Sun, 19 Feb 2012 19:22:15 +0000 (19:22 +0000)
Simple but functional shell wrappers for encoding, ready to use with
fuse-music.

 * encode_ogg runs on the machine where fuse-music is installed

 * encode_ogg_client (optionally) runs on other machines on the
   network to spread the encoding load for faster performance.

C/encode_ogg [new file with mode: 0755]
C/encode_ogg_client [new file with mode: 0755]

diff --git a/C/encode_ogg b/C/encode_ogg
new file mode 100755 (executable)
index 0000000..2d6d7d9
--- /dev/null
@@ -0,0 +1,52 @@
+#!/bin/sh
+#
+# encode_ogg - wrapper script to use with fuse-music for encoding files
+#
+# Also an example for how to spread encoding out across other machines
+# on the network; we will run up to 4 clients on "client1" as the
+# "music" user via ssh, using "encode_ogg_client" there. This is *not*
+# especially secure against attacks via malformed music file names, be
+# aware!
+#
+# Copyright 2011 Steve McIntyre <steve@einval.com>
+# License: GPL v2 or later
+
+quality=7
+threadnum=0
+
+if [ "$1" = "-t" ] ; then
+    threadnum=$2
+    shift
+    shift
+fi
+
+if [ "$1" = "-q" ] ; then
+    quality=$2
+    shift
+    shift
+fi
+
+IN=$1
+OUT=$2
+
+ping -q -c1 client1 > /dev/null 2>&1
+if [ $? -eq 0 ] ; then
+       client1up=1
+else
+       client1up=0
+fi
+
+if [ $threadnum -lt 2 ] ; then
+    oggenc -Q -q $quality "$IN" -o "$OUT"
+       exit $?
+fi
+
+if [ $threadnum -lt 6 ] && [ $client1up -eq 1 ]; then
+    cat $IN | ssh -i /root/.ssh/music music@client1 /home/music/bin/encode_ogg_client -q $quality > $OUT
+       exit $?
+fi
+
+# Fallback in case other hosts are down
+oggenc -Q -q $quality "$IN" -o "$OUT"
+exit $?
+
diff --git a/C/encode_ogg_client b/C/encode_ogg_client
new file mode 100755 (executable)
index 0000000..2289a73
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/sh
+#
+# encode_ogg_client - wrapper script to use with fuse-music for encoding files
+#
+# Client script to use on extra machines to help spreading encoder
+# load; see "encode_ogg" to see how it's called.
+#
+# Copyright 2011 Steve McIntyre <steve@einval.com>
+# License: GPL v2 or later
+
+set -e
+
+IN=`mktemp -t oggenc.in.XXXXXXXXXX` || exit 1
+OUT=`mktemp -t oggenc.out.XXXXXXXXXX`
+if [ $? -ne 0 ]; then
+       rm -f $IN
+       exit 1
+fi
+
+cat > $IN
+oggenc -Q $@ $IN -o $OUT
+cat $OUT
+
+rm -f $IN $OUT
+exit 0