commit af605ca5994a831a7310b5943d20be7190172c8a Author: Hugh Smalley Date: Thu Jul 7 08:18:09 2022 -0400 problems added diff --git a/265 b/265 new file mode 100644 index 0000000..6f244aa --- /dev/null +++ b/265 @@ -0,0 +1,40 @@ +#!/bin/bash +set -o pipefail +IFS=$'\n\t' +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/x86_64-linux-gnu/ + +# 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 {} + +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 +done diff --git a/265_personal b/265_personal new file mode 100755 index 0000000..0f8be72 --- /dev/null +++ b/265_personal @@ -0,0 +1,37 @@ +#!/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%.*}" + audio_codec=$(mediainfo --Inform="Audio;%Format%" "${video}") + video_codec=$(mediainfo --Inform="Video;%Format%" "${video}") + echo -e "${video} // ${video_codec} // ${audio_codec}" + 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')_H265.mkv + 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 + #-vf 'format=p010,hwupload,scale=1920x1080:flags=lanczos' -c:v hevc_vaapi -profile:v main10 \ + #-vf 'scale_vaapi=format=p010,scale_vaapi=w=1920' \ + #-c:v hevc_vaapi -profile:v main10 -b:v 15M \ diff --git a/265_problems b/265_problems new file mode 100755 index 0000000..a882923 --- /dev/null +++ b/265_problems @@ -0,0 +1,33 @@ +#!/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%.*}" + audio_codec=$(mediainfo --Inform="Audio;%Format%" "${video}") + video_codec=$(mediainfo --Inform="Video;%Format%" "${video}") + echo -e "${video} // ${video_codec} // ${audio_codec}" + 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 + 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:0 -map 0:a \ + -c:v hevc_vaapi -profile:v main10 \ + -c:a libopus -b:a 128k -vbr on -compression_level 10 -frame_duration 60 -application audio -mapping_family 1 -ac 2 \ + -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}" "/dev/shm/${_filename}-0.log" + fi + fi +done diff --git a/265_system b/265_system new file mode 100755 index 0000000..d683ef4 --- /dev/null +++ b/265_system @@ -0,0 +1,34 @@ +#!/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%.*}" + audio_codec=$(mediainfo --Inform="Audio;%Format%" "${video}") + video_codec=$(mediainfo --Inform="Video;%Format%" "${video}") + echo -e "${video} // ${video_codec} // ${audio_codec}" + 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 + 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 \ + -vf 'scale_vaapi=format=p010,scale_vaapi=w=1920:-2' \ + -c:v hevc_vaapi -profile:v main10 \ + -c:a libopus -b:a 128k -vbr on -compression_level 10 -frame_duration 60 -application audio -mapping_family 1 -ac 2 \ + -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/LICENSE b/LICENSE new file mode 100644 index 0000000..d449d3e --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice (including the next +paragraph) shall be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS +OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF +OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..ca2a28c --- /dev/null +++ b/README.md @@ -0,0 +1,10 @@ +# convert265 + +Script to convert media to x264 + +Edit the path for the find command in the normal one. + +To make it even more faster you'll want to run this kinda like this... + +parallel ./parallel_convert_265 . ::: $(find /mnt/ -maxdepth 25 -regex ".*\.\(mkv\|mp4\|wmv\|flv\|webm\|mov\|avi\|m4v\)") + diff --git a/Slayer Cooking.mp4 b/Slayer Cooking.mp4 new file mode 100644 index 0000000..7810d03 Binary files /dev/null and b/Slayer Cooking.mp4 differ diff --git a/season_posters b/season_posters new file mode 100755 index 0000000..f476dfe --- /dev/null +++ b/season_posters @@ -0,0 +1,22 @@ +#!/bin/bash +set -o pipefail +IFS=$'\n\t' + +# you want to do something like this +# for x in $(echo "*"); do cd /Muninn/TV/"${x}"; ~/convert265/season_posters; done +cp -aln poster.jpg Season\ */ +cp -al season01-poster.jpg Season\ 1/poster.jpg || cp -al poster.jpg Season\ 1/poster.jpg +cp -al season02-poster.jpg Season\ 2/poster.jpg || cp -al poster.jpg Season\ 2/poster.jpg +cp -al season03-poster.jpg Season\ 3/poster.jpg || cp -al poster.jpg Season\ 3/poster.jpg +cp -al season04-poster.jpg Season\ 4/poster.jpg || cp -al poster.jpg Season\ 4/poster.jpg +cp -al season05-poster.jpg Season\ 5/poster.jpg || cp -al poster.jpg Season\ 5/poster.jpg +cp -al season06-poster.jpg Season\ 6/poster.jpg || cp -al poster.jpg Season\ 6/poster.jpg +cp -al season07-poster.jpg Season\ 7/poster.jpg || cp -al poster.jpg Season\ 7/poster.jpg +cp -al season08-poster.jpg Season\ 8/poster.jpg || cp -al poster.jpg Season\ 8/poster.jpg +cp -al season09-poster.jpg Season\ 9/poster.jpg || cp -al poster.jpg Season\ 9/poster.jpg +cp -al season10-poster.jpg Season\ 10/poster.jpg || cp -al poster.jpg Season\ 10/poster.jpg +cp -al season10-poster.jpg Season\ 11/poster.jpg || cp -al poster.jpg Season\ 11/poster.jpg +cp -al season10-poster.jpg Season\ 12/poster.jpg || cp -al poster.jpg Season\ 12/poster.jpg +cp -al season10-poster.jpg Season\ 13/poster.jpg || cp -al poster.jpg Season\ 13/poster.jpg +cp -al season10-poster.jpg Season\ 14/poster.jpg || cp -al poster.jpg Season\ 14/poster.jpg +cp -al season10-poster.jpg Season\ 15/poster.jpg || cp -al poster.jpg Season\ 15/poster.jpg diff --git a/tools/ffmpeg b/tools/ffmpeg new file mode 100755 index 0000000..1c144a9 Binary files /dev/null and b/tools/ffmpeg differ