summaryrefslogtreecommitdiff
path: root/cad/src/experimental/animations/borders.py
blob: 76d459f8ad20ead82989dd4f2833fcc12476274e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#!/usr/bin/python

# Copyright 2006-2007 Nanorex, Inc.  See LICENSE file for details. 
import os

# Make up a DVD that tests the borders on a television, to find out
# how big the borders need to be. Start with a black field and a white
# horizontal rectangle, and a text display of the number of border
# pixels as the white rectangle grows horizontally. Then do a vertical
# rectangle. The whole thing should be a ten-second animation maybe.

# Start with black.jpg, a 600x450 black image.

# The outcome of this test, with my television and my DVD player, is
# that a 600x450 graphic should have a border that shrinks it to
# 520x420 in order to keep things visible.

def do(cmd):
    print cmd
    if os.system(cmd) != 0:
        raise Exception

def fillHorizontal(border, filename):
    left = border / 2
    right = 600 - left
    cmd = 'convert'
    cmd += ' -fill white'
    cmd += ' -draw "rectangle %d,250 %d,350"' % (left, right)
    cmd += (' -font courier -pointsize 24 -draw' +
            ' "text 200, 110 \'Border test\'"')
    cmd += (' -font courier -pointsize 24 -draw' +
            ' "text 200, 150 \'%d/600 pixels\'"'
            % (right - left))
    cmd += ' black.jpg ' + filename
    do(cmd)

def fillVertical(border, filename):
    top = border / 2
    bottom = 450 - top
    cmd = 'convert'
    cmd += ' -fill white'
    cmd += ' -draw "rectangle 350,%d 450,%d"' % (top, bottom)
    cmd += (' -font courier -pointsize 24 -draw' +
            ' "rotate 90 text 130, -200 \'%d/450 pixels\'"'
            % (bottom - top))
    cmd += ' black.jpg ' + filename
    do(cmd)

yuv_num = 0

def oneSecond(func, param, yuvname):
    global yuv_num
    func(param, yuvname)
    for j in range(1, 30):
        do('cp %s %s' % (yuvname, 'foo.%06d.yuv' % yuv_num))
        yuv_num += 1

for i in range(0, 100, 10):
    yuvname = 'foo.%06d.yuv' % yuv_num
    yuv_num += 1
    oneSecond(fillHorizontal, i, yuvname)

for i in range(0, 100, 10):
    yuvname = 'foo.%06d.yuv' % yuv_num
    yuv_num += 1
    oneSecond(fillVertical, i, yuvname)

do('mpeg2encode foo.par foo.mpeg')
do('rm -f foo.00*.yuv')
do('ffmpeg -i foo.mpeg -sameq foo.mp4')