#!/bin/sh #=============================================================================== # scene-images # szene-bilder # Thumbnails von ffmpeg-Szenen #=============================================================================== # Abhängigkeiten: # ffmpeg #=============================================================================== # Verwendung von Skripten #=============================================================================== usage () { # Wenn das Argument an die Funktion übergeben wird, echo es [ -z "${1}" ] || echo "! ${1}" # Hilfe anzeigen echo "\ $(basename "$0") -i eingang -c datei schneiden -t (png|jpg) -x breite -y höhe -i eingang.(mp4|mov|mkv|m4v) -c datei schneiden -t (png|jpg) : optionales Argument # Wenn Option nicht Standardeinstellungen für PNG bereitgestellt wird -x breite : optionales Argument # -y höhe : optionales Argument #" exit 2 } #=============================================================================== # Fehlermeldungen #=============================================================================== INVALID_OPT_ERR='Ungültige Option:' REQ_ARG_ERR='erfordert eine Argumentation' WRONG_ARGS_ERR='falsche Anzahl von Argumenten an Skript übergeben' #=============================================================================== # Überprüfen Sie die Anzahl der an das Skript übergebenen Argumente #=============================================================================== [ $# -gt 0 ] || usage "${WRONG_ARGS_ERR}" #=============================================================================== # getopts überprüft die an das Skript übergebenen Optionen #=============================================================================== while getopts ':i:c:t:x:y:h' opt do case ${opt} in i) input="${OPTARG}";; c) cutfile="${OPTARG}";; t) image="${OPTARG}";; x) width="${OPTARG}";; y) height="${OPTARG}";; h) usage;; \?) usage "${INVALID_OPT_ERR} ${OPTARG}" 1>&2;; :) usage "${INVALID_OPT_ERR} ${OPTARG} ${REQ_ARG_ERR}" 1>&2;; esac done shift $((OPTIND-1)) #=============================================================================== # variablen #=============================================================================== # Holen Sie sich den Namen der Eingabedatei input_nopath="${input##*/}" input_name="${input_nopath%.*}" # Bildstandard image_default="png" #=============================================================================== # ffmpeg-Bild extrahieren #=============================================================================== # Bildfunktion extract () { output="${input_name}-[${seconds}].${image:=${image_default}}" ffmpeg \ -nostdin \ -hide_banner \ -stats -v panic \ -ss "${seconds}" \ -i "${input}" \ -q:v 2 -f image2 \ -vframes 1 \ "${output}" } # Bild- und Skalierungsfunktion extract_scale () { output="${input_name}-[${seconds}].${image:=${image_default}}" ffmpeg \ -nostdin \ -hide_banner \ -stats -v panic \ -ss "${seconds}" \ -i "${input}" \ -q:v 2 -f image2 \ -vframes 1 \ -vf scale="${width:=-1}:${height:=-1}" \ "${output}" } #=============================================================================== # Datei lesen und ffmpeg ausführen #=============================================================================== if [ -n "${width}" ] || [ -n "${height}" ]; then count=1 while IFS= read -r seconds; do extract_scale done < "${cutfile}" else count=1 while IFS= read -r seconds; do extract done < "${cutfile}" fi