diff --git a/265 b/265 index 94a1c09..9259822 100644 --- a/265 +++ b/265 @@ -4,32 +4,32 @@ IFS=$'\n\t' export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/x86_64-linux-gnu/ for video; do - d=$(dirname "$video") - filename=$(basename "$video") - extension="${filename##*.}" - filename="${filename%.*}" - audio_codec=$(mediainfo --Inform="Audio;%Format%" "${video}") - video_codec=$(mediainfo --Inform="Video;%Format%" "${video}") - attachment=$(mediainfo --Inform="General;%Attachments%" "${video}") - video_width=$(mediainfo --Inform="Video;%Width%" "${video}") - color_primaries=$(mediainfo --Inform="Video;%colour_primaries%" "${video}") - echo -e "${video} // ${video_codec} // ${audio_codec} // ${video_width} // ${attachment} // ${color_primaries}" - if [[ -f "${d}/poster.jpg" ]]; then - poster="${d}/poster.jpg" - elif [[ -f "${d}/${filename}.jpg" ]]; then - poster="${d}/${filename}.jpg" - else - poster="" - fi - if [[ ! ${video_codec} =~ "HEVC" ]] || [[ ! ${audio_codec} =~ "Opus" ]]; then - _filename=$(echo "${filename}" | sed -e 's/h264/x265/g' -e 's/x264/x265/g' -e 's/XviD/x265/g' -e 's/AAC/Opus/g' -e 's/DTS/Opus/g' -e 's/EAC3/Opus/g' -e 's/AC3/Opus/g' -e 's/TrueHD/Opus/g' -e 's/Vorbis/Opus/g' -e 's/Atmos//g').mkv - #-c:a libopus -b:a 128k -vbr on -compression_level 10 -frame_duration 60 -application audio -mapping_family 1 -ac 6 \ - ~/convert265/tools/ffmpeg -hide_banner -loglevel info -y -hwaccel auto -analyzeduration 20000000 -probesize 20000000 \ - -i "${video}" -map 0:v -map 0:a -map 0:s? -map 0:d? -map 0:t? -c:s copy \ - -c:v hevc_nvenc -rc-lookahead 30 -surfaces 64 -qmin 0 -qmax 24 -profile:v main10 -preset p7 -tune hq -multipass 1 \ - -c:a libopus -b:a 128k -vbr on -compression_level 10 -frame_duration 60 -application audio -mapping_family 1 -ac 6 \ - -max_muxing_queue_size 1024 -movflags +faststart -movflags use_metadata_tags "/dev/shm/$_filename" || exit 1 - cmp "/dev/shm/${_filename}" "${video}" || rm -vf "${video}" - mv -vu "/dev/shm/${_filename}" "${d}/${_filename}" || rm -f "/dev/shm/${_filename}" - fi + d=$(dirname "$video") + filename=$(basename "$video") + extension="${filename##*.}" + filename="${filename%.*}" + audio_codec=$(mediainfo --Inform="Audio;%Format%" "${video}") + video_codec=$(mediainfo --Inform="Video;%Format%" "${video}") + attachment=$(mediainfo --Inform="General;%Attachments%" "${video}") + video_width=$(mediainfo --Inform="Video;%Width%" "${video}") + color_primaries=$(mediainfo --Inform="Video;%colour_primaries%" "${video}") + echo -e "${video} // ${video_codec} // ${audio_codec} // ${video_width} // ${attachment} // ${color_primaries}" + if [[ -f "${d}/poster.jpg" ]]; then + poster="${d}/poster.jpg" + elif [[ -f "${d}/${filename}.jpg" ]]; then + poster="${d}/${filename}.jpg" + else + poster="" + fi + if [[ ! ${video_codec} =~ "HEVC" ]] || [[ ! ${audio_codec} =~ "Opus" ]]; then + _filename=$(echo "${filename}" | sed -e 's/h264/x265/g' -e 's/x264/x265/g' -e 's/XviD/x265/g' -e 's/AAC/Opus/g' -e 's/DTS/Opus/g' -e 's/EAC3/Opus/g' -e 's/AC3/Opus/g' -e 's/TrueHD/Opus/g' -e 's/Vorbis/Opus/g' -e 's/Atmos//g').mkv + #-c:a libopus -b:a 128k -vbr on -compression_level 10 -frame_duration 60 -application audio -mapping_family 1 -ac 6 \ + ~/convert265/tools/ffmpeg -hide_banner -loglevel info -y -hwaccel auto -analyzeduration 20000000 -probesize 20000000 \ + -i "${video}" -map 0:v -map 0:a -map 0:s? -map 0:d? -map 0:t? -c:s copy \ + -c:v hevc_nvenc -rc-lookahead 30 -surfaces 64 -qmin 0 -qmax 24 -profile:v main10 -preset p7 -tune hq -multipass 1 \ + -c:a libopus -b:a 128k -vbr on -compression_level 10 -frame_duration 60 -application audio -mapping_family 1 -ac 6 \ + -max_muxing_queue_size 1024 -movflags +faststart -movflags use_metadata_tags "/dev/shm/$_filename" || exit 1 + cmp "/dev/shm/${_filename}" "${video}" || rm -vf "${video}" + mv -vu "/dev/shm/${_filename}" "${d}/${_filename}" || rm -f "/dev/shm/${_filename}" + fi done diff --git a/265_audio_problems b/265_audio_problems index 23ff1bd..711d8b6 100755 --- a/265_audio_problems +++ b/265_audio_problems @@ -3,25 +3,25 @@ set -o pipefail IFS=$'\n\t' for video; do - if [[ ! -f "${video}.json" ]]; then - ffprobe -v quiet -print_format json -show_streams "${video}" > "${video}.json" - fi - d=$(dirname "$video") - filename=$(basename "$video") - filename="${filename%.*}" - video_codec=$(jq -r '.streams[0].codec_name' < "${video}.json") - video_height=$(jq -r '.streams[0].height' < "${video}.json") - echo -e "${video} // ${video_codec} // ${video_height}" - if [[ ! ${video_codec} =~ "hevc" || ${video_height} -gt 1080 ]]; 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 -hwaccel vaapi -hwaccel_output_format vaapi -vaapi_device /dev/dri/renderD128 -analyzeduration 20000000 -probesize 20000000 \ - -i "${video}" -map 0:v -map 0:a -map 0:s? -map 0:d? -map 0:t? -c:s copy \ - -c:a libopus -b:a 128k -vbr on -compression_level 10 -frame_duration 60 -application audio -mapping_family 1 -ac 2 \ - -c:v hevc_vaapi -profile:v main10 \ - -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 + if [[ ! -f "${video}.json" ]]; then + ffprobe -v quiet -print_format json -show_streams "${video}" >"${video}.json" + fi + d=$(dirname "$video") + filename=$(basename "$video") + filename="${filename%.*}" + video_codec=$(jq -r '.streams[0].codec_name' <"${video}.json") + video_height=$(jq -r '.streams[0].height' <"${video}.json") + echo -e "${video} // ${video_codec} // ${video_height}" + if [[ ! ${video_codec} =~ "hevc" || ${video_height} -gt 1080 ]]; 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 -hwaccel vaapi -hwaccel_output_format vaapi -vaapi_device /dev/dri/renderD128 -analyzeduration 20000000 -probesize 20000000 \ + -i "${video}" -map 0:v -map 0:a -map 0:s? -map 0:d? -map 0:t? -c:s copy \ + -c:a libopus -b:a 128k -vbr on -compression_level 10 -frame_duration 60 -application audio -mapping_family 1 -ac 2 \ + -c:v hevc_vaapi -profile:v main10 \ + -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 diff --git a/265_personal b/265_personal index 415b4e3..6495ac5 100755 --- a/265_personal +++ b/265_personal @@ -3,27 +3,27 @@ set -o pipefail IFS=$'\n\t' for video; do - if [[ ! -f "${video}.json" ]]; then - ffprobe -v quiet -print_format json -show_streams "${video}" > "${video}.json" - fi - d=$(dirname "$video") - filename=$(basename "$video") - filename="${filename%.*}" - video_codec=$(jq -r '.streams[0].codec_name' < "${video}.json") - video_height=$(jq -r '.streams[0].height' < "${video}.json") - echo -e "${video} // ${video_codec} // ${video_height}" - if [[ ! ${video_codec} =~ "hevc" || ${video_height} -gt 1080 ]]; 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')_H265.mkv - nice -n 19 ffmpeg -hide_banner -loglevel info -y -threads 4 -hwaccel vaapi -hwaccel_output_format vaapi -hwaccel_device /dev/dri/renderD128 -analyzeduration 20000000 -probesize 20000000 \ - -i "${video}" -map 0:v -map 0:a -map 0:s? -map 0:d? -map 0:t? -c:s copy \ - -vf 'scale_vaapi=format=p010,scale_vaapi=w=1920:-2' \ - -c:v hevc_vaapi -profile:v main10 \ - -c:a copy \ - -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 + if [[ ! -f "${video}.json" ]]; then + ffprobe -v quiet -print_format json -show_streams "${video}" >"${video}.json" + fi + d=$(dirname "$video") + filename=$(basename "$video") + filename="${filename%.*}" + video_codec=$(jq -r '.streams[0].codec_name' <"${video}.json") + video_height=$(jq -r '.streams[0].height' <"${video}.json") + echo -e "${video} // ${video_codec} // ${video_height}" + if [[ ! ${video_codec} =~ "hevc" || ${video_height} -gt 1080 ]]; 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')_H265.mkv + nice -n 19 ffmpeg -hide_banner -loglevel info -y -threads 4 -hwaccel vaapi -hwaccel_output_format vaapi -hwaccel_device /dev/dri/renderD128 -analyzeduration 20000000 -probesize 20000000 \ + -i "${video}" -map 0:v -map 0:a -map 0:s? -map 0:d? -map 0:t? -c:s copy \ + -vf 'scale_vaapi=format=p010,scale_vaapi=w=1920:-2' \ + -c:v hevc_vaapi -profile:v main10 \ + -c:a copy \ + -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 diff --git a/265_poster_problems b/265_poster_problems index de5bab8..f9faf7b 100755 --- a/265_poster_problems +++ b/265_poster_problems @@ -3,25 +3,25 @@ set -o pipefail IFS=$'\n\t' for video; do - if [[ ! -f "${video}.json" ]]; then - ffprobe -v quiet -print_format json -show_streams "${video}" > "${video}.json" - fi - d=$(dirname "$video") - filename=$(basename "$video") - filename="${filename%.*}" - video_codec=$(jq -r '.streams[0].codec_name' < "${video}.json") - video_height=$(jq -r '.streams[0].height' < "${video}.json") - echo -e "${video} // ${video_codec} // ${video_height}" - if [[ ! ${video_codec} =~ "hevc" || ${video_height} -gt 1080 ]]; 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:s? -map 0:d? -map 0:t? -c:s copy -c:a copy -vf 'format=nv12,hwupload' \ - -c:v hevc_vaapi -profile:v main10 \ - -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}" "${video}.json" - ffprobe -v quiet -print_format json -show_streams "${d}/${_filename}" > "${d}/${_filename}.json" - fi - fi + if [[ ! -f "${video}.json" ]]; then + ffprobe -v quiet -print_format json -show_streams "${video}" >"${video}.json" + fi + d=$(dirname "$video") + filename=$(basename "$video") + filename="${filename%.*}" + video_codec=$(jq -r '.streams[0].codec_name' <"${video}.json") + video_height=$(jq -r '.streams[0].height' <"${video}.json") + echo -e "${video} // ${video_codec} // ${video_height}" + if [[ ! ${video_codec} =~ "hevc" || ${video_height} -gt 1080 ]]; 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:s? -map 0:d? -map 0:t? -c:s copy -c:a copy -vf 'format=nv12,hwupload' \ + -c:v hevc_vaapi -profile:v main10 \ + -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}" "${video}.json" + ffprobe -v quiet -print_format json -show_streams "${d}/${_filename}" >"${d}/${_filename}.json" + fi + fi done diff --git a/265_problems b/265_problems index 3d3cc69..e782449 100755 --- a/265_problems +++ b/265_problems @@ -3,24 +3,24 @@ set -o pipefail IFS=$'\n\t' for video; do - if [[ ! -f "${video}.json" ]]; then - ffprobe -v quiet -print_format json -show_streams "${video}" > "${video}.json" - fi - d=$(dirname "$video") - filename=$(basename "$video") - filename="${filename%.*}" - video_codec=$(jq -r '.streams[0].codec_name' < "${video}.json") - video_height=$(jq -r '.streams[0].height' < "${video}.json") - echo -e "${video} // ${video_codec} // ${video_height}" - if [[ ! ${video_codec} =~ "hevc" || ${video_height} -gt 1080 ]]; then - _filename=$(echo "${filename}" | sed -e 's/h264/x265/g' -e 's/x264/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 -map 0:a -map 0:s? -map 0:d? -map 0:t? -c:s copy -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 + if [[ ! -f "${video}.json" ]]; then + ffprobe -v quiet -print_format json -show_streams "${video}" >"${video}.json" + fi + d=$(dirname "$video") + filename=$(basename "$video") + filename="${filename%.*}" + video_codec=$(jq -r '.streams[0].codec_name' <"${video}.json") + video_height=$(jq -r '.streams[0].height' <"${video}.json") + echo -e "${video} // ${video_codec} // ${video_height}" + if [[ ! ${video_codec} =~ "hevc" || ${video_height} -gt 1080 ]]; then + _filename=$(echo "${filename}" | sed -e 's/h264/x265/g' -e 's/x264/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 -map 0:a -map 0:s? -map 0:d? -map 0:t? -c:s copy -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 diff --git a/265_qsv b/265_qsv index bac6864..aa7ed6a 100755 --- a/265_qsv +++ b/265_qsv @@ -3,25 +3,25 @@ set -o pipefail IFS=$'\n\t' for video; do - if [[ ! -f "${video}.json" ]]; then - ffprobe -v quiet -print_format json -show_streams "${video}" > "${video}.json" - fi - d=$(dirname "$video") - filename=$(basename "$video") - filename="${filename%.*}" - video_codec=$(jq -r '.streams[0].codec_name' < "${video}.json") - video_height=$(jq -r '.streams[0].height' < "${video}.json") - echo -e "${video} // ${video_codec} // ${video_height}" - if [[ ! ${video_codec} =~ "hevc" || ${video_height} -gt 1080 ]]; 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 ~/Downloads/ffmpeg/ffmpeg -hide_banner -loglevel info -y -threads 4 -hwaccel qsv -hwaccel_output_format qsv -analyzeduration 20000000 -probesize 20000000 \ - -i "${video}" -map 0:v -map 0:a -map 0:s? -map 0:d? -map 0:t? -c:s copy -c:a copy \ - -vf 'scale_qsv=w=1920:1080' -c:v hevc_qsv -low_power false -preset 1 -profile:v 1 -scenario 3 -look_ahead 1 -global_quality 20 \ - -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}" "${video}.json" - ffprobe -v quiet -print_format json -show_streams "${d}/${_filename}" > "${d}/${_filename}.json" - fi - fi + if [[ ! -f "${video}.json" ]]; then + ffprobe -v quiet -print_format json -show_streams "${video}" >"${video}.json" + fi + d=$(dirname "$video") + filename=$(basename "$video") + filename="${filename%.*}" + video_codec=$(jq -r '.streams[0].codec_name' <"${video}.json") + video_height=$(jq -r '.streams[0].height' <"${video}.json") + echo -e "${video} // ${video_codec} // ${video_height}" + if [[ ! ${video_codec} =~ "hevc" || ${video_height} -gt 1080 ]]; 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 ~/Downloads/ffmpeg/ffmpeg -hide_banner -loglevel info -y -threads 4 -hwaccel qsv -hwaccel_output_format qsv -analyzeduration 20000000 -probesize 20000000 \ + -i "${video}" -map 0:v -map 0:a -map 0:s? -map 0:d? -map 0:t? -c:s copy -c:a copy \ + -vf 'scale_qsv=w=1920:1080' -c:v hevc_qsv -low_power false -preset 1 -profile:v 1 -scenario 3 -look_ahead 1 -global_quality 20 \ + -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}" "${video}.json" + ffprobe -v quiet -print_format json -show_streams "${d}/${_filename}" >"${d}/${_filename}.json" + fi + fi done diff --git a/265_system b/265_system index caa2844..c715559 100755 --- a/265_system +++ b/265_system @@ -7,28 +7,28 @@ export LD_LIBRARY_PATH="/opt/amdgpu/libdrm/lib64:/opt/amdgpu/libdrm/lib32:$LD_LI export VK_ICD_FILENAMES="${pro_dir}/amd_icd32.json:${pro_dir}/amd_icd64.json" for video; do - if [[ ! -f "${video}.json" ]]; then - ffprobe -v quiet -print_format json -show_streams "${video}" > "${video}.json" - fi - d=$(dirname "$video") - filename=$(basename "$video") - filename="${filename%.*}" - video_codec=$(jq -r '.streams[0].codec_name' < "${video}.json") - video_height=$(jq -r '.streams[0].height' < "${video}.json") - echo -e "${video} // ${video_codec} // ${video_height}" - if [[ ${video_codec} =~ "av1" ]]; then - exit - fi - if [[ ! ${video_codec} =~ "hevc" || ${video_height} -gt 1080 ]]; 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 -hwaccel vaapi -hwaccel_output_format vaapi -vaapi_device /dev/dri/renderD128 -analyzeduration 20000000 -probesize 20000000 \ - -i "${video}" -map 0:v -map 0:a -map 0:s? -map 0:d? -map 0:t? -c:s copy -c:a copy \ - -vf 'scale_vaapi=format=p010,scale_vaapi=w=1920:-2' -c:v hevc_vaapi -profile:v main10 \ - -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}" "${video}.json" - ffprobe -v quiet -print_format json -show_streams "${d}/${_filename}" > "${d}/${_filename}.json" - fi - fi + if [[ ! -f "${video}.json" ]]; then + ffprobe -v quiet -print_format json -show_streams "${video}" >"${video}.json" + fi + d=$(dirname "$video") + filename=$(basename "$video") + filename="${filename%.*}" + video_codec=$(jq -r '.streams[0].codec_name' <"${video}.json") + video_height=$(jq -r '.streams[0].height' <"${video}.json") + echo -e "${video} // ${video_codec} // ${video_height}" + if [[ ${video_codec} =~ "av1" ]]; then + exit + fi + if [[ ! ${video_codec} =~ "hevc" || ${video_height} -gt 1080 ]]; 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 -hwaccel vaapi -hwaccel_output_format vaapi -vaapi_device /dev/dri/renderD128 -analyzeduration 20000000 -probesize 20000000 \ + -i "${video}" -map 0:v -map 0:a -map 0:s? -map 0:d? -map 0:t? -c:s copy -c:a copy \ + -vf 'scale_vaapi=format=p010,scale_vaapi=w=1920:-2' -c:v hevc_vaapi -profile:v main10 \ + -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}" "${video}.json" + ffprobe -v quiet -print_format json -show_streams "${d}/${_filename}" >"${d}/${_filename}.json" + fi + fi done