mirror of
https://github.com/mpv-player/mpv
synced 2025-03-05 21:57:39 +00:00
Main things added are custom frame dropping for VDPAU to work around the display FPS limit, frame timing adjustment to avoid jitter when video frame times keep falling near vsyncs, and use of VDPAU's timing feature to keep one future frame queued in advance. NVIDIA's VDPAU implementation refuses to change the displayed frame more than once per vsync. This set a limit on how much video could be sped up, and caused problems for nearly all videos on low-FPS video projectors (playing 24 FPS video on a 24 FPS projector would not work reliably as MPlayer may need to slightly speed up the video for AV sync). This commit adds a framedrop mechanism that drops some frames so that no more than one is sent for display per vsync. The code tries to select the dropped frames smartly, selecting the best one to show for each vsync. Because of the timing features needed the drop functionality currently does not work if the correct-pts option is disabled. The code also adjusts frame timing slightly to avoid jitter. If you for example play 24 FPS video content on a 72 FPS display then normally a frame would be shown for 3 vsyncs, but if the frame times happen to fall near vsyncs and change between just before and just after then there could be frames alternating between 2 and 4 vsyncs. The code changes frame timing by up to one quarter vsync interval to avoid this. The above functionality depends on having reliable vsync timing information available. The display refresh rate is not directly provided by the VDPAU API. The current code uses information from the XF86VidMode extension if available; I'm not sure how common cases where that is inaccurate are. The refresh rate can be specified manually if necessary. After the changes in this commit MPlayer now always tries to keep one frame queued for future display using VDPAU's internal timing mechanism (however no more than 50 ms to the future). This should make video playback somewhat more robust against timing inaccuracies caused by system load. |
||
---|---|---|
.. | ||
realcodecs | ||
aconvert.sh | ||
alaw-gen.c | ||
asfinfo.c | ||
avi-fix.c | ||
avisubdump.c | ||
binary_codecs.sh | ||
bmovl-test.c | ||
calcbpp.pl | ||
checktree.sh | ||
compare.c | ||
countquant.pl | ||
divx2svcd.sh | ||
dump_mp4.c | ||
dvd2divxscript.pl | ||
edgedetect.fp | ||
edgeenh.fp | ||
emboss.fp | ||
fastmemcpybench.c | ||
mencvcd.sh | ||
midentify.sh | ||
modify_reg.c | ||
movinfo.c | ||
mpconsole.sh | ||
mphelp_check.py | ||
mplmult.sh | ||
netstream.c | ||
plotpsnr.pl | ||
psnr-video.sh | ||
qepdvcd.sh | ||
README | ||
subedit.pl | ||
subrip.c | ||
subsearch.sh | ||
vdpau_functions.py | ||
vfw2menc.c | ||
vivodump.c | ||
vobshift.py | ||
w32codec_dl.pl | ||
wma2ogg.pl |
README for the TOOLS directory ============================== Preamble -------- In this directory you can find some nice scripts and code that makes using MPlayer and MEncoder easier, for example scripts for DVD track encoding in three pass mode or creating SVCDs from a movie. FIXME: Document the following tools: bmovl-test MPlayer scripts in the TOOLS dir -------------------------------- edgedetect.fp, emboss.fp Author: Reimar Döffinger Description: Examples of custom fragment program for OpenGL video out driver Usage: mplayer -vo gl:yuv=4:customprog=edgedetect.fp midentify.sh Author: Tobias Diedrich Description: Runs 'mplayer -identify' for all arguments while preventing video window flashing. Usage: midentify.sh file1 [file2 ...] mpconsole.sh Author: Rich Felker Description: Script to run MPlayer on the console (fbdev/mga_vid/etc.) without the console text and/or flashing cursor getting in the way. Usage: mpconsole.sh [mplayer options] mplmult.sh Author: Reimar Döffinger Description: Example how to output video on multiple windows in sync. Might be even more useful in combination with -vo ggi to distribute the video arbitrarily. Usage: mplmult.sh <n> <options> n Number of MPlayer instances that display the video. options Any options you would pass to MPlayer, more than one file will usually not work. subsearch.sh Author: Alex Beregszaszi Description: Collects subtitle files from the directory given as argument ('.' if none is given) and its subdirectories and prints them as a comma separated list to stdout. Usage: subsearch.sh [directory] mplayer -sub `subsearch.sh` movie wma2ogg.pl Author: Peter Simon Description: Converts WMA files to Ogg or MP3. Usage: wma2ogg [options] <-f FILE1 | -f FILE2 ... | -a> -f, -file filename -a converts all WMA files in the current directory -t output filetype (ogg, mp3) [default=ogg] -lame I wanna use L.A.M.E. sure enough! -br bitrate (kb/s) [default=from the WMA] -del remove WMA file(s) after the transcoding MEncoder scripts in the TOOLS dir --------------------------------- divx2svcd.sh Author: Miklos Vajna Description: A simple utility that creates an SVCD from a video in an AVI container. Usage: divx2svcd.sh <input_avi> [options] see 'divx2svcd.sh -h' for more info mencvcd.sh Author: Jürgen Hammelmann Description: Converts DVD (or anything else that MPlayer plays) to (S)VCD Usage: mencvcd.sh <basename> [mencvcd.sh options] [mplayer options] see 'mencvcd.sh -h' for more info Note: Requires MPlayer, mjpegtools, VCDImager, cdrdao, and optionally LAME, tooLAME and SoX. dvd2divxscript.pl Author: Florian Schilhabel Description: Yet another DVD to divx helper script. This script encodes a DVD track in three pass mode to MPEG-4 with libavcodec. Optionally it writes the resulting movie file to CD-ROM the corresponding audio track to MP3. It can also shut down the computer when it finishes. If you like, you can watch the MEncoder output on /dev/tty8. Usage: --help show help --abr (AudioBitRate) Please enter the desired bitrate this can be either [96|128|192] kbit/sec (default: 128). --lang Specify the Language of the audio track this can be for example <en> or <de> (default: <de>). --dvd Specify the DVD track you want to encode. --cdsize Specify the size of your CD-ROM (default: 700MB). --shutdown Shutdown the system, when the encoding process has finished. Needs appropriate privileges. --out Specify the name of your encoded movie. The file extension will be appended automatically. --writecd Takes the newly created movie and writes it to a CD-ROM. --writedev cdrecord device identifier, for example 0,1,0 --speed writing speed (default: 4) --dvd-device device to pull the video off (default: /dev/dvd) aconvert.sh Author: Jonas Jermann Description: A hack to allow MEncoder to read respectively encode from audio only files. Usage: aconvert.sh <"input file"> <"output file"> <"options"> If no options are specified the following is assumed: -oac lavc -lavcopts acodec=mp3:abitrate=192 Note: The script is probably bash dependent and it's just a quick hack, feel free to improve it (or much better: fix MEncoder ;). qepdvcd.sh Author: Reynaldo H. Verdejo Pinochet Description: converter from any supported format to VCD/SVCD PAL/NTSC Usage: qepdvcd.sh file <options> Run with no arguments to see the list of options. Note: You will need vcdimager/cdrecord to master/burn the resulting files. Tech scripts in the TOOLS dir ----------------------------- calcbpp.pl Author: Moritz Bunkus Description: A script that calculates the $bpp for a movie, mentioned in DOCS/tech/encoding-tips.txt, see that document for more info. Usage: calcbpp.pl <resolution> <aspect ratio> <bitrate> <fps> resolution: the cropped but unscaled resolution (use '-vf cropdetect') aspect ratio: the encoded aspect ratio. All DVDs come at 720x576 but contain a flag that tells the player wether it should display the DVD at an aspect ratio of 4/3 (1.333) or at 16/9 (1.777). Have a look at MPlayer's output - there's something about 'prescaling'. That's what you are looking for. bitrate: the video bitrate in kbit/s fps: the fps example: calcbpp.pl 720x440 16/9 896 25 countquant.pl Author: Moritz Bunkus Description: Counts the quantizers used for the encoding, mentioned in DOCS/tech/encoding-tips.txt, see that document for more info. Usage: countquant.pl < divx2pass.log It will print out which quantizer was used how often. If you see that e.g. the lowest quantizer (vqmin=2) gets used for > 95% of the frames then you can safely increase your picture size. plotpsnr.pl Author: Jonas Jermann Description: Draw PSNR log graphs using gnuplot. Usage: plotpsnr.pl [options] <file> -h, --help Display this help message -quant Display quantizers -size Display size -psnr Display PSNR -iframes Display I-frames -pframes Display P-frames -bframes Display B-frames -aframes Display all frames in different colors -cmp <file2> Compare two files -qs <style> Quantizer style -ss <style> Size style -ps <style> PSNR style Default: -quant -size -psnr -qs "p" -ss "i" -ps "p" Note: Requires gnuplot. Comparison is based on file2. Comparison assumes that the frame numbers of both files fit. psnr-video.sh Author: Matthias Wieser Description: Calculates the PSNR between two existing video files. The PSNR is calculated frame by frame. Also prints the overall PSNR. The script can be used to: * Compare different softwarescalers (should I use -sws 1 or -sws 2 ?) * Compare different resolutions (is it better to scale down to 640x360 or to 560x320) * Compare different deinterlacers * Compare different video codecs * Compare video filters (is it better to use -vf hqdn3d or lavcopts:nr=400) * [...] Usage: psnr-video.sh <file1> <file2> [<frames>] [<options1>] [<options2>] <file1> and <file2> are the video files for which the PSNR should be calculated. [<frames>] is the number of frames to process, starting from frame 1. [<options1>] are additional MPlayer options for <file1> [<options2>] are additional MPlayer options for <file2> A file called ./psnr.dat will be created with the following content: File;Y;Cb;Cr 00000001.ppm;34.23;39.54;40.06;35.426 00000002.ppm;33.03;38.71;39.26;34.271 00000003.ppm;33.45;38.91;39.28;34.655 00000004.ppm;32.72;38.69;38.85;33.972 [...] 00000247.ppm;35.55;40.84;42.15;36.785 PSNR:;35.9887 Note: This script relies on the the tool "pnmpsnr" for the frame-by-frame PSNR calculation. Be aware that psnr-video.sh needs a lot of temporary space in /tmp/. asfinfo Author: Arpi Description: a simple ASF header display program Usage: asfinfo <filename.asf> Note: Also see MPlayer's -identify option. avi-fix Author: Arpi Description: A simple tool to fix chunk sizes in RIFF AVI files. Usage: avi-fix [-fix] <badfile.avi> Note: It does not check or fix the index, to do this use 'mencoder -forceidx -oac copy -ovc copy'. checktree.sh Author: Ivo van Poorten Description: Check the source tree for anomalies. Usage: checktree.sh -help Note: This script is meant for developers to check the current source tree and/or the patches they are working on. mphelp_check.py Author: Uoti Urpala Description: Check console message translations for common errors. Usage: mphelp_check.py [--missing] <master file> <files to check> Note: Compares MPlayer translation files against a master file and reports conflicting arguments, extra strings not present in the base file and (optionally) missing strings. cpuinfo Author: Jürgen Keil Description: the prototype ../cpuinfo.c Note: Used by configure to emulate /proc/cpuinfo on non-Linux systems. dump_mp4 Author: Arpi Description: MPEG4-ES stream inspector, dumps the stream startcodes. fastmemcpybench Author: Felix Bünemann Description: benchmark/testbed for fastmemcpy stuff Note: Also see fastmem.sh. movinfo Author: Arpi Description: Show QuickTime MOV file structure. Usage: movinfo <filename.mov> vivodump Author: Arpi Description: Dump H.263 frame headers from VIVO files. Usage: vivodump <input_file> <output_file> Miscellaneous scripts in the TOOLS dir -------------------------------------- subedit.pl Author: Michael Klepikov Description: A script for pipelined editing of subtitle files. Usage: subedit.pl [switches] -if,--input-format <fmt> input format; supported: SRT (default: SRT) -of,--output-format <fmt> output format; supported: SRT (default: input format) -s,--shift <time> shift all subtitles by <time> (format: [-]hh:mm:ss,fraction) -c,--scale <time> scale by adding <time> to overall duration -f,--split-from <time> drop subtitles that end before <time> -t,--split-to <time> drop subtitles that start after <time> (will truncate timing if it overlaps a boundary) -r,--renumber renumber SRT subtitles in output -d,--debug enable debug output -h,--help help message w32codec_dl.pl Author: Tom Lees Description: This script will use the Windows Media Player codec download infrastructure to aquire the codecs listed in codecs.conf and put them in a directory named "codecs/" below the current directory. Usage: w32codec_dl.pl <codecs.conf location> Note: You will need the libwww-perl stuff and the cabextract utility which can be found at http://www.kyz.uklinux.net/cabextract.php3. binary_codecs.sh Author: Andrea Menucci, thuglife Description: Downloads binary codecs from mplayerhq.hu and installs them on a Debian system. Usage: binary_codecs.sh install binary_codecs.sh uninstall vobshift.py Author: Gábor Farkas Description: Adjust the time-info in vobsub files Usage: vobshift.py in.idx out.idx +8.3 Will shift the time by 8.3 seconds subrip.c Author: Kim Minh Kaplan Description: Transform VOBsub subtitles into Subrip text subtitles using GOCR/JOCR. Usage: subrip <vobsub basename> [subid [output filename] ] Note: Requires at least JOCR/GOCR 0.37. You will have to change the 'vobsub_id' value if you want a subtitle different from number 0. Hint: You can view the subtitle that is being decoded with "display subtitle-*.pgm". alaw-gen.c Author: Arpi Description: Generates alaw/ulaw tables. Note: Created to work around a past license issue, no longer useful. avisubdump.c Author: Tobias Diedrich Description: Dumps vobsub soft subtitles streams embedded in AVI files. Usage: avisubdump <movie.avi> vfw2menc.c Author: Gianluigi Tiesi Description: Creates a codec settings file from the Video for Windows codecs found in the mplayer codec packs. Usage: vfw2menc -f <fourcc> -d <codec.dll> -s <settingsfile.mcf> -h|--help - displays this help -d|--driver filename - dll or drv to load -f|--fourcc fourcc - fourcc of selected driver -s|--save filename - save settings to file -c|--check filename - load and show setting in filename -v|--view - displays the config dialog and do nothing Notes: Works on Windows/Linux x86 only. modify_reg.c Author: Alan Nisota Description: Modifies registry file (usually ~/.mplayer/registry) Usage: modify_reg -r <registry_file> -l modify_reg -r <registry_file> -k <key> [-d|-v <value>[-t <type>]] -r|--registry - path to registry file -l|--list - shows all keys and values -k|--key - registry key -d|--del - delete key -v|--value - new value for key -t|--type - key type: string (default) or dword Notes: Necessary to use CoreAVC with MPlayer compare.c Author: Michael Niedermayer Description: Simple file compare program that detects the number of rounding errors and dies if the error is too large. Usage: compare <file1> <file2> realcodecs/ Author: miscellaneous Description: Wrappers for Linux Real binary codecs used to analyze, alter and dump the data flow between RealPlayer and its codecs. Usage: - Set the path to the RealPlayer codecs directory in the C files. - Run 'make realcodecs'. - Rename the original codecs to match the names expected in the wrapper sources. The default is to give them a "real" prefix, e.g. realcook.so.6.0. - Put the wrappers in the RealPlayer codecs directory. Notes: Known to work at least on Linux x86 with RealPlayer8. netstream - access remote streams --------------------------------- NOTE: netstream does not link at the moment - help welcome. netstream allows you to access most MPlayer stream types from a remote host. The main purpose of this feature is to make it possible to directly use the CD or DVD drive of another computer on the network (provided you have the required bandwidth). On the downside some stream types (currently TV and MF) are not usable remotely because they are implemented at the demuxer level. Be aware that currently the server is not secure at all. Compile the server by running 'make netstream' and then copy the netstream binary to the right place on your system (usually /usr/local/bin on Unix). Start the netstream server on the computer you intend to access remotely. There are no command line arguments. Play the second track of a VCD on the server with: mplayer -cache 5000 mpst://servername/vcd://2 Access files on this server with: mplayer -cache 5000 mpst://servername//usr/local/movies/lol.avi Note that paths which do not start with a / will be interpreted as relative to the directory where the server is running. The '-cache' option is not needed but highly recommended.