send the actual data

stable
neingeist 6 years ago
parent 0c9053a4d7
commit 7fdcbecf93

@ -6,3 +6,4 @@ class Config:
''.join(random.choices(string.ascii_letters, k=20)) ''.join(random.choices(string.ascii_letters, k=20))
DATA_DIR = os.environ.get('DATA_DIR') or '/home/orange/devel/prolefeeder/tmp' DATA_DIR = os.environ.get('DATA_DIR') or '/home/orange/devel/prolefeeder/tmp'
MAX_LENGTH = os.environ.get('MAX_LENGTH') or 180 MAX_LENGTH = os.environ.get('MAX_LENGTH') or 180
KBITS = os.environ.get('KBITS') or 128

@ -1,14 +1,14 @@
from datetime import datetime, timedelta from datetime import datetime, timedelta
import subprocess import subprocess
KBITS = 128 from config import Config
def generate_test_file(fn, delta): def generate_test_file(fn, delta):
subprocess.call(['ffmpeg', subprocess.call(['ffmpeg',
'-f', 'lavfi', '-f', 'lavfi',
'-i', 'sine=frequency=1000:duration=%d' % delta.total_seconds(), '-i', 'sine=frequency=1000:duration=%d' % delta.total_seconds(),
'-b:a', '%dk' % KBITS, '-b:a', '%dk' % Config.KBITS,
fn]) fn])

@ -6,6 +6,10 @@ from wtforms import DateTimeField, DecimalField, SubmitField
from wtforms.validators import DataRequired, NumberRange from wtforms.validators import DataRequired, NumberRange
from datetime import datetime, timedelta from datetime import datetime, timedelta
import os
import random
import re
import subprocess
from config import Config from config import Config
@ -47,7 +51,53 @@ def download_file(filename):
def prepare_download(form): def prepare_download(form):
return 'test.mp3' """Prepare a download given the user's request form"""
def start_time_for_source_fn(fn):
return datetime.strptime(fn, 'qfhi-%Y%m%d-%H%M.mp3')
def length_for_source_fn(fn):
size = os.stat(os.path.join(app.config['DATA_DIR'], fn)).st_size
length = timedelta(minutes=size / (1000*app.config['KBITS']/8) / 60)
return length
# Get a sorted list of all source files with start time and length
sources = []
for fn in os.listdir(app.config['DATA_DIR']):
try:
start_time = start_time_for_source_fn(fn)
length = length_for_source_fn(fn)
sources.append({'fn': fn, 'start_time': start_time, 'length': length})
except ValueError:
pass
sources = sorted(sources, key=lambda s: s['start_time'])
# Only interested in the source files from the start file
start_index = None
for i, source in enumerate(sources):
if source['start_time'] <= form.start_time.data < source['start_time'] + source['length']:
start_index = i
sources = sources[start_index:]
# Seek into the first file
ss = (form.start_time.data - sources[0]['start_time']).total_seconds()
# Let ffmpeg do the rest of the job
# XXX Necessary to limit the concat files?
output_filename = '{}_{}.mp3'.format(form.start_time.data, form.length.data)
c = ['ffmpeg', '-y']
c += ['-ss', str(ss)]
c += ['-i', 'concat:' + '|'.join([os.path.join(app.config['DATA_DIR'],
source['fn']) for source in sources])]
c += ['-codec', 'copy']
c += ['-t', str(form.length.data * 60)]
c += [os.path.join(app.config['DATA_DIR'], output_filename)]
app.logger.debug(' '.join(c))
subprocess.call(c)
return output_filename
if __name__ == '__main__': if __name__ == '__main__':

Loading…
Cancel
Save