Shell Implementation
#!/bin/sh -e
renice 10 -p $$
SRC=talk
DST=talk
FILTER=0
while [[ $# > 0 ]]; do
case "$1" in
"-s") SRC="$2"
shift 2
;;
"-d") DST="$2"
shift 2
;;
"-f") FILTER=1
shift
;;
"-h") echo "Usage $0 [-hf] [-s src-prefix] [-d dst-prefix]"
echo " -h Help (this)"
echo " -f Generate Title and Filter"
echo " -s Source filename prefix (default 'talk')"
echo " -d Destination filename prefix (default 'talk')"
exit 1
;;
esac
done
# Check for source files
if [[ $FILTER -eq 1 ]]; then
if [[ ! -e "$SRC-title.png" ]]; then
echo "Missing Title: $SRC-title.png"
exit 1
fi
identify "$SRC-title.png" | grep -q "720x576" || (echo "Incorrectly dimensioned Title: $SRC-title.png"; exit 1)
fi
if [[ ! -e "$SRC.wav" ]]; then
echo "Missing origional audio: $SRC.wav"
exit 1
fi
if [[ ! -e "$SRC-audio.wav" ]]; then
echo "Missing edited audio: $SRC-audio.wav"
exit 1
fi
if [[ ! -e "$SRC-dv.avi" ]]; then
echo "Missing video: $SRC-dv.avi"
exit 1
fi
# Create title and filter
if [[ $FILTER -eq 1 ]]; then
mencoder "mf://$SRC-title.png" -mf fps=0.2 -ofps 25 -vf filmdint=io=1:100,harddup \
-ovc lavc -lavcopts vcodec=dvvideo -ffourcc dvsd -o "$SRC-title.avi"
mencoder "$SRC-title.avi" "$SRC-dv.avi" -vf pp=fd,denoise3d \
-ovc lavc -lavcopts vcodec=dvvideo -nosound -ffourcc dvsd -o "$SRC-dv-filtered.avi"
fi
# Encode audio
oggenc -q -1 "$SRC-audio.wav" -o "$SRC-low-vorbis.ogg"
oggenc -q 1 "$SRC-audio.wav" -o "$SRC-high-vorbis.ogg"
oggenc -q 5 "$SRC.wav" -o "$SRC-archive-vorbis.ogg"
oggenc -q 5 "$SRC-audio.wav" -o "$SRC-archive-edited-vorbis.ogg"
# Encode video
ffmpeg2theora -v 2 --optimize -x 320 -y 240 -K 256 --nosound "$SRC-dv-filtered.avi" -o "$SRC-low-theora.ogg"
ffmpeg2theora -v 2 --optimize -K 256 --nosound "$SRC-dv-filtered.avi" -o "$SRC-medium-theora.ogg"
ffmpeg2theora -v 4 --optimize -K 256 --nosound "$SRC-dv-filtered.avi" -o "$SRC-high-theora.ogg"
mencoder -nosound "$SRC-dv.avi" -ovc x264 -x264encopts interlaced:bitrate=5000 -o "$SRC-archive-h264.avi"
# Merge
oggzmerge "$SRC-low-theora.ogg" "$SRC-low-vorbis.ogg" -o "$DST--low.ogg"
oggzmerge "$SRC-medium-theora.ogg" "$SRC-low-vorbis.ogg" -o "$DST--medium.ogg"
oggzmerge "$SRC-high-theora.ogg" "$SRC-high-vorbis.ogg" -o "$DST--high.ogg"
ogmmerge -A "$SRC-archive-h264.avi" \
-c "LANGUAGE=English: Original" "$SRC-archive-vorbis.ogg" \
-c "LANGUAGE=English: Edited" "$SRC-archive-edited-vorbis.ogg" \
-o "$DST--archive.ogg"
Make implementation (preferable for multi-core machines)
#!/usr/bin/make
SRC=talk
DST=talk
FFLAGS=--optimize
therora_targets=$(DST)--high.ogg $(DST)--medium.ogg $(DST)--low.ogg
x264_targets=$(DST)--archive.ogg
targets=$(therora_targets) $(x264_targets)
.PHONY: all
all: $(targets)
# Titles:
$(SRC)-title.avi: $(SRC)-title.png
mencoder mf://$< -mf fps=0.2 -ofps 25 \
-vf filmdint=io=1:100,harddup \
-ovc lavc -lavcopts vcodec=dvvideo -ffourcc dvsd \
-nosound -o $@
$(SRC)-dv-filtered.avi: $(SRC)-title.avi $(SRC)-dv.avi
mencoder $(SRC)-title.avi $(SRC)-dv.avi \
-vf pp=fd,denoise3d -ovc lavc -lavcopts vcodec=dvvideo -ffourcc dvsd \
-nosound -o $@
# Video:
$(SRC)-high-theora.ogg: $(SRC)-dv-filtered.avi
ffmpeg2theora -v 4 -K 256 --nosound $(FFLAGS) -o $@ $<
$(SRC)-medium-theora.ogg: $(SRC)-dv-filtered.avi
ffmpeg2theora -v 2 -K 256 --nosound $(FFLAGS) -o $@ $<
$(SRC)-low-theora.ogg: $(SRC)-dv-filtered.avi
ffmpeg2theora -v 2 -x 320 -y 240 -K 256 --nosound $(FFLAGS) -o $@ $<
$(SRC)-archive-h264.avi: $(SRC)-dv.avi
mencoder -nosound -ovc x264 -x264encopts interlaced:bitrate=5000 -o $@ $<
# Audio:
$(SRC)-high-vorbis.ogg: $(SRC)-audio.wav
oggenc -q 1 $< -o $@
$(SRC)-low-vorbis.ogg: $(SRC)-audio.wav
oggenc -q -1 $< -o $@
$(SRC)-archive-vorbis.ogg: $(SRC).wav
oggenc -q 5 $< -o $@
$(SRC)-archive-edited-vorbis.ogg: $(SRC)-audio.wav
oggenc -q 5 $< -o $@
# Merge:
$(DST)--high.ogg: $(SRC)-high-vorbis.ogg $(SRC)-high-theora.ogg
oggzmerge -o $@ $?
$(DST)--medium.ogg: $(SRC)-low-vorbis.ogg $(SRC)-medium-theora.ogg
oggzmerge -o $@ $?
$(DST)--low.ogg: $(SRC)-low-vorbis.ogg $(SRC)-low-theora.ogg
oggzmerge -o $@ $?
$(DST)--archive.ogg: $(SRC)-archive-vorbis.ogg $(SRC)-archive-edited-vorbis.ogg $(SRC)-archive-h264.avi
ogmmerge -A $(SRC)-archive-h264.avi \
-c "LANGUAGE=English: Original" $(SRC)-archive-vorbis.ogg \
-c "LANGUAGE=English: Edited" $(SRC)-archive-edited-vorbis.ogg \
-o $@