cutcutcodec.core.compilation.ast_to_file.ast_to_file

cutcutcodec.core.compilation.ast_to_file.ast_to_file(module: Module, filename: Path | str | bytes)[source]

Write the module into an excecutable python file.

Parameters

moduleast.Module

The pre compiled graph, could be the output of the function cutcutcodec.core.compilation.graph_to_ast.graph_to_ast.

filenamepathlib.Path

The name of the targeted file.

Examples

>>> import os, tempfile
>>> from cutcutcodec.core.compilation.ast_to_file import ast_to_file
>>> from cutcutcodec.core.compilation.graph_to_ast import graph_to_ast
>>> from cutcutcodec.core.compilation.tree_to_graph import tree_to_graph
>>> from cutcutcodec.core.filter.audio.subclip import FilterAudioSubclip
>>> from cutcutcodec.core.filter.video.subclip import FilterVideoSubclip
>>> from cutcutcodec.core.generation.audio.noise import GeneratorAudioNoise
>>> from cutcutcodec.core.generation.video.noise import GeneratorVideoNoise
>>> from cutcutcodec.core.io.write_ffmpeg import ContainerOutputFFMPEG
>>> streams_settings = [
...     {"encodec": "libopus", "rate": 8000},
...     {"encodec": "libx264", "rate": 12, "shape": (2, 2)},
... ]
>>> container_settings = {"format": "matroska"}
>>> (stream_a,) = FilterAudioSubclip(GeneratorAudioNoise(0).out_streams, 0, 1).out_streams
>>> (stream_v,) = FilterVideoSubclip(GeneratorVideoNoise(0).out_streams, 0, 1).out_streams
>>> streams = (stream_a, stream_v)
>>> tree = ContainerOutputFFMPEG(streams, os.devnull, streams_settings, container_settings)
>>> filename = pathlib.Path(tempfile.gettempdir()) / "cutcutcodec.py"
>>> module = graph_to_ast(tree_to_graph(tree))
>>> ast_to_file(module, filename)
>>> with open(filename, "r", encoding="utf-8") as raw:
...     print(raw.read())  
...
#!/usr/bin/env python3

"""Autogenerated project exportation script.

Creation: ...
Graph: MultiDiGraph with 5 nodes and 4 edges
"""
from cutcutcodec.core.classes.node import Node
from cutcutcodec.core.filter.audio.subclip import FilterAudioSubclip
from cutcutcodec.core.filter.video.subclip import FilterVideoSubclip
from cutcutcodec.core.generation.audio.noise import GeneratorAudioNoise
from cutcutcodec.core.generation.video.noise import GeneratorVideoNoise
from cutcutcodec.core.io.write_ffmpeg import ContainerOutputFFMPEG


def get_container_output_ffmpeg_1(
    filter_audio_subclip_1: Node, filter_video_subclip_1: Node
) -> ContainerOutputFFMPEG:
    """Create the node 'container_output_ffmpeg_1'."""
    container_output_ffmpeg_1 = ContainerOutputFFMPEG.__new__(ContainerOutputFFMPEG)
    container_output_ffmpeg_1.setstate(
        [filter_audio_subclip_1.out_streams[0], filter_video_subclip_1.out_streams[0]],
        state={
            "filename": "/dev/null",
            "streams_settings": [
                {"encodec": "libopus", "rate": "8000", "options": {}, "bitrate": None},
                {
                    "encodec": "libx264",
                    "rate": "12",
                    "shape": (2, 2),
                    "options": {},
                    "bitrate": None,
                    "pix_fmt": None,
                    "range": "tv",
                },
            ],
            "container_settings": {
                "format": "matroska",
                "options": {},
                "container_options": {},
            },
        },
    )
    return container_output_ffmpeg_1


def get_filter_audio_subclip_1(generator_audio_noise_1: Node) -> FilterAudioSubclip:
    """Create the node 'filter_audio_subclip_1'."""
    filter_audio_subclip_1 = FilterAudioSubclip.__new__(FilterAudioSubclip)
    filter_audio_subclip_1.setstate(
        [generator_audio_noise_1.out_streams[0]],
        state={"delay": "0", "duration_max": "1"},
    )
    return filter_audio_subclip_1


def get_filter_video_subclip_1(generator_video_noise_1: Node) -> FilterVideoSubclip:
    """Create the node 'filter_video_subclip_1'."""
    filter_video_subclip_1 = FilterVideoSubclip.__new__(FilterVideoSubclip)
    filter_video_subclip_1.setstate(
        [generator_video_noise_1.out_streams[0]],
        state={"delay": "0", "duration_max": "1"},
    )
    return filter_video_subclip_1


def get_generator_audio_noise_1() -> GeneratorAudioNoise:
    """Create the node 'generator_audio_noise_1'."""
    generator_audio_noise_1 = GeneratorAudioNoise.__new__(GeneratorAudioNoise)
    generator_audio_noise_1.setstate([], state={"seed": 0.0, "layout": "stereo"})
    return generator_audio_noise_1


def get_generator_video_noise_1() -> GeneratorVideoNoise:
    """Create the node 'generator_video_noise_1'."""
    generator_video_noise_1 = GeneratorVideoNoise.__new__(GeneratorVideoNoise)
    generator_video_noise_1.setstate([], state={"seed": 0.0})
    return generator_video_noise_1


def get_complete_tree() -> ContainerOutputFFMPEG:
    """Retrive the complete assembly graph."""
    generator_audio_noise_1 = get_generator_audio_noise_1()
    filter_audio_subclip_1 = get_filter_audio_subclip_1(generator_audio_noise_1)
    generator_video_noise_1 = get_generator_video_noise_1()
    filter_video_subclip_1 = get_filter_video_subclip_1(generator_video_noise_1)
    container_output_ffmpeg_1 = get_container_output_ffmpeg_1(
        filter_audio_subclip_1, filter_video_subclip_1
    )
    return container_output_ffmpeg_1


if __name__ == "__main__":
    get_complete_tree().write()

>>> filename.unlink()
>>>