#!/bin/zsh set -euo pipefail source ~/bin/script_framework.sh function usage() { fail "Usage: $0 " } chapters_file="${1:-}" [[ -n $chapters_file ]] || usage source_video="${2:-}" [[ -n $source_video ]] || usage IFS=$'\n' for line in $(grep -vE "^(|#.*)$" ${chapters_file}); do start_ts=$(echo "${line}" | cut -d ' ' -f 1) end_ts=$(echo "${line}" | cut -d ' ' -f 2) name=$(echo "${line}" | cut -d ' ' -f 3-) step "Copying segment between ${start_ts}s and ${end_ts}s into file ${name}.${source_video##*.}" ffmpeg -ss ${start_ts} -i "${source_video}" -c copy -t $((end_ts - start_ts)) "${name}.${source_video##*.}" done