88import operator
99import subprocess
1010
11- from ._ffmpeg import (
12- input ,
13- output ,
14- )
11+ from ._ffmpeg import input , output
1512from .nodes import (
1613 get_stream_spec_nodes ,
1714 FilterNode ,
2421
2522class Error (Exception ):
2623 def __init__ (self , cmd , stdout , stderr ):
27- super (Error , self ).__init__ ('{} error (see stderr output for detail)' .format (cmd ))
24+ super (Error , self ).__init__ (
25+ '{} error (see stderr output for detail)' .format (cmd )
26+ )
2827 self .stdout = stdout
2928 self .stderr = stderr
3029
@@ -69,9 +68,15 @@ def _format_output_stream_name(stream_name_map, edge):
6968def _get_filter_spec (node , outgoing_edge_map , stream_name_map ):
7069 incoming_edges = node .incoming_edges
7170 outgoing_edges = get_outgoing_edges (node , outgoing_edge_map )
72- inputs = [_format_input_stream_name (stream_name_map , edge ) for edge in incoming_edges ]
73- outputs = [_format_output_stream_name (stream_name_map , edge ) for edge in outgoing_edges ]
74- filter_spec = '{}{}{}' .format ('' .join (inputs ), node ._get_filter (outgoing_edges ), '' .join (outputs ))
71+ inputs = [
72+ _format_input_stream_name (stream_name_map , edge ) for edge in incoming_edges
73+ ]
74+ outputs = [
75+ _format_output_stream_name (stream_name_map , edge ) for edge in outgoing_edges
76+ ]
77+ filter_spec = '{}{}{}' .format (
78+ '' .join (inputs ), node ._get_filter (outgoing_edges ), '' .join (outputs )
79+ )
7580 return filter_spec
7681
7782
@@ -84,14 +89,20 @@ def _allocate_filter_stream_names(filter_nodes, outgoing_edge_maps, stream_name_
8489 # TODO: automatically insert `splits` ahead of time via graph transformation.
8590 raise ValueError (
8691 'Encountered {} with multiple outgoing edges with same upstream label {!r}; a '
87- '`split` filter is probably required' .format (upstream_node , upstream_label ))
92+ '`split` filter is probably required' .format (
93+ upstream_node , upstream_label
94+ )
95+ )
8896 stream_name_map [upstream_node , upstream_label ] = 's{}' .format (stream_count )
8997 stream_count += 1
9098
9199
92100def _get_filter_arg (filter_nodes , outgoing_edge_maps , stream_name_map ):
93101 _allocate_filter_stream_names (filter_nodes , outgoing_edge_maps , stream_name_map )
94- filter_specs = [_get_filter_spec (node , outgoing_edge_maps [node ], stream_name_map ) for node in filter_nodes ]
102+ filter_specs = [
103+ _get_filter_spec (node , outgoing_edge_maps [node ], stream_name_map )
104+ for node in filter_nodes
105+ ]
95106 return ';' .join (filter_specs )
96107
97108
@@ -109,7 +120,9 @@ def _get_output_args(node, stream_name_map):
109120
110121 for edge in node .incoming_edges :
111122 # edge = node.incoming_edges[0]
112- stream_name = _format_input_stream_name (stream_name_map , edge , is_final_arg = True )
123+ stream_name = _format_input_stream_name (
124+ stream_name_map , edge , is_final_arg = True
125+ )
113126 if stream_name != '0' or len (node .incoming_edges ) > 1 :
114127 args += ['-map' , stream_name ]
115128
@@ -123,7 +136,9 @@ def _get_output_args(node, stream_name_map):
123136 args += ['-b:a' , str (kwargs .pop ('audio_bitrate' ))]
124137 if 'video_size' in kwargs :
125138 video_size = kwargs .pop ('video_size' )
126- if not isinstance (video_size , basestring ) and isinstance (video_size , collections .Iterable ):
139+ if not isinstance (video_size , basestring ) and isinstance (
140+ video_size , collections .Iterable
141+ ):
127142 video_size = '{}x{}' .format (video_size [0 ], video_size [1 ])
128143 args += ['-video_size' , video_size ]
129144 args += convert_kwargs_to_cmd_line_args (kwargs )
@@ -147,7 +162,9 @@ def get_args(stream_spec, overwrite_output=False):
147162 args += reduce (operator .add , [_get_input_args (node ) for node in input_nodes ])
148163 if filter_arg :
149164 args += ['-filter_complex' , filter_arg ]
150- args += reduce (operator .add , [_get_output_args (node , stream_name_map ) for node in output_nodes ])
165+ args += reduce (
166+ operator .add , [_get_output_args (node , stream_name_map ) for node in output_nodes ]
167+ )
151168 args += reduce (operator .add , [_get_global_args (node ) for node in global_nodes ], [])
152169 if overwrite_output :
153170 args += ['-y' ]
@@ -175,8 +192,14 @@ def compile(stream_spec, cmd='ffmpeg', overwrite_output=False):
175192
176193@output_operator ()
177194def run_async (
178- stream_spec , cmd = 'ffmpeg' , pipe_stdin = False , pipe_stdout = False , pipe_stderr = False ,
179- quiet = False , overwrite_output = False ):
195+ stream_spec ,
196+ cmd = 'ffmpeg' ,
197+ pipe_stdin = False ,
198+ pipe_stdout = False ,
199+ pipe_stderr = False ,
200+ quiet = False ,
201+ overwrite_output = False ,
202+ ):
180203 """Asynchronously invoke ffmpeg for the supplied node graph.
181204
182205 Args:
@@ -259,13 +282,20 @@ def run_async(
259282 stdout_stream = subprocess .PIPE if pipe_stdout or quiet else None
260283 stderr_stream = subprocess .PIPE if pipe_stderr or quiet else None
261284 return subprocess .Popen (
262- args , stdin = stdin_stream , stdout = stdout_stream , stderr = stderr_stream )
285+ args , stdin = stdin_stream , stdout = stdout_stream , stderr = stderr_stream
286+ )
263287
264288
265289@output_operator ()
266290def run (
267- stream_spec , cmd = 'ffmpeg' , capture_stdout = False , capture_stderr = False , input = None ,
268- quiet = False , overwrite_output = False ):
291+ stream_spec ,
292+ cmd = 'ffmpeg' ,
293+ capture_stdout = False ,
294+ capture_stderr = False ,
295+ input = None ,
296+ quiet = False ,
297+ overwrite_output = False ,
298+ ):
269299 """Invoke ffmpeg for the supplied node graph.
270300
271301 Args:
@@ -296,10 +326,4 @@ def run(
296326 return out , err
297327
298328
299- __all__ = [
300- 'compile' ,
301- 'Error' ,
302- 'get_args' ,
303- 'run' ,
304- 'run_async' ,
305- ]
329+ __all__ = ['compile' , 'Error' , 'get_args' , 'run' , 'run_async' ]
0 commit comments