mirror of
https://github.com/lrenaud/burnSubs.git
synced 2025-06-17 12:53:01 -07:00
v0.10.0
This commit is contained in:
parent
91e6fa0451
commit
0b604be35a
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