From: James Bunton Date: Wed, 1 Jul 2015 13:34:50 +0000 (+1000) Subject: Rewrote fix-pal-speedup, now it streams X-Git-Url: https://code.delx.au/transcoding/commitdiff_plain/7ecd7f083d4f008ee69ee4b885f0ab88fe24da20 Rewrote fix-pal-speedup, now it streams --- diff --git a/fix-pal-speedup b/fix-pal-speedup index 85e7d1e..a0a797c 100755 --- a/fix-pal-speedup +++ b/fix-pal-speedup @@ -2,8 +2,8 @@ # Many DVDs released in Australia are sped up from 24fps to 25fps. # This script reverses the procedure, correcting the audio pitch. -# The video framerate is adjusted without re-encoding. The audio is slowed and -# volume normalised then re-encoded as mp3. +# The video framerate is adjusted without re-encoding. The audio is +# slowed, volume normalised, down-mixed to stereo and encoded as mp3. if [ -z "$1" -o -z "$2" ]; then echo "Usage: $0 destdir infile [infile ...]" @@ -13,6 +13,58 @@ fi FORCEFPS="24" SLOWDOWN="0.96" +function mux_replace_audio { + infile="$1" + audiofile="$2" + outfile="$3" + + set -x + trackid="$(mkvmerge -i "$infile" | grep video | sed 's/^Track ID \(.\):.*$/\1/')" + mkvmerge -o "${outfile}" --default-duration "${trackid}:${FORCEFPS}fps" --no-audio "$infile" "$audiofile" +} + +function extract_audio { + infile="$1" + + mpv \ + --no-terminal \ + --no-video \ + --ao pcm:waveheader:file=/dev/stdout \ + "$infile" +} + +function slow_audio { + sox \ + --temp "$tmpdir" \ + /dev/stdin \ + -t wav /dev/stdout \ + speed "${SLOWDOWN}" \ + gain -n \ + channels 2 +} + +function encode_audio { + outfile="$1" + lame \ + --preset standard \ + /dev/stdin \ + "${outfile}" +} + +function convert_file { + set -xe + infile="$1" + outfile="$2" + tmpdir="$(mktemp -d "${TMPDIR:-/var/tmp}/pal-XXXXXXXX")" + audiofile="${tmpdir}/audio.mp3" + + extract_audio "${infile}" | slow_audio | encode_audio "${audiofile}" + mux_replace_audio "${infile}" "${audiofile}" "${outfile}" + + rm -rf "$tmpdir" +} + + destdir="$1" shift @@ -24,14 +76,6 @@ for infile in "$@"; do continue fi - set -x - tmpdir="$(mktemp -d "${TMPDIR:-/var/tmp}/pal-XXXXXXXX")" - mplayer -novideo -ao pcm:file="${tmpdir}/audio.wav" -vo null "$infile" - sox "${tmpdir}/audio.wav" "${tmpdir}/audio-fixed.wav" speed "${SLOWDOWN}" gain -n - lame --preset standard "${tmpdir}/audio-fixed.wav" "${tmpdir}/audio.mp3" - trackid="$(mkvmerge -i "$infile" | grep video | sed 's/^Track ID \(.\):.*$/\1/')" - mkvmerge -o "${outfile}" --default-duration "${trackid}:${FORCEFPS}fps" --no-audio "$infile" "${tmpdir}/audio.mp3" - - rm -rf "$tmpdir" + convert_file "$infile" "$outfile" done