diff --git a/scripts/show.py b/scripts/show.py new file mode 100755 index 0000000..03d13f0 --- /dev/null +++ b/scripts/show.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python2 +import random, os, subprocess, sys + +class Shower(object): + def __init__(self): + self.nodes = {} + self.edges_by_src = {} + self.had_webm = False + self.y4m_header = None + + def walk_dir(self, dir): + for i in os.listdir(dir): + fn = os.path.join(dir, i) + if not i.endswith('.h264') and not i.endswith('.webm'): continue + if i.startswith('latest'): continue + path = i.rsplit('.', 1)[0].rsplit('_', 1)[0] + if '=' in i: + src, dst = path.split('=') + self.edges_by_src.setdefault(src, set()).add((dst, fn)) + else: + self.nodes[path] = fn + if i.endswith('.webm'): + self.had_webm = True + + def output(self, path): + sys.stderr.write(path) + if self.had_webm: + self._output_y4m(path) + else: + with open(path) as fp: + self._output_raw(fp) + + def _output_y4m(self, path): + subp = subprocess.Popen(['ffmpeg', '-r', '24', '-i', path, '-f', 'yuv4mpegpipe', '-pix_fmt', 'yuv420p', '-'], + stdout=subprocess.PIPE) + y4m_header = subp.stdout.readline() + if self.y4m_header is None: + self.y4m_header = y4m_header + sys.stdout.write(y4m_header) + elif self.y4m_header != y4m_header: + raise ValueError('Different Y4M headers: %s vs %s', repr(y4m_header), repr(self.y4m_header)) + self._output_raw(subp.stdout) + + def _output_raw(self, fp): + for chunk in iter(lambda: fp.read(1024 * 1024), ''): + sys.stdout.write(chunk) + + def run_for(self, n): + src = None + for i in range(n): + if src not in self.nodes: + src = random.choice(self.nodes.keys()) + self.output(self.nodes[src]) + if src in self.edges_by_src: + src, path = random.choice(list(self.edges_by_src[src])) + self.output(path) + else: + src = None + +def main(): + shower = Shower() + while True: + shower.walk_dir(sys.argv[1]) + shower.run_for(1000) + +if __name__ == '__main__': + main()