blob: 6e4c0b8c6a8c32954b64454726cbf172366874f9 (
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
- #
- # (examples are effectively identical, the latter showing defaults)
- #
- # 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)
- set -- \
- -f iec61883 -i auto \
- -f dv -timecode "$(date +%H:%M:%S.00)" -codec copy
- SUFFIX=dv
- ;;
- esac
- LINKPATH="$BASESTEM.$SUFFIX"
- SESSIONSTEM=$(date +"$TARGETPATTERN")
- SESSIONPATH="$BASESTEM$SESSIONSTEM.$SUFFIX"
- mkdir -p "$(dirname "$LINKPATH" "$SESSIONPATH")"
- touch "$SESSIONPATH"
- [ -z "$LINKPATH" ] | ln -fs "$SESSIONPATH" "$LINKPATH"
- while true; do
- SEGMENTSTEM=$(date +"$SEGMENTPATTERN")
- LOGPATH="$BASESTEM$SESSIONSTEM$SEGMENTSTEM.log"
- mkdir -p "$LOGPATH"
- FFREPORT="file=$LOGPATH" \
- ffmpeg -hide_banner "$@" pipe: \
- >> "$SESSIONPATH"
- done
|