X-Git-Url: https://code.delx.au/transcoding/blobdiff_plain/b19913d3f4b2b9adf4e9ae2546d7de5ed3c6cfc8..59178cc821413a5092fc2eba784f83f8b4b59414:/fix-pal-speedup diff --git a/fix-pal-speedup b/fix-pal-speedup index b8cee2c..5b77d45 100755 --- a/fix-pal-speedup +++ b/fix-pal-speedup @@ -1,4 +1,4 @@ -#!/bin/bash -e +#!/bin/bash # Many DVDs released in Australia are sped up from 24fps to 25fps. # This script reverses the procedure, correcting the audio pitch. @@ -10,7 +10,7 @@ if [ -z "$1" -o -z "$2" ]; then exit 1 fi -set -xe +set -o pipefail -eux FORCEFPS="24" SLOWFILTER="-filter asetrate=46080,aresample=osr=48000:resampler=soxr" @@ -19,8 +19,25 @@ function mux_replace_audio { local audiofile="$2" local outfile="$3" - local trackid="$(mkvmerge -i "$infile" | grep 'Track ID.*video' | sed 's/^Track ID \(.\):.*$/\1/')" - mkvmerge -o "${outfile}" --default-duration "${trackid}:${FORCEFPS}fps" --no-audio "$infile" "$audiofile" + local audiodelay="$(get_minimum_timestamp "$infile" "audio")" + local videodelay="$(get_minimum_timestamp "$infile" "video")" + local videotrackid="$(get_track_id "$infile" "video")" + + mkvmerge \ + -o "${outfile}" \ + --default-duration "${videotrackid}:${FORCEFPS}fps" \ + --sync "${videotrackid}:$((videodelay / 1000000))" \ + --no-audio "$infile" \ + --sync "0:$((audiodelay / 1000000))" \ + "$audiofile" +} + +function get_track_id { + mkvmerge -i -F json "$1" | jq -r ".tracks[] | select(.type == \"$2\") | .id" +} + +function get_minimum_timestamp { + mkvmerge -F json -i "$1" | jq -r ".tracks[] | select(.type == \"$2\") | .properties.minimum_timestamp" } function encode_audio { @@ -37,8 +54,8 @@ function convert_file { local outfile="$2" local audiofile="${tmpdir}/audiofile.m4a" - encode_audio "${infile}" "${audiofile}" - mux_replace_audio "${infile}" "${audiofile}" "${outfile}" + encode_audio "$infile" "$audiofile" + mux_replace_audio "$infile" "$audiofile" "$outfile" }