@ wrote... (7 years ago)

Based off of a script by Adam Pierce. Mine is a little more user friendly.

Get latest version here.

#!/bin/bash

# avijoin by Kurt Neufeld
#
# based off of: http://www.doctort.org/adam/nerd-notes/concatenating-avi-files.html
#
# This script will join/concatenate several avi files together into one big
# one. And then (if available) it will run mencoder to fix the index. On my 
# machine (2GHz Core2 Duo with a slow SSD drive) it takes approx 1.5 minutes to 
# join two 720MB files into one 1.4GB file and fix the index.
#
# If you don't have mencoder the file should still be usable (with VLC) but 
# fast forwarding and reversing might be problematic.
#
# Released under MIT License - http://www.opensource.org/licenses/mit-license.html
#
# If you use/change this script a simple thank you would be very welcome.

if [[ -z "$@" || "$1" == "-h" || "$1" == "--help" ]]; then
    echo "usage: `basename $0` infile1 infile2 ... outfile"
    exit -1
fi

if [ $# -lt 3 ]; then
    echo "you need to supply at least 3 args: infile1 infile2 outfile"
    exit -1
fi

OUTFILE=${@: -1}
TEMPFILE="tmp_${RANDOM}.avi"

# INFILES[0]=$1 INFILES[1]=$2 etc, skip last element (the outfile)
for f in `seq $(($#-1))`; do
    INFILES[$(($f-1))]=${!f}
done

SAVEIFS=$IFS
IFS=$(echo -en "\n\b")

for fname in ${INFILES[*]}; do
    if [ ! -f "$fname" ]; then
        echo "File '$fname' does not exist. Aborting."
        exit -1
    fi
done

DRY=

echo -n "Merging... "
$DRY cat ${INFILES[*]} > $TEMPFILE
echo "done!"

#hash zmencoder 2>&- || { echo >&2 "I require mencoder but it's not installed.  Aborting."; exit 1; }
if `hash mencoder 2>&-` ; then
    $DRY mencoder -forceidx -oac copy -ovc copy $TEMPFILE -o "$OUTFILE"
fi

$DRY rm -f $TEMPFILE

IFS=$SAVEIFS
Category: tech, Tags: shell
Comments: 0
Click here to add a comment