mirror of
https://github.com/python/cpython.git
synced 2025-07-31 23:23:11 +00:00
Adapted the world to the new VFile.py. Fixed bugs in Vplay.py:
missing -n in help(), bogus frame skipping; and added patch for weird time jumps. Removed colorsys.py (now in std library). Fixed "sys.write" error in vcopy.py. Restructured README.
This commit is contained in:
parent
4045c2fa5b
commit
e1783324ab
4 changed files with 73 additions and 53 deletions
|
@ -26,7 +26,10 @@ a version of the Irix video library that supported capturing PAL
|
||||||
format (in August 1992), Sjoerd added an interface to the video
|
format (in August 1992), Sjoerd added an interface to the video
|
||||||
library to Python (sv) and Guido wrote Vrec.py (based upon a
|
library to Python (sv) and Guido wrote Vrec.py (based upon a
|
||||||
still frame grabber by Sjoerd, in turn based upon SGI demo code in C)
|
still frame grabber by Sjoerd, in turn based upon SGI demo code in C)
|
||||||
to record a movie using it.
|
to record a movie using it. Vrec was soon followed by modernized
|
||||||
|
versions of the other programs (Vinfo, Vplay, Vtime) and an
|
||||||
|
interactive editor (Vedit). Finally, VFile was rewritten for more
|
||||||
|
modularity, functionality and robustness.
|
||||||
|
|
||||||
Guido van Rossum
|
Guido van Rossum
|
||||||
Jack Jansen
|
Jack Jansen
|
||||||
|
@ -36,6 +39,61 @@ to record a movie using it.
|
||||||
Overview of files
|
Overview of files
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
cmif-film.ms description of the CMIF video file format
|
||||||
|
|
||||||
|
|
||||||
|
These are programs with a command line interface:
|
||||||
|
|
||||||
|
Vrec.py record video movies using the Indigo video library and
|
||||||
|
board
|
||||||
|
|
||||||
|
Vplay.py play video movies
|
||||||
|
|
||||||
|
Vinfo.py show statistics on movies
|
||||||
|
|
||||||
|
Vtime.py (unrelated to vtime!!!) Copy a video file,
|
||||||
|
manipulating the time codes (e.g. faster/slower, or
|
||||||
|
regenerate time codes, or drop frames too close apart)
|
||||||
|
|
||||||
|
Vedit.py interactive video editing program
|
||||||
|
|
||||||
|
|
||||||
|
These modules are used by the above programs:
|
||||||
|
|
||||||
|
VFile.py classes that read and write CMIF video files
|
||||||
|
|
||||||
|
Viewer.py two viewer classes used by Vedit
|
||||||
|
|
||||||
|
|
||||||
|
The following are C programs, either for efficiency or because they
|
||||||
|
need to link with a C library:
|
||||||
|
|
||||||
|
squash.c make a movie smaller by averaging pixels
|
||||||
|
usage: squash factor [bits] <moviefile >newmoviefile
|
||||||
|
factor x and y compression factor
|
||||||
|
bits #bits left per sample in result (default 8)
|
||||||
|
|
||||||
|
squash2.c make a movie smaller by dropping pixels
|
||||||
|
usage: squash2 factor <moviefile >newmoviefile
|
||||||
|
factor x and y compression factor
|
||||||
|
|
||||||
|
tomono.c like squash2 but outputs a monochrome movie
|
||||||
|
|
||||||
|
v2i.c convert the first frame of a movie file to SGI .rgb format
|
||||||
|
link with -limage
|
||||||
|
|
||||||
|
i2v.c convert an rgb file to "lrectwrite" format (this was
|
||||||
|
used one time by the CMIF editor)
|
||||||
|
|
||||||
|
|
||||||
|
These programs are obsolete, but kept around for sentimental reasons.
|
||||||
|
Most either don't work any more because they don't use VFile and hence
|
||||||
|
haven't followed the frequent changes in the CMIF video file format;
|
||||||
|
or they are dependent upon hardware we don't have (SGI's previous
|
||||||
|
generation framegrabber). Except for cam.py / tv.py, their
|
||||||
|
functionality is present in the suite of programs whose name begins
|
||||||
|
with 'V' listed above.
|
||||||
|
|
||||||
cam.py network real-time tv broadcast; see tv.py
|
cam.py network real-time tv broadcast; see tv.py
|
||||||
usage: cam [packfactor [host]]
|
usage: cam [packfactor [host]]
|
||||||
specifying 'all' for host broadcasts
|
specifying 'all' for host broadcasts
|
||||||
|
@ -54,11 +112,6 @@ camcorder.py record video movies or make snapshots (in movie format)
|
||||||
p pause recording (record single frame if paused)
|
p pause recording (record single frame if paused)
|
||||||
ESC quit
|
ESC quit
|
||||||
|
|
||||||
Vrec.py record video movies using the Indigo video library and
|
|
||||||
board
|
|
||||||
|
|
||||||
colorsys.py color conversions, used by video
|
|
||||||
|
|
||||||
statit.py various statistics operations on movie files
|
statit.py various statistics operations on movie files
|
||||||
|
|
||||||
syncaudio.py record audio synchronized with camcorder -a
|
syncaudio.py record audio synchronized with camcorder -a
|
||||||
|
@ -84,43 +137,12 @@ video.py player for movies recorded by camcorder.py
|
||||||
soundfile default is none (no sound)
|
soundfile default is none (no sound)
|
||||||
skipbytes byte offset in soundfile where sound starts
|
skipbytes byte offset in soundfile where sound starts
|
||||||
|
|
||||||
Vplay.py similar but more modern, using VFile.py
|
|
||||||
|
|
||||||
vinfo.py print summary of movie file(s)
|
vinfo.py print summary of movie file(s)
|
||||||
usage: vinfo [-d] moviefile ...
|
usage: vinfo [-d] moviefile ...
|
||||||
-d print delta times (default: print abs times)
|
-d print delta times (default: print abs times)
|
||||||
|
|
||||||
Vinfo.py similar but more modern, using VFile.py
|
|
||||||
|
|
||||||
vpregs.py definition of VP registers
|
vpregs.py definition of VP registers
|
||||||
|
|
||||||
vtime.py virtual time module imported by syncaudio.py and camcorder.py
|
vtime.py virtual time module imported by syncaudio.py and camcorder.py
|
||||||
|
|
||||||
Vtime.py (unrelated to vtime!!!) Copy a video file,
|
colorsys.py color system conversions (now part of std python lib)
|
||||||
manipulating the time codes (e.g. faster/slower, or
|
|
||||||
regenerate time codes, or drop frames too close apart)
|
|
||||||
|
|
||||||
Vedit.py interactive video editing program
|
|
||||||
|
|
||||||
Viewer.py two viewer classes used by Vedit
|
|
||||||
|
|
||||||
|
|
||||||
The following are C programs, either for efficiency or because they
|
|
||||||
need to link with a C library:
|
|
||||||
|
|
||||||
squash.c make a movie smaller by averaging pixels
|
|
||||||
usage: squash factor [bits] <moviefile >newmoviefile
|
|
||||||
factor x and y compression factor
|
|
||||||
bits #bits left per sample in result (default 8)
|
|
||||||
|
|
||||||
squash2.c make a movie smaller by dropping pixels
|
|
||||||
usage: squash2 factor <moviefile >newmoviefile
|
|
||||||
factor x and y compression factor
|
|
||||||
|
|
||||||
tomono.c like squash2 but outputs a monochrome movie
|
|
||||||
|
|
||||||
v2i.c convert the first frame of a movie file to SGI .rgb format
|
|
||||||
link with -limage
|
|
||||||
|
|
||||||
i2v.c convert an rgb file to "lrectwrite" format (this was
|
|
||||||
used one time by the CMIF editor)
|
|
||||||
|
|
|
@ -65,13 +65,7 @@ def process(filename):
|
||||||
sys.stderr.write(filename + ': EOF in video file\n')
|
sys.stderr.write(filename + ': EOF in video file\n')
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
print 'File: ', filename
|
vin.printinfo()
|
||||||
print 'Version: ', vin.version
|
|
||||||
print 'Size: ', vin.width, 'x', vin.height
|
|
||||||
print 'Pack: ', vin.packfactor, '; chrom:', vin.chrompack
|
|
||||||
print 'Bits: ', vin.c0bits, vin.c1bits, vin.c2bits
|
|
||||||
print 'Format: ', vin.format
|
|
||||||
print 'Offset: ', vin.offset
|
|
||||||
|
|
||||||
if quick:
|
if quick:
|
||||||
vin.close()
|
vin.close()
|
||||||
|
|
|
@ -15,6 +15,7 @@ def help():
|
||||||
print '-d : write some debug stuff on stderr'
|
print '-d : write some debug stuff on stderr'
|
||||||
print '-l : loop, playing the movie over and over again'
|
print '-l : loop, playing the movie over and over again'
|
||||||
print '-m delta : drop frames closer than delta msec (default 0)'
|
print '-m delta : drop frames closer than delta msec (default 0)'
|
||||||
|
print '-n : don\'t wait after each file'
|
||||||
print '-q : quiet, no informative messages'
|
print '-q : quiet, no informative messages'
|
||||||
print '-r delta : regenerate input time base delta msec apart'
|
print '-r delta : regenerate input time base delta msec apart'
|
||||||
print '-s speed : speed change factor (default 1.0)'
|
print '-s speed : speed change factor (default 1.0)'
|
||||||
|
@ -137,13 +138,7 @@ def process(filename):
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
if not quiet:
|
if not quiet:
|
||||||
print 'File: ', filename
|
vin.printinfo()
|
||||||
print 'Version: ', vin.version
|
|
||||||
print 'Size: ', vin.width, 'x', vin.height
|
|
||||||
print 'Pack: ', vin.packfactor, '; chrom:', vin.chrompack
|
|
||||||
print 'Bits: ', vin.c0bits, vin.c1bits, vin.c2bits
|
|
||||||
print 'Format: ', vin.format
|
|
||||||
print 'Offset: ', vin.offset
|
|
||||||
|
|
||||||
gl.foreground()
|
gl.foreground()
|
||||||
|
|
||||||
|
@ -211,6 +206,8 @@ def playonce(vin):
|
||||||
time.millisleep(100)
|
time.millisleep(100)
|
||||||
|
|
||||||
tin = 0
|
tin = 0
|
||||||
|
toffset = 0
|
||||||
|
oldtin = 0
|
||||||
told = 0
|
told = 0
|
||||||
nin = 0
|
nin = 0
|
||||||
nout = 0
|
nout = 0
|
||||||
|
@ -247,11 +244,18 @@ def playonce(vin):
|
||||||
except EOFError:
|
except EOFError:
|
||||||
break
|
break
|
||||||
nin = nin+1
|
nin = nin+1
|
||||||
|
if tin+toffset < oldtin:
|
||||||
|
print 'Fix reversed time:', oldtin, 'to', tin
|
||||||
|
toffset = oldtin - tin
|
||||||
|
tin = tin + toffset
|
||||||
|
oldtin = tin
|
||||||
if regen: tout = nin * regen
|
if regen: tout = nin * regen
|
||||||
else: tout = tin
|
else: tout = tin
|
||||||
tout = int(tout / speed)
|
tout = int(tout / speed)
|
||||||
if tout - told < mindelta:
|
if tout - told < mindelta:
|
||||||
nskipped = nskipped + 1
|
nskipped = nskipped + 1
|
||||||
|
if not threading:
|
||||||
|
vin.skipnextframedata(size, csize)
|
||||||
else:
|
else:
|
||||||
if not threading:
|
if not threading:
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -10,7 +10,7 @@ def report(time, iframe):
|
||||||
print 'Frame', iframe, ': t =', time
|
print 'Frame', iframe, ': t =', time
|
||||||
|
|
||||||
def usage():
|
def usage():
|
||||||
sys.write('usage: vcopy infile outfile\n')
|
sys.stderr.write('usage: vcopy infile outfile\n')
|
||||||
sys.exit(2)
|
sys.exit(2)
|
||||||
|
|
||||||
def help():
|
def help():
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue