コード例 #1
0
def frames(ctx, input_dir, seed, filename, save_frames, width, height, watermark):
    with tempfile.TemporaryDirectory() as tmp:
        for i in range(30):
            frame_filename = f'{tmp}/{i:04d}.png'

            util.check_call(['magic-mashup', 'frame',
                             '--input-dir', input_dir,
                             '--frame', str(i),
                             '--seed', str(seed),
                             '--width', str(width),
                             '--height', str(height),
                             '--filename', frame_filename])

            util.check_call(['noisemaker', 'effect', 'crt', frame_filename,
                             '--no-resize',
                             '--seed', str(seed),
                             '--speed', '0.25',
                             '--time', str(i / 30.0),
                             '--filename', frame_filename])

            if save_frames:
                shutil.copy(frame_filename, save_frames)

            if watermark:
                util.watermark(watermark, frame_filename)

        util.magick(f'{tmp}/*png', filename)

    print('magic-mashup')
コード例 #2
0
ファイル: noisemaker.py プロジェクト: Kulinark/py-noisemaker
def animation(ctx, width, height, channels, seed, effect_preset, filename, save_frames, frame_count, watermark, preset_name):
    if seed is None:
        seed = random.randint(1, MAX_SEED_VALUE)

    value.set_seed(seed)
    reload_presets(PRESETS)

    if preset_name == 'random':
        preset_name = list(GENERATOR_PRESETS)[random.randint(0, len(GENERATOR_PRESETS) - 1)]

    if effect_preset == 'random':
        effect_preset = list(EFFECT_PRESETS)[random.randint(0, len(EFFECT_PRESETS) - 1)]

    if effect_preset:
        print(f"{preset_name} vs. {effect_preset} (seed: {seed})")
    else:
        print(f"{preset_name} (seed: {seed})")

    preset = GENERATOR_PRESETS[preset_name]

    with tempfile.TemporaryDirectory() as tmp:
        for i in range(frame_count):
            frame_filename = f'{tmp}/{i:04d}.png'

            common_params = ['--seed', str(seed),
                             '--time', f'{i/frame_count:0.4f}',
                             '--filename', frame_filename]

            util.check_call(['noisemaker', 'generator', preset_name,
                             '--speed', str(_use_reasonable_speed(preset, frame_count)),
                             '--height', str(height),
                             '--width', str(width)] + common_params)

            if effect_preset:
                util.check_call(['noisemaker', 'effect', effect_preset, frame_filename,
                                 '--no-resize',
                                 '--speed', str(_use_reasonable_speed(EFFECT_PRESETS[effect_preset], frame_count))] + common_params)

            if save_frames:
                shutil.copy(frame_filename, save_frames)

            if watermark:
                util.watermark(watermark, frame_filename)

        if filename.endswith(".mp4"):
            # when you want something done right
            util.check_call(['ffmpeg',
                             '-y',  # overwrite existing
                             '-framerate', '30',
                             '-i', f'{tmp}/%04d.png',
                             '-c:v', 'libx264',  # because this is what twitter wants
                             '-pix_fmt', 'yuv420p',  # because this is what twitter wants
                             '-b:v', '1700000',  # maximum allowed bitrate for 720x720 (2048k), minus some encoder overhead
                             '-s', '720x720',  # a twitter-recommended size
                             filename])

        else:
            util.magick(f'{tmp}/*png', filename)
コード例 #3
0
ファイル: animaker.py プロジェクト: aayars/py-noisemaker
def main(ctx, width, height, channels, seed, effect_preset, name, save_frames,
         frame_count, watermark, overrides, preset_name):
    if preset_name == 'random':
        preset_name = 'random-preset'

    if effect_preset == 'random':
        effect_preset = 'random-effect'

    kwargs = presets.preset(preset_name)

    preset_name = kwargs['name']

    if effect_preset:
        effect_kwargs = presets.preset(effect_preset)

        effect_preset = effect_kwargs['name']

        print(preset_name + " vs. " + effect_preset)
    else:
        print(preset_name)

    if overrides:
        overrides = json.loads(overrides)

    else:
        overrides = {}

    # Override defaults to animate better
    distrib = overrides.get('distrib', kwargs.get('distrib'))

    if distrib and isinstance(distrib, int):
        distrib = ValueDistribution(distrib)

    elif distrib and isinstance(distrib, str):
        distrib = ValueDistribution[distrib]

    if 'point_drift' not in kwargs:
        overrides['point_drift'] = 0.25

    speed = overrides.get("speed", kwargs.get("speed", 0.25))

    # Adjust speed for length of clip. A "normal" length is 30 frames.
    overrides['speed'] = speed * (frame_count / 30.0)

    with tempfile.TemporaryDirectory() as tmp:
        for i in range(frame_count):
            filename = f'{tmp}/{i:04d}.png'

            common_params = [
                '--seed',
                str(seed or 1), '--overrides',
                json.dumps(overrides), '--time', f'{i/frame_count:0.4f}',
                '--name', filename
            ]

            util.check_call([
                'artmaker', preset_name, '--height',
                str(height), '--width',
                str(width)
            ] + common_params)

            if effect_preset:
                util.check_call(
                    ['artmangler', effect_preset, filename, '--no-resize'] +
                    common_params)

            if save_frames:
                shutil.copy(filename, save_frames)

            if watermark:
                util.watermark(watermark, filename)

        if name.endswith(".mp4"):
            # when you want something done right
            util.check_call([
                'ffmpeg',
                '-y',  # overwrite existing
                '-framerate',
                '30',
                '-i',
                f'{tmp}/%04d.png',
                '-c:v',
                'libx264',  # because this is what twitter wants
                '-pix_fmt',
                'yuv420p',  # because this is what twitter wants
                '-b:v',
                '1700000',  # maximum allowed bitrate for 720x720 (2048k), minus some encoder overhead
                '-s',
                '720x720',  # a twitter-recommended size
                name
            ])

        else:
            util.magick(f'{tmp}/*png', name)
コード例 #4
0
ファイル: animangler.py プロジェクト: aayars/py-noisemaker
def main(ctx, seed, name, save_frames, frame_count, input_dir, preset_name):
    if preset_name == 'random':
        preset_name = 'random-effect'

    kwargs = presets.preset(preset_name)

    preset_name = kwargs['name']

    print(preset_name)

    # Override defaults to animate better
    overrides = {}

    # XXX TODO factor this shared animaker logic out into a library
    distrib = kwargs.get('distrib')

    if distrib in (ValueDistribution.exp, 'exp'):
        overrides['distrib'] = 'simplex_exp'

    elif distrib not in (
            ValueDistribution.ones,
            'ones',
            ValueDistribution.simplex_exp,
            'simplex_exp',
            ValueDistribution.column_index,
            'column_index',
            ValueDistribution.row_index,
            'row_index',
    ):
        overrides['distrib'] = 'simplex'

    if 'point_drift' not in kwargs:
        overrides['point_drift'] = 0.25

    if 'speed' in kwargs:
        # Adjust speed for length of clip. A "normal" length is 30 frames.
        kwargs['speed'] *= frame_count / 30.0

    else:
        overrides['speed'] = 0.25 * (frame_count / 30.0)

    filenames = [
        f for f in sorted(os.listdir(input_dir)) if f.endswith('.png')
    ]

    if frame_count != len(filenames):
        print(
            f"Warning! I want to render {frame_count} frames, but found {len(filenames)} input images. This might look weird."
        )

    with tempfile.TemporaryDirectory() as tmp:
        for i in range(min(frame_count, len(filenames))):
            filename = f'{tmp}/{i:04d}.png'

            common_params = [
                '--seed',
                str(seed or 1), '--overrides',
                json.dumps(overrides), '--time', f'{i/frame_count:0.4f}',
                '--name', filename
            ]

            util.check_call([
                'artmangler', preset_name,
                os.path.join(input_dir, filenames[i]), '--no-resize'
            ] + common_params)

            if save_frames:
                shutil.copy(filename, save_frames)

        magick(f'{tmp}/*png', name)