blob: 77daac3e3e967adafa5bbff304e75a25ae333219 (
plain)
- #!/bin/sh
- #
- # Usage: livedump [FORMAT [BASESTEM [SESSIONPATTERN [SEGMENTPATTERN]]]]
- #
- # Patterns are fed through "date +PATTERN"
- #
- # Examples: livedump
- # livedump dv ./dump /%Y%m%d/%H%M%S /%H%M%S
- # livedump dv-avi
- #
- # First two examples effectively identical, using defaults.
- # Third example using AVI container instead
- #
- # Description: Save live source to file and append if interupted.
- # By default captures IEC61883 DVCPRO stream from IEEE1394 (Firewire)
- # device, some of which apparently sustaining streams max. 17 minutes.
- #
- # Depends: ffmpeg
- #
- # TODO: Add formats mkv and avi, the latter possibly most suitable:
- # http://trac.ffmpeg.org/wiki/Concatenate#binconcat
- set -eu
- FORMAT=${1:-dv}
- BASESTEM=${2:-./dump}
- SESSIONPATTERN=${3:-/%Y%m%d/%H%M%S}
- SEGMENTPATTERN=${4:-/%H%M%S}
- case $FORMAT in
- dv|dv-*)
- INPUTFORMAT=dv
- SUFFIX=${FORMAT#dv-}
- OUTPUTFORMAT=${FORMAT#dv-}
- ;;
- esac
- case $SUFFIX in
- mkv) OUTPUTFORMAT=matroska;;
- esac
- case $INPUTFORMAT in
- dv)
- set -- \
- -f iec61883 -i auto \
- -f ${OUTPUTFORMAT#dv-} \
- -timecode "$(date +%H:%M:%S.00)" -codec copy
- ;;
- esac
- LINKPATH="$BASESTEM.$SUFFIX"
- SESSIONSTEM=$(date +"$SESSIONPATTERN")
- SESSIONPATH="$BASESTEM$SESSIONSTEM.$SUFFIX"
- mkdir -p "$(dirname "$LINKPATH")" "$(dirname "$SESSIONPATH")"
- touch "$SESSIONPATH"
- [ -z "$LINKPATH" ] | ln -fs "$SESSIONPATH" "$LINKPATH"
- while true; do
- SEGMENTSTEM=$(date +"$SEGMENTPATTERN")
- LOGPATH="$BASESTEM$SESSIONSTEM$SEGMENTSTEM.log"
- mkdir -p "$(dirname "$LOGPATH")"
- FFREPORT="file=$LOGPATH" \
- ffmpeg -hide_banner "$@" pipe: \
- >> "$SESSIONPATH"
- done
|