diff options
Diffstat (limited to 'ffextract-frame')
-rwxr-xr-x | ffextract-frame | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/ffextract-frame b/ffextract-frame new file mode 100755 index 0000000..b946550 --- /dev/null +++ b/ffextract-frame @@ -0,0 +1,53 @@ +#!/bin/sh +# See LICENSE file for copyright and license details. + +set -e + +usage () { + printf 'usage %s: [-t time] [-y] in-file [out-file]\n' "$0" >&2 + exit 1 +} + +ffmpeg_flag_y= +ss=10 + +while getopts t:y flag; do + case "$flag" in + t) + ss="${OPTARG}";; + y) + ffmpeg_flag_y=-y;; + ?) + usage;; + esac +done +shift $(( ${OPTIND} - 1 )) + +if test ! $# = 1 && test ! $# = 2; then + usage +fi + +removeext () { + printf '%s\0' "$1" | tr '\0\n' '\n\0' | sed 's/\.[^.]*$//' | tr '\0' '\n' +} + +in_file="$1" +if test -z "${in_file}"; then + usage +fi + +out_file="" +if test $# = 2; then + out_file="$2" + if test -z "${out_file}"; then + usage + fi +else + out_file="$(removeext "${in_file}").png" +fi + +if test "${out_file}" = -; then + exec ffmpeg -i "${in_file}" -ss "${ss}" -update 1 -frames:v 1 -c:v png -f image2pipe - +else + exec ffmpeg -i "${in_file}" -ss "${ss}" -update 1 -frames:v 1 ${ffmpeg_flag_y} -- "${out_file}" +fi |