blob: 5db6c3cebd8d8fcb978bd0e2c58c5ef009bec83e (
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
- 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 -codec copy
- SUFFIX=dv
- ;;
- dv-avi)
- set -- -f iec61883 -i auto \
- -f avi -codec copy
- SUFFIX=avi
- ;;
- dv-nut)
- set -- -f iec61883 -i auto \
- -f nut -codec copy -f_strict experimental -syncpoints timestamped -write_index 0
- SUFFIX=nut
- ;;
- 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
|