#!/bin/bash # set shopt-options used by this shell-script # Note, 0 (true) from shopt -q is "false" in a math context. shopt -q globstar; globstar_set=$? ((globstar_set)) && shopt -s globstar shopt -q extglob; extglob_set=$? ((extglob_set)) && shopt -s extglob # return default shopt-options function finish { ((globstar_set)) && shopt -u globstar ((extglob_set)) && shopt -u extglob } trap finish EXIT print_help() { printf "Help: not implemented yet" } while getopts 'e:dh' flag; do case "${flag}" in e) extension+=("$OPTARG");; d) delete=true;; h) print_help exit 0;; *) exit 1 ;; esac done # Print available encoders readarray -t encoders <<<$(ffmpeg -encoders -hide_banner|grep vp9) echo "In FFMPEG verfügbare Encoder:" for i in "${!encoders[@]}"; do echo "$i: ${encoders[i]}" #encoders[i]=$(echo ${encoders[0]} | awk '{print $2}') done # Choose an encoder while :; do read -r -p "Choose an encoder [0]: " encoder [[ $encoder =~ ^[0-9]+$ ]] || { echo "Enter a valid number"; continue; } if ((encoder >= 0 && encoder < ${#encoders[@]})); then encoder=$(echo "${encoders[$encoder]}" | awk '{print $2}') break else echo "Not a valid encoder, try again" fi done # Choose an GPU, if encoder is GPU accelerated # write array into string extension="${extension[*]}" # change separator extension=${extension// /|} for file in **/*.@($extension); do echo "$encoder" #https://wiki.archlinux.org/title/Hardware_video_acceleration #VP9_vaapi #Hardware video acceleration enabled #https://ffmpeg.org/ffmpeg-all.html#VAAPI-encoders #https://trac.ffmpeg.org/wiki/Hardware/VAAPI #ffmpeg -hwaccel vaapi -vaapi_device /dev/dri/renderD129 -i "$file" -map 0 -c copy -c:v vp9_vaapi -rc_mode CQP -look_ahead 1 -bf 2 -bsf:v vp9_raw_reorder,vp9_superframe -compression_level 0 -vf 'hwupload' Der\ VornameCqpLA.mkv #VP9_qsv #--enable-libmfx or --enable-libvpl and Hardware video acceleration enabled #libvpl vs. libmfx: https://www.intel.com/content/www/us/en/developer/articles/technical/onevpl-in-ffmpeg-for-great-streaming-on-intel-gpus.html #https://ffmpeg.org/ffmpeg-codecs.html #https://trac.ffmpeg.org/wiki/Hardware/QuickSync #https://www.intel.com/content/www/us/en/developer/articles/technical/common-bitrate-control-methods-in-intel-media-sdk.html #https://www.intel.com/content/www/us/en/developer/articles/technical/advanced-bitrate-control-methods-in-intel-media-sdk.html #ffmpeg -hwaccel qsv -qsv_device /dev/dri/renderD129 -i "$file" -c:v av1_qsv -vf 'hwupload' output.mkv done