from __future__ import unicode_literals from past.builtins import basestring from ._utils import basestring from .nodes import ( filter_operator, GlobalNode, InputNode, MergeOutputsNode, OutputNode, output_operator, ) def input(filename, **kwargs): """Input file URL (ffmpeg ``-i`` option) Any supplied kwargs are passed to ffmpeg verbatim (e.g. ``t=20``, ``f='mp4'``, ``acodec='pcm'``, etc.). To tell ffmpeg to read from stdin, use ``pipe:`` as the filename. Official documentation: `Main options `__ """ kwargs['filename'] = filename fmt = kwargs.pop('f', None) if fmt: if 'format' in kwargs: raise ValueError("Can't specify both `format` and `f` kwargs") kwargs['format'] = fmt return InputNode(input.__name__, kwargs=kwargs).stream() @output_operator() def global_args(stream, *args): """Add extra global command-line argument(s), e.g. ``-progress``. """ return GlobalNode(stream, global_args.__name__, args).stream() @output_operator() def overwrite_output(stream): """Overwrite output files without asking (ffmpeg ``-y`` option) Official documentation: `Main options `__ """ return GlobalNode(stream, overwrite_output.__name__, ['-y']).stream() @output_operator() def merge_outputs(*streams): """Include all given outputs in one ffmpeg command line """ return MergeOutputsNode(streams, merge_outputs.__name__).stream() @filter_operator() def output(*streams_and_filename, **kwargs): """Output file URL Syntax: `ffmpeg.output(stream1[, stream2, stream3...], filename, **ffmpeg_args)` Any supplied keyword arguments are passed to ffmpeg verbatim (e.g. ``t=20``, ``f='mp4'``, ``acodec='pcm'``, ``vcodec='rawvideo'``, etc.). Some keyword-arguments are handled specially, as shown below. Args: video_bitrate: parameter for ``-b:v``, e.g. ``video_bitrate=1000``. audio_bitrate: parameter for ``-b:a``, e.g. ``audio_bitrate=200``. format: alias for ``-f`` parameter, e.g. ``format='mp4'`` (equivalent to ``f='mp4'``). If multiple streams are provided, they are mapped to the same output. To tell ffmpeg to write to stdout, use ``pipe:`` as the filename. Official documentation: `Synopsis `__ """ streams_and_filename = list(streams_and_filename) if 'filename' not in kwargs: if not isinstance(streams_and_filename[-1], basestring): raise ValueError('A filename must be provided') kwargs['filename'] = streams_and_filename.pop(-1) streams = streams_and_filename fmt = kwargs.pop('f', None) if fmt: if 'format' in kwargs: raise ValueError("Can't specify both `format` and `f` kwargs") kwargs['format'] = fmt return OutputNode(streams, output.__name__, kwargs=kwargs).stream() __all__ = ['input', 'merge_outputs', 'output', 'overwrite_output']