added proper command line interface

This commit is contained in:
András Veres-Szentkirályi 2013-06-17 13:03:08 +02:00
parent 044f7d549b
commit 8798922502
2 changed files with 44 additions and 8 deletions

44
run.py Normal file
View file

@ -0,0 +1,44 @@
#!/usr/bin/env python
from __future__ import print_function
from PIL import Image
from argparse import ArgumentParser
from sys import stderr
import color, grayscale
SSTV_MODULES = [color, grayscale]
def main():
module_map = build_module_map()
parser = ArgumentParser(
description='Converts an image to an SSTV modulated WAV file.')
parser.add_argument('img_file', metavar='image.png',
help='input image file name')
parser.add_argument('wav_file', metavar='output.wav',
help='output WAV file name')
parser.add_argument('--mode', dest='mode', default='MartinM1', choices=module_map,
help='image mode (default: Martin M1)')
parser.add_argument('--rate', dest='rate', type=int, default=48000,
help='sampling rate (default: 48000)')
parser.add_argument('--bits', dest='bits', type=int, default=16,
help='bits per sample (default: 16)')
args = parser.parse_args()
image = Image.open(args.img_file)
mode = module_map[args.mode]
if not all(i >= m for i, m in zip(image.size, (mode.WIDTH, mode.HEIGHT))):
print(('Image must be at least {m.WIDTH} x {m.HEIGHT} pixels '
'for mode {m.__name__}').format(m=mode), file=stderr)
raise SystemExit(1)
s = mode(image, args.rate, args.bits)
s.write_wav(args.wav_file)
def build_module_map():
module_map = {}
for module in SSTV_MODULES:
for mode in module.MODES:
module_map[mode.__name__] = mode
return module_map
if __name__ == '__main__':
main()

View file

@ -93,11 +93,3 @@ class SSTV(object):
def byte_to_freq(value):
return FREQ_BLACK + FREQ_RANGE * value / 255
if __name__ == '__main__':
from PIL import Image
from grayscale import Robot8BW
image = Image.open('160x120bw.png')
s = Robot8BW(image, 48000, 16)
s.write_wav('test.wav')