Talk Video Procedure/Script

From CLUG Wiki

Jump to: navigation, search

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 $@