#!/bin/bash INPUT_FILE="$1" OUTPUT_FILE="$2" GPU="$3" [[ -f "${INPUT_FILE}" ]] || exit 1 ffmpeg_input_opts_amd=( -init_hw_device vaapi=amdgpu:/dev/dri/renderD128 -hwaccel vaapi -hwaccel_output_format vaapi -hwaccel_device amdgpu ) ffmpeg_output_opts_amd=( -vaapi_device /dev/dri/renderD128 -map 0 -c:v hevc_vaapi -c:a copy -c:s copy -vtag hvc1 ) ffmpeg_input_opts_nv=( ) ffmpeg_output_opts_nv=( -map 0 -c:s copy -c:a copy -c:v hevc_nvenc ) ffmpeg_input_opts_intel=( -hwaccel qsv ) ffmpeg_output_opts_intel=( -map 0 -c:v hevc_qsv -c:a copy -c:s copy ) case ${GPU} in nv) echo -n "Using nVidia cuda" ffmpeg ${ffmpeg_input_opts_nv[@]} -i "${INPUT_FILE}" ${ffmpeg_output_opts_nv[@]} "${OUTPUT_FILE}" ;; amd) echo -n "using AMDGPU" ffmpeg ${ffmpeg_input_opts_amd[@]} -i "${INPUT_FILE}" ${ffmpeg_output_opts_amd[@]} "${OUTPUT_FILE}" ;; intel) echo -n "Using Intel QSV" ffmpeg ${ffmpeg_input_opts_intel[@]} -i "${INPUT_FILE}" ${ffmpeg_output_opts_intel[@]} "${OUTPUT_FILE}" ;; *) echo -n "Using CPU encoding" ;; esac