#!/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