v0.10.0
This commit is contained in:
		
							parent
							
								
									e5b5ea6f80
								
							
						
					
					
						commit
						89fdfc7e78
					
				
					 1 changed files with 32 additions and 3 deletions
				
			
		
							
								
								
									
										35
									
								
								burnSubs
									
										
									
									
									
								
							
							
						
						
									
										35
									
								
								burnSubs
									
										
									
									
									
								
							| 
						 | 
					@ -5,13 +5,16 @@ set -o errexit
 | 
				
			||||||
 | 
					
 | 
				
			||||||
################################################################################
 | 
					################################################################################
 | 
				
			||||||
# burnSubs
 | 
					# burnSubs
 | 
				
			||||||
# version 0.9.2
 | 
					# version 0.10.0
 | 
				
			||||||
#################3
 | 
					#################3
 | 
				
			||||||
# Wishlist:
 | 
					# Wishlist:
 | 
				
			||||||
#   queue encodes
 | 
					#   queue encodes
 | 
				
			||||||
#   finish TODOs
 | 
					#   finish TODOs
 | 
				
			||||||
#	finish help flag
 | 
					#	finish help flag
 | 
				
			||||||
#	audio recode flag
 | 
					#	audio recode flag
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Changes
 | 
				
			||||||
 | 
					#   automatically select JPN audio if more than one audio channel found.
 | 
				
			||||||
################################################################################
 | 
					################################################################################
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function machineSetup() {
 | 
					function machineSetup() {
 | 
				
			||||||
| 
						 | 
					@ -281,6 +284,7 @@ function parseStreams() {
 | 
				
			||||||
	# 
 | 
						# 
 | 
				
			||||||
	STREAMS_ALL="${TMP}/streams.json"
 | 
						STREAMS_ALL="${TMP}/streams.json"
 | 
				
			||||||
	export STREAMS_SUB="${TMP}/subs.json"
 | 
						export STREAMS_SUB="${TMP}/subs.json"
 | 
				
			||||||
 | 
						export STREAMS_AUDIO="${TMP}/audio.json"
 | 
				
			||||||
	"$FFPROBE" -v error -of json -show_streams "${INPUT_VIDEO}" 2>/dev/null > "${STREAMS_ALL}"
 | 
						"$FFPROBE" -v error -of json -show_streams "${INPUT_VIDEO}" 2>/dev/null > "${STREAMS_ALL}"
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	# Extract subtitles
 | 
						# Extract subtitles
 | 
				
			||||||
| 
						 | 
					@ -288,6 +292,10 @@ function parseStreams() {
 | 
				
			||||||
	# shellcheck disable=SC2016
 | 
						# shellcheck disable=SC2016
 | 
				
			||||||
	"$JQ" 'reduce .streams[] as $item ([]; if ($item.codec_name == "ass") then [.[],$item] else . end) | reduce .[] as $item ([]; [.[],{t:($item.tags.title),i:($item.index),lang:$item.tags.language, disposition:$item.disposition}]) | reduce .[] as $item ([]; [.[],{t:($item.t // ($item.lang + "-" + ($item.i | tostring))),i:$item.i,lang:$item.lang,disposition:$item.disposition}])' "${STREAMS_ALL}" > "${STREAMS_SUB}"
 | 
						"$JQ" 'reduce .streams[] as $item ([]; if ($item.codec_name == "ass") then [.[],$item] else . end) | reduce .[] as $item ([]; [.[],{t:($item.tags.title),i:($item.index),lang:$item.tags.language, disposition:$item.disposition}]) | reduce .[] as $item ([]; [.[],{t:($item.t // ($item.lang + "-" + ($item.i | tostring))),i:$item.i,lang:$item.lang,disposition:$item.disposition}])' "${STREAMS_ALL}" > "${STREAMS_SUB}"
 | 
				
			||||||
	export SUB_COUNT=$("$JQ" 'length' "${STREAMS_SUB}")
 | 
						export SUB_COUNT=$("$JQ" 'length' "${STREAMS_SUB}")
 | 
				
			||||||
 | 
						# shellcheck disable=SC2016
 | 
				
			||||||
 | 
						"$JQ" 'reduce .streams[] as $item ([]; if ($item.codec_type == "audio") then [.[],$item] else . end) | reduce .[] as $item ([]; [.[],{t:($item.tags.title),i:($item.index),lang:$item.tags.language, disposition:$item.disposition}]) | reduce .[] as $item ([]; [.[],{t:($item.t // ($item.lang + "-" + ($item.i | tostring))),i:$item.i,lang:$item.lang,disposition:$item.disposition}])' "${STREAMS_ALL}" > "${STREAMS_AUDIO}"
 | 
				
			||||||
 | 
						export AUDIO_COUNT=$("$JQ" 'length' "${STREAMS_SUB}")
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -340,6 +348,24 @@ function selectSubs() {
 | 
				
			||||||
		SUBTITLE_NAME=$($JQ '.['$SUBTITLE_ARRAY_INDEX'].t' "$STREAMS_SUB")
 | 
							SUBTITLE_NAME=$($JQ '.['$SUBTITLE_ARRAY_INDEX'].t' "$STREAMS_SUB")
 | 
				
			||||||
		echo "   > subtitles: [${SUBTITLE_INDEX}] ${SUBTITLE_NAME}"
 | 
							echo "   > subtitles: [${SUBTITLE_INDEX}] ${SUBTITLE_NAME}"
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						if [[ $AUDIO_COUNT -gt 1 ]]; then
 | 
				
			||||||
 | 
							LANG_TEST=$($JQ '[.[].lang] | index("jpn")' "$STREAMS_AUDIO")
 | 
				
			||||||
 | 
							echo "   > WARNING: Multiple audio streams!"
 | 
				
			||||||
 | 
							printf "       Using default selection rules... "
 | 
				
			||||||
 | 
							if [[ "$LANG_TEST" == "null" ]]; then
 | 
				
			||||||
 | 
								echo "Japanese audio not found!"
 | 
				
			||||||
 | 
								echo "    ==> Reverting to first subtitle file."
 | 
				
			||||||
 | 
								export AUDIO_INDEX=$($JQ '.[0].i' "$STREAMS_AUDIO")
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
								# we found english
 | 
				
			||||||
 | 
								echo "Japanese audio found"
 | 
				
			||||||
 | 
								export AUDIO_INDEX=$($JQ '.['$LANG_TEST'].i' "$STREAMS_AUDIO")
 | 
				
			||||||
 | 
							fi
 | 
				
			||||||
 | 
							export FF_AUDIO="-map 0:$AUDIO_INDEX -map 0:v:0"
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							export FF_AUDIO=""
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -362,7 +388,7 @@ function doTranscode() {
 | 
				
			||||||
	# shellcheck disable=SC2086
 | 
						# shellcheck disable=SC2086
 | 
				
			||||||
	echo "$FFMPEG" ${FF_HW} -i "${INPUT_VIDEO}" -sn ${LIM_TIME} \
 | 
						echo "$FFMPEG" ${FF_HW} -i "${INPUT_VIDEO}" -sn ${LIM_TIME} \
 | 
				
			||||||
		-filter:v "${FILT_PFX}ass=${SUBTITLE_FILE}${FILT_SFX}" \
 | 
							-filter:v "${FILT_PFX}ass=${SUBTITLE_FILE}${FILT_SFX}" \
 | 
				
			||||||
		${FILT_AUDIO} -c:v "${FF_ENC}" ${FF_STD} ${FF_EXT}	\
 | 
							${FILT_AUDIO} -c:v "${FF_ENC}" ${FF_STD} ${FF_EXT} ${FF_AUDIO}	\
 | 
				
			||||||
		"${OUTPUT_VIDEO}"
 | 
							"${OUTPUT_VIDEO}"
 | 
				
			||||||
	if [[ "$OPTS_DRYRUN" == true ]]; then
 | 
						if [[ "$OPTS_DRYRUN" == true ]]; then
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
| 
						 | 
					@ -370,7 +396,7 @@ function doTranscode() {
 | 
				
			||||||
	# shellcheck disable=SC2086
 | 
						# shellcheck disable=SC2086
 | 
				
			||||||
	"$FFMPEG" ${FF_HW} -i "${INPUT_VIDEO}" -sn ${LIM_TIME} \
 | 
						"$FFMPEG" ${FF_HW} -i "${INPUT_VIDEO}" -sn ${LIM_TIME} \
 | 
				
			||||||
		-filter:v "${FILT_PFX}ass=${SUBTITLE_FILE}${FILT_SFX}" \
 | 
							-filter:v "${FILT_PFX}ass=${SUBTITLE_FILE}${FILT_SFX}" \
 | 
				
			||||||
		${FILT_AUDIO} -c:v "${FF_ENC}" ${FF_STD} ${FF_EXT}	\
 | 
							${FILT_AUDIO} -c:v "${FF_ENC}" ${FF_STD} ${FF_EXT} ${FF_AUDIO}	\
 | 
				
			||||||
		"${OUTPUT_VIDEO}"
 | 
							"${OUTPUT_VIDEO}"
 | 
				
			||||||
	export FINAL_STATUS=$?
 | 
						export FINAL_STATUS=$?
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -426,6 +452,7 @@ OPTS_DRYRUN=false
 | 
				
			||||||
OPTS_DEBUG=false
 | 
					OPTS_DEBUG=false
 | 
				
			||||||
OPTS_LPF_AUDIO=false
 | 
					OPTS_LPF_AUDIO=false
 | 
				
			||||||
OPTS_TRANS_AUDIO=false
 | 
					OPTS_TRANS_AUDIO=false
 | 
				
			||||||
 | 
					OPTS_derived_NO_OUTPUT=false
 | 
				
			||||||
unset OPT_CRF
 | 
					unset OPT_CRF
 | 
				
			||||||
# this is the --icon flag passed to notify-send at the end of the transcode
 | 
					# this is the --icon flag passed to notify-send at the end of the transcode
 | 
				
			||||||
NOTIFY_ICON="face-tired"
 | 
					NOTIFY_ICON="face-tired"
 | 
				
			||||||
| 
						 | 
					@ -465,6 +492,7 @@ while true; do
 | 
				
			||||||
		;;
 | 
							;;
 | 
				
			||||||
		"-l")
 | 
							"-l")
 | 
				
			||||||
			OPTS_LISTSUBS=true
 | 
								OPTS_LISTSUBS=true
 | 
				
			||||||
 | 
								OPTS_derived_NO_OUTPUT=true
 | 
				
			||||||
			echo ">> !! list subtitles and exit"
 | 
								echo ">> !! list subtitles and exit"
 | 
				
			||||||
			shift
 | 
								shift
 | 
				
			||||||
			continue
 | 
								continue
 | 
				
			||||||
| 
						 | 
					@ -591,6 +619,7 @@ if [[ "$OPTS_LISTSUBS" == "true" ]]; then
 | 
				
			||||||
	exit	
 | 
						exit	
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
# ask the user for the subtitle file if more than one is available
 | 
					# ask the user for the subtitle file if more than one is available
 | 
				
			||||||
 | 
					# Also selects audio stream.
 | 
				
			||||||
selectSubs
 | 
					selectSubs
 | 
				
			||||||
# extract the selected subtitle file
 | 
					# extract the selected subtitle file
 | 
				
			||||||
extractSubs $SUBTITLE_INDEX
 | 
					extractSubs $SUBTITLE_INDEX
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue