This commmand will boost playback speed by 1.5x, without changing pitch (quite useful for lectures):
mplayer -speed 1.5 -af ladspa=tap_pitch:tap_pitch:0:-33:-90:0 foo.avi
This version will slow playback by half, again without affecting pitch. I find this helpful when learning guitar licks from video:
mplayer -speed 0.5 -af ladspa=tap_pitch:tap_pitch:0:100:-90:0 foo.avi
This requires the pitch shifter from Tom’s LADSPA Plugins (apt-get install tap-plugins).
Thanks. This works much better than -ao pcm | sox pitch.
The mplayer speed and the pitch shift can be set together with:
pitchshift=`awk “BEGIN { print (-12*log($speed)/log(2)); exit }”`
mplayer -speed $speed -af “ladspa=tap_pitch:tap_pitch:$pitchshift:0:-90:0” …
How do you go past 2.0x though? Specifing two -af’s doesn’t seem to chain them.
I think tap_pitch limits us to [2.0x … 0.5x] play speed. It also doesn’t sound quite as good as the pitch shifter in Windows Media Player.
I’m hunting for a better way.
Ah, -af chains with commas. So, you can get 2.5x playback with -speed 2.5 -af ladspa=tap_pitch:tap_pitch:-12.0:0:-90:0,ladspa=tap_pitch:tap_pitch:-3.863137:0:-90:0
Here’s a script for this: http://chkno.net/fastplay
Nice. Thanks, chkno.
Hi, I’ve been searching for a system like that for a long time now. Without the script, I can see a video at speed 1.5x with a pretty good sound quality. But I would want to read faster. I tried your script chkno and I get an error that says that it cannot allocate memory. Do you have any idea what should I do?
It seems to me that the script asks for too much memory. I have this message:
ensure_space: failed to validate 8589869056 bytes at 0x1000000000
8.5Go it’s a bit exagerated I think 🙂
Thank you in advance
( I should note that I am continuing to revise http://chkno.net/fastplay . The version that was current in the above post is now available at http://chkno.net/fastplay-ladspa . )
I finally have a version with sound quality I’m happy with. The key is to undo the fake rate shift of mplayer’s -speed before running it through any other filters.
Here’s a giant, tangled mess of perl thas uses sox -r to undo the -speed and then soundstretch from libsamplerate to change the tempo: http://chkno.net/fastplay-soundstretch1
soundstretch[1] has a -tempo option, so much of http://chkno.net/fastplay-soundstretch1 is unneeded.
The following should make a faster.wav which plays at 1.5x the original speed with the correct pitch:
mplayer foo.avi -ao pcm:file=tmp.wav
soundstretch tmp.wav faster.wav -tempo=50
Or as a script change-speed.sh:
#!/bin/bash
# ./change-speed 1.5 path/to/foo.mp3
# Will create a foo-1.5x.mp3 in the current directory
FIFOTMPS=`mktemp -d`
SPEED=$1
mkfifo $FIFOTMPS/in.wav $FIFOTMPS/out.wav
mplayer “$2” -ao pcm:file=$FIFOTMPS/in.wav &
soundstretch $FIFOTMPS/in.wav $FIFOTMPS/out.wav -naa -tempo=`awk “BEGIN { print 100 * ($SPEED – 1); exit }”` &
#lame $FIFOTMPS/out.wav `basename “$2” .mp3`-${SPEED}x.mp3
dd if=$FIFOTMPS/out.wav of=`basename “$2” .mp3`-${SPEED}x.wav
rm $FIFOTMPS/in.wav $FIFOTMPS/out.wav
rmdir $FIFOTMPS
[1] http://www.surina.net/soundtouch/
Thanks for trying, chkno, but your fastplay scripts cause mplayer to crash:
MPlayer interrupted by signal 13 in module: play_audio
– MPlayer crashed. This shouldn’t happen.
It can be a bug in the MPlayer code _or_ in your drivers _or_ in your
gcc version. If you think it’s MPlayer’s fault, please read
DOCS/HTML/en/bugreports.html and follow the instructions there. We can’t and
won’t help unless you provide this information when reporting a possible bug.
Mark, here is the error message after trying your hack. Yes, I have ladspa installed (via apt-get):
Couldn’t find audio filter ‘ladspa’
[libaf] Couldn’t create or open audio filter ‘ladspa’
Error at audio filter chain pre-init!
Exiting… (Fatal error)
I figured it out, Mark. Your instructions are incomplete (and in the wrong order).
1) Install LADSPA (on debian-based systems: apt-get install tap-plugins)
2) reconfigure, recompile, and re-install mplayer
3) mplayer -speed 1.5 -af ladspa=tap_pitch:tap_pitch:0:-33:-90:0 foo.avi
You can, of course skip steps 1 and 2 if you already have ladspa enabled into mplayer. If you have never read this blog before, but found it while searching for a way to watch any modern Sci-Fi show without falling asleep, and have never heard of ladspa, then you probably do not have it enabled.
How’s that?
The ladspa=tap_pitch techniques have poor audio quality.
Piping mplayer output through soundstretch has better audio quality, but poor audio-video sync.
For something with good audio quality and good a-v sync, see Robert Juliano’s af_scale patch: http://lists.mplayerhq.hu/pipermail/mplayer-dev-eng/2007-June/052368.html
I received the same error as WK and would like to follow the instructions he/she presented to solve the problem, but I do not know what commands I should execute to accomplish step 2: ‘reconfigure, recompile, and re-install mplayer’. If anyone could post suggestions on how I can do this or email them to me at powertothepenguins AT gmail DOT com, I would appreciate it very much. I am a Linux noob running Ubuntu 7.10 Gutsy Gibbon, so I don’t know how to do things like compile from source — so far, I’ve gotten by just using the Synaptic package manager. Sorry for the lack of experience here, but any help would be appreciated. Thanks!
Robert Juliano’s af_scale patch is now part of mplayer. Since release 1.0rc2, mplayer has pitch-correct playback at any speed built right in. Just add “-af scaletempo” to the command line and use the normal speed controls — -speed or [ and ] during playback.
“mplayer 0003.mpg -speed 0.5 -af ladspa=tap_pitch:tap_pitch:0:100:-90:0
…
Starting playback…”
But I don’t see a film. Only 100% cpu load
opensuse 10.3
WK, recompiling mplayer is not needed.
After apt-get install tap-plugins, “mplayer -speed 1.5 -af ladspa=/usr/lib/ladspa/tap_pitch.so:tap_pitch:0:-33:-90:0 file.mpg” works for me (on Debian etch).
If you find yourself having to use a whole path for tap_pitch.so instead of just “tap_pitch”, the problem is that the LADSPA_PATH variable isn’t set. Try adding the line “LADSPA_PATH=/usr/lib/ladspa” to your .bashrc
With more current versions of mplayer, the “scaletempo” filter automatically corrects for speed without needing any parameters (meaning you can use the brackets to alter tempo while music is playing and it figures it out immediately).
But, it screws the a/v sync — which I *think* is because some part of the machinery tells the video to play X times faster *when it should not*, since the audio is being scaled back to normal.
I’ve just dropped a note to Mr Juliano, who originally wrote the patch; I don’t know if it’s still in his domain, of whether he’d know a good spot to patch against it.
And here is the wackiest report of all:
If I use the Ascii-art video driver? It tracks the audio perfectly, no matter what I do to the … no, false alarm.
That test didn’t have -af scaletempo set; when I set it (=speed=pitch), it also falls out of sync.
Nevermind.