#!/bin/bash set -o pipefail IFS=$'\n\t' # You'll want to run this kinda like this... # find /mnt/ -maxdepth 25 -regex ".*\.\(mkv\|mp4\|wmv\|flv\|webm\|mov\|avi\|m4v\)" | parallel ./parallel_convert_265 {} # OR # parallel 'find {} -type f -name "*.mkv"' ::: /Muninn/TV /Muninn/Movies | parallel --progress ~/convert265/265 {} # parallel 'find {} -type f -maxdepth 5 -regex ".*\.\(mkv\|mp4\|wmv\|flv\|webm\|mov\|avi\|m4v\)"' ::: /Muninn/TV /Muninn/Movies | parallel --jobs 2 --progress ~/convert265/265 {} for video; do d=$(dirname "$video") filename=$(basename "$video") extension="${filename##*.}" filename="${filename%.*}" video_codec=$(nice -n 19 mediainfo --Inform="Video;%Format%" "${video}") echo -e "${video} // ${video_codec}" if [[ ! ${video_codec} =~ "HEVC" ]]; then _filename=$(echo "${filename}" | sed -e 's/h264/x265/g' -e 's/x264/x265/g' -e 's/AVC/x265/g' -e 's/XviD/x265/g').mkv nice -n 19 ffmpeg -hide_banner -loglevel info -y -threads 4 -vaapi_device /dev/dri/renderD128 -analyzeduration 20000000 -probesize 20000000 \ -i "${video}" -map 0:v:0 -map 0:a -c:a copy -vf 'format=nv12,hwupload' \ -c:v hevc_vaapi \ -max_muxing_queue_size 1024 -movflags +faststart -movflags use_metadata_tags "/dev/shm/$_filename" || exit 1 mv -vu "/dev/shm/${_filename}" "${d}/${_filename}" || rm -f "/dev/shm/${_filename}" if [[ -f "${d}/${_filename}" ]]; then cmp "${d}/${_filename}" "${video}" || rm -vf "${video}" fi fi done