|
@ -12,42 +12,65 @@ |
|
|
FFBIN="/usr/bin/" #if unusual install or a specific version |
|
|
FFBIN="/usr/bin/" #if unusual install or a specific version |
|
|
HostName="localhost" #if localhost then will do locally (removes ssh/scp cmds) |
|
|
HostName="localhost" #if localhost then will do locally (removes ssh/scp cmds) |
|
|
hostFile="/tmp/transcode/list.txt" |
|
|
hostFile="/tmp/transcode/list.txt" |
|
|
tmpDIR="$PWD/tmpTranscode" |
|
|
|
|
|
workDIR="$PWD/transcode" |
|
|
workDIR="$PWD/transcode" |
|
|
|
|
|
tmpDIR="$PWD/tmpTranscode" |
|
|
|
|
|
|
|
|
#DEFINE FUNCTIONS |
|
|
#DEFINE FUNCTIONS |
|
|
function encode { |
|
|
function encode { |
|
|
local tmpFL=$1 |
|
|
|
|
|
|
|
|
local inFL=$1 |
|
|
local outFL=$2 |
|
|
local outFL=$2 |
|
|
$FFBIN/ffmpeg -hide_banner -loglevel error -stats -re -i "$tmpFL" -map 0 \ |
|
|
|
|
|
-map_metadata 0 -c copy \ |
|
|
|
|
|
-c:v libsvtav1 -crf 28 -g 240 -preset 6 -svtav1-params \ |
|
|
|
|
|
"enable-overlays=1:\ |
|
|
|
|
|
tune=0" \ |
|
|
|
|
|
-use_wallclock_as_timestamps 1 \ |
|
|
|
|
|
-map_chapters 0 -max_muxing_queue_size 9999 -y "$outFL" |
|
|
|
|
|
|
|
|
local burn=$3 |
|
|
|
|
|
|
|
|
|
|
|
if [ $burn -gt -1 ] |
|
|
|
|
|
then |
|
|
|
|
|
inline="-i "$tmpDIR/dummy.mkv"" |
|
|
|
|
|
vidline="-map 1:v:0" |
|
|
|
|
|
subline="-map -0:s:$burn" |
|
|
|
|
|
else |
|
|
|
|
|
unset inline |
|
|
|
|
|
vidline="-map 0:v:0" |
|
|
|
|
|
unset subline |
|
|
|
|
|
fi |
|
|
|
|
|
|
|
|
|
|
|
$FFBIN/ffmpeg -hide_banner -loglevel error -stats \ |
|
|
|
|
|
-i "$inFL" $inline \ |
|
|
|
|
|
-map_metadata 0 \ |
|
|
|
|
|
$vidline \ |
|
|
|
|
|
-c:v libsvtav1 -crf 28 -preset 4 -pix_fmt yuv420p10le \ |
|
|
|
|
|
-svtav1-params \ |
|
|
|
|
|
"enable-overlays=1:\ |
|
|
|
|
|
tune=0:\ |
|
|
|
|
|
keyint=7s" \ |
|
|
|
|
|
-map 0:a? -acodec aac \ |
|
|
|
|
|
-map 0:s? -scodec copy $subline \ |
|
|
|
|
|
-use_wallclock_as_timestamps 1 -max_interleave_delta 0 \ |
|
|
|
|
|
-map_chapters 0 -max_muxing_queue_size 9999 -y "$outFL" |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
function burnSubs { |
|
|
function burnSubs { |
|
|
local inFL=$1 |
|
|
local inFL=$1 |
|
|
local tmpFL=$2 |
|
|
|
|
|
local outFL=$3 |
|
|
|
|
|
local track=$4 |
|
|
|
|
|
|
|
|
local outFL=$2 |
|
|
|
|
|
local track=$3 |
|
|
|
|
|
|
|
|
#EVIDTNELY NECESSARY SO THAT FILES AREN'T 198+ HRS IN LEN. AT THE END |
|
|
#EVIDTNELY NECESSARY SO THAT FILES AREN'T 198+ HRS IN LEN. AT THE END |
|
|
local DURATION=$( $FFBIN/ffprobe -loglevel error -show_entries format=duration \ |
|
|
local DURATION=$( $FFBIN/ffprobe -loglevel error -show_entries format=duration \ |
|
|
-of default=noprint_wrappers=1:nokey=1 "$inFL" ) |
|
|
-of default=noprint_wrappers=1:nokey=1 "$inFL" ) |
|
|
|
|
|
|
|
|
$FFBIN/ffmpeg -hide_banner -loglevel error -stats -i "$inFL" \ |
|
|
|
|
|
-filter_complex "[0:v][0:s:$track]overlay[v]" -map "[v]" \ |
|
|
|
|
|
-filter_complex_threads 1 \ |
|
|
|
|
|
-map 0:a -c:a copy -map 0:s -map -0:s:$track -c:s copy \ |
|
|
|
|
|
-map_metadata 0 -map_chapters 0 -max_muxing_queue_size 4096 \ |
|
|
|
|
|
-t $DURATION -threads 1 -y "$tmpFL" |
|
|
|
|
|
|
|
|
|
|
|
rm "$inFL" #SAVE SPACE |
|
|
|
|
|
|
|
|
$FFBIN/ffmpeg -hide_banner -stats -i "$inFL" \ |
|
|
|
|
|
-map_metadata -1 \ |
|
|
|
|
|
-filter_complex "[0:v][0:s:$track]overlay[v]" -map "[v]" \ |
|
|
|
|
|
-filter_complex_threads 1 \ |
|
|
|
|
|
-an -sn \ |
|
|
|
|
|
-max_muxing_queue_size 4096 \ |
|
|
|
|
|
-t $DURATION -y "$tmpDIR/dummy.mkv" |
|
|
|
|
|
|
|
|
encode "$tmpFL" "$outFL" |
|
|
|
|
|
|
|
|
if ! [ $? -eq 0 ] |
|
|
|
|
|
then |
|
|
|
|
|
echo "Sub Burn Failed" |
|
|
|
|
|
return 10 |
|
|
|
|
|
else |
|
|
|
|
|
encode "$inFL" "$outFL" $track |
|
|
|
|
|
fi |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
#MAIN FUNCTION BEGINS |
|
|
#MAIN FUNCTION BEGINS |
|
@ -137,7 +160,7 @@ do |
|
|
then |
|
|
then |
|
|
#ONLY ONE ENG. SUB TRACK |
|
|
#ONLY ONE ENG. SUB TRACK |
|
|
echo "ONE ENG. SUB TRACK" |
|
|
echo "ONE ENG. SUB TRACK" |
|
|
encode "$tmpDIR/$fileNAME" "$workDIR/$fileNAME" |
|
|
|
|
|
|
|
|
encode "$tmpDIR/$fileNAME" "$workDIR/$fileNAME" -1 |
|
|
else |
|
|
else |
|
|
#TEST SUBTITLE TYPE; IF NOT PGS SKIP IT; FEEL FREE TO FILL IN |
|
|
#TEST SUBTITLE TYPE; IF NOT PGS SKIP IT; FEEL FREE TO FILL IN |
|
|
if grep -qi "pgs" <<< $( $FFBIN/ffprobe -loglevel error -select_streams s \ |
|
|
if grep -qi "pgs" <<< $( $FFBIN/ffprobe -loglevel error -select_streams s \ |
|
@ -190,10 +213,10 @@ do |
|
|
if [ $( echo "($currFrames / $maxFrames) < 0.25"|bc -l ) -gt 0 ] |
|
|
if [ $( echo "($currFrames / $maxFrames) < 0.25"|bc -l ) -gt 0 ] |
|
|
then |
|
|
then |
|
|
echo "BURNING STREAM $SUBTITLEINDEX (STREAM $minINDEX) from $fileNAME" |
|
|
echo "BURNING STREAM $SUBTITLEINDEX (STREAM $minINDEX) from $fileNAME" |
|
|
burnSubs "$tmpDIR/$fileNAME" "$tmpDIR/TMP$fileNAME" "$workDIR/$fileNAME" $SUBTITLEINDEX |
|
|
|
|
|
|
|
|
burnSubs "$tmpDIR/$fileNAME" "$workDIR/$fileNAME" $SUBTITLEINDEX |
|
|
else |
|
|
else |
|
|
echo "MIN. SUB TRACK ($SUBTITLEINDEX [$minINDEX])) DUR. > 25% FILM, NOT BURNING" |
|
|
echo "MIN. SUB TRACK ($SUBTITLEINDEX [$minINDEX])) DUR. > 25% FILM, NOT BURNING" |
|
|
encode "$tmpDIR/$fileNAME" "$workDIR/$fileNAME" |
|
|
|
|
|
|
|
|
encode "$tmpDIR/$fileNAME" "$workDIR/$fileNAME" -1 |
|
|
fi |
|
|
fi |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -203,12 +226,12 @@ do |
|
|
#I'm actually kinda missing a good example; I'm sure they're in there |
|
|
#I'm actually kinda missing a good example; I'm sure they're in there |
|
|
#but I don't know which ones they are lol; lmk if you know one. |
|
|
#but I don't know which ones they are lol; lmk if you know one. |
|
|
echo "NOT A PGS SUBTITLE TYPE; PASSING ALL THROUGH, FUTURE DEV." |
|
|
echo "NOT A PGS SUBTITLE TYPE; PASSING ALL THROUGH, FUTURE DEV." |
|
|
encode "$tmpDIR/$fileNAME" "$workDIR/$fileNAME" |
|
|
|
|
|
|
|
|
encode "$tmpDIR/$fileNAME" "$workDIR/$fileNAME" -1 |
|
|
fi |
|
|
fi |
|
|
fi |
|
|
fi |
|
|
else |
|
|
else |
|
|
#ONE OR FEWER SUB TRACKS |
|
|
#ONE OR FEWER SUB TRACKS |
|
|
encode "$tmpDIR/$fileNAME" "$workDIR/$fileNAME" |
|
|
|
|
|
|
|
|
encode "$tmpDIR/$fileNAME" "$workDIR/$fileNAME" -1 |
|
|
fi |
|
|
fi |
|
|
|
|
|
|
|
|
if [ $? != 0 ] || [ $( stat -c%s "$workDIR/$fileNAME" ) -eq 0 ] |
|
|
if [ $? != 0 ] || [ $( stat -c%s "$workDIR/$fileNAME" ) -eq 0 ] |
|
@ -261,11 +284,11 @@ do |
|
|
if ls "$tmpDIR"/"$fileNAME" |
|
|
if ls "$tmpDIR"/"$fileNAME" |
|
|
then |
|
|
then |
|
|
rm "$tmpDIR"/"$fileNAME" |
|
|
rm "$tmpDIR"/"$fileNAME" |
|
|
elif ls "$tmpDIR"/"TMP$fileNAME" |
|
|
|
|
|
|
|
|
elif ls "$tmpDIR"/"dummy.mkv" |
|
|
then |
|
|
then |
|
|
rm "$tmpDIR"/"TMP$fileNAME" |
|
|
|
|
|
|
|
|
rm "$tmpDIR"/"dummy.mkv" |
|
|
else |
|
|
else |
|
|
echo "Already removed $tmpDIR/$fileNAME?" |
|
|
|
|
|
|
|
|
echo "Already removed temp. file(s)" |
|
|
fi |
|
|
fi |
|
|
|
|
|
|
|
|
else |
|
|
else |
|
|