Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- CODEC="-c:v libx265 -pix_fmt yuv420p10le"
- FORMAT="matroska"
- LENGTH=2
- HOST=":"
- if [ "$#" -eq 0 ]; then
- exit
- fi
- while [ "$#" -gt 0 ]; do
- case "$1" in
- -h) HOST+=",$2"; shift 2;;
- -o) OUTPUT="$2"; shift 2;;
- -c) CODEC="$2"; shift 2;;
- -a) CODEC+=" $2"; shift 2;;
- -l) LENGTH="$2"; shift 2;;
- -f) FORMAT="$2"; shift 2;;
- -y) OVERWRITE="-y"; shift 1;;
- --host=*) HOST+=",${1#*=}"; shift 1;;
- --output=*) OUTPUT="${1#*=}"; shift 1;;
- --codec=*) CODEC="${1#*=}"; shift 1;;
- --append=*) CODEC+=" ${1#*=}"; shift 1;;
- --length=*) LENGTH="${1#*=}"; shift 1;;
- --format=*) FORMAT="${1#*=}"; shift 1;;
- --host|--output|--length|--codec|--append|--format) echo "$1 requires an argument" >&2; exit 1;;
- -*) echo "invalid option: $1" >&2; exit 1;;
- *) INPUT="$1"; shift 1;;
- esac
- done
- TMPDIR="$(mktemp -d)"
- if [ -z "$OUTPUT" ]; then
- OUTPUT="${INPUT%.*}".mkv
- fi
- ffmpeg -i "$INPUT" -map 0:v -map 0:a -c copy -f segment -segment_time $LENGTH -segment_format matroska -reset_timestamps 1 "${TMPDIR}/segment-%03d.0"
- parallel -j 1 -S "$HOST" --transfer --return "{.}.1" --cleanup --no-notice "ffmpeg -i {} $CODEC -f $FORMAT {.}.1" ::: "${TMPDIR}"/segment-*.0
- for i in "${TMPDIR}"/segment-*.1; do
- echo "file $i" >> "${TMPDIR}"/concat.txt
- done
- ffmpeg -f concat -safe 0 -i "${TMPDIR}"/concat.txt -c copy $OVERWRITE "$OUTPUT"
- rm -rf "${TMPDIR}"
Add Comment
Please, Sign In to add comment