From 41cbb42a889b237f81be8d2289dd45d3bc978acb Mon Sep 17 00:00:00 2001 From: Levon Gevorgyan Date: Fri, 30 Jan 2026 08:57:28 -0600 Subject: [PATCH] fix broken PGS by using mkvmerge --- lib/encode.sh | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/lib/encode.sh b/lib/encode.sh index 9cd00d2..df3bab3 100644 --- a/lib/encode.sh +++ b/lib/encode.sh @@ -299,11 +299,13 @@ set_encode_opts() { return 1 fi - echo - echo_info "INPUT: ${INPUT}" - echo_info "GRAIN: ${GRAIN}" - echo_info "OUTPUT: ${OUTPUT}" - echo + if [[ ${PRINT_OUT} == false ]]; then + echo + echo_info "INPUT: ${INPUT}" + echo_info "GRAIN: ${GRAIN}" + echo_info "OUTPUT: ${OUTPUT}" + echo + fi } # shellcheck disable=SC2034 @@ -449,11 +451,24 @@ gen_encode_script() { echo 'ffmpeg "${ffmpegParams[@]}" -dolbyvision 0 "${OUTPUT}" || exit 1' # track-stats and clear title - if [[ ${FILE_EXT} == 'mkv' ]] && has_cmd mkvpropedit; then + if [[ ${FILE_EXT} == 'mkv' ]] && has_cmd mkvmerge && has_cmd mkvpropedit; then { + # ffmpeg does not reliably copy PGS subtitles without breaking + # them when cropped, so just use mkvmerge to make sure they get + # copied correctly + local muxxed='"${OUTPUT}.muxxed"' + local mergeCmd=( + mkvmerge + -o "${muxxed}" + --no-subtitles '"${OUTPUT}"' + --no-video --no-audio --no-chapters + --no-global-tags --subtitle-tracks eng '"${INPUT}"' + ) echo - echo 'mkvpropedit "${OUTPUT}" --add-track-statistics-tags' - echo 'mkvpropedit "${OUTPUT}" --edit info --set "title="' + echo "${mergeCmd[*]} || exit 1" + echo "mv ${muxxed}" '"${OUTPUT}" || exit 1' + echo 'mkvpropedit "${OUTPUT}" --add-track-statistics-tags || exit 1' + echo 'mkvpropedit "${OUTPUT}" --edit info --set "title=" || exit 1' } fi @@ -461,7 +476,7 @@ gen_encode_script() { } >"${genScript}" if [[ ${PRINT_OUT} == true ]]; then - echo_info "${genScript} contents:" + echo_info "${genScript} contents:" 1>&2 echo "$(<"${genScript}")" else bash -x "${genScript}" || return 1