Created
May 26, 2017 00:47
-
-
Save qruf/19b0f9a0d877244800138f8505972c2f to your computer and use it in GitHub Desktop.
audio generation loss simulator
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #! /bin/sh | |
| # generation loss demonstration script | |
| # TODO: | |
| # - output the concatenated encoded format | |
| # (currently outputs pcm to avoid encoder-delay gaps) | |
| # - better progress display | |
| set -e | |
| # child script | |
| if [ -n "$CH_RUNNING" ]; then | |
| name=${1%.*} | |
| tmpname="${name}_tmp.$CH_FORMAT" | |
| for i in $(seq 1 $name); do | |
| ffmpeg -v error -i "$1" -c:a $CH_ENCODER $CH_OPTS "$tmpname" | |
| ffmpeg -y -v error -i "$tmpname" -c:a pcm_s16le "${name}.wav" | |
| rm "$tmpname" | |
| printf "." | |
| done | |
| exit 0 | |
| fi | |
| # main script | |
| DURATION=5 | |
| JOBS=1 | |
| OUTNAME="out.wav" | |
| CH_ENCODER="libmp3lame" | |
| CH_FORMAT="mp3" | |
| CH_OPTS="-q:a 2" | |
| CH_RUNNING=1 | |
| die() { | |
| [ -n "$1" ] && echo >&2 "$1" | |
| cat >&2 <<EOF | |
| Usage: $0 [OPTIONS] FILE | |
| Available options: | |
| -c ENCODER audio encoder (default: $CH_ENCODER) | |
| -d DURATION duration of each segment (default: $DURATION seconds) | |
| -j JOBS run jobs in parallel (default: $JOBS) | |
| -o FILENAME output filename (default: $OUTNAME) | |
| -x OPTS extra options to ffmpeg (default: $CH_OPTS) | |
| EOF | |
| exit 1 | |
| } | |
| # gettotal() { | |
| # last=$(ls -1 [0-9][0-9][0-9].wav | tail -1) | |
| # n=${1%.*} | |
| # echo $((($n * $n + $n) / 2)) | |
| # } | |
| checkuint() { | |
| [ "$1" -ge 0 2>/dev/null ] || die "invalid argument to -$2: $1" | |
| } | |
| while getopts ":c:d:j:o:x:" opt; do | |
| case $opt in | |
| c) | |
| CH_ENCODER="$OPTARG" | |
| # set the intermediate format to help avoid encoder-delay gaps | |
| case $CH_ENCODER in | |
| libmp3lame | libshine) CH_FORMAT="mp3" ;; | |
| libvorbis | vorbis) CH_FORMAT="ogg" ;; | |
| libopus | opus) CH_FORMAT="opus" ;; | |
| libfdk_aac | aac) CH_FORMAT="m4a" ;; | |
| *) CH_FORMAT="mka" ;; | |
| esac | |
| ;; | |
| d) | |
| checkuint "$OPTARG" $opt | |
| DURATION="$OPTARG" | |
| ;; | |
| j) | |
| checkuint "$OPTARG" $opt | |
| JOBS="$OPTARG" | |
| ;; | |
| o) | |
| OUTNAME="$OPTARG" | |
| ;; | |
| x) | |
| CH_OPTS="$OPTARG" | |
| ;; | |
| \?) | |
| die "Invalid option: -$opt" | |
| ;; | |
| esac | |
| done | |
| shift $((OPTIND - 1)) | |
| [ "$#" -eq 0 ] && die | |
| [ ! -f "$1" ] && die "File not found: $1" | |
| echo "Splitting $1" | |
| ffmpeg -v error -stats -i "$1" -f segment -segment_time $DURATION -segment_start_number 1 -c:a pcm_s16le -vn "%03d.wav" | |
| echo -n "Encoding" | |
| export CH_RUNNING CH_ENCODER CH_FORMAT CH_OPTS | |
| for f in [0-9][0-9][0-9].wav; do printf '%s\0' "$f"; done | xargs -0 -n1 -P$JOBS -I{} $SHELL "$0" {} | |
| echo | |
| echo "Joining parts into $OUTNAME" | |
| for f in [0-9][0-9][0-9].wav; do | |
| echo "file '$f'" | |
| done | ffmpeg -y -v error -stats -protocol_whitelist file,pipe -f concat -i - -c copy "$OUTNAME" | |
| rm [0-9][0-9][0-9].wav |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
hello, i'm new to github. i have no idea how to download this or use this, and idk how to put a file into the vhs thing, pls help