New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

ffmpeg-python

Package Overview
Dependencies
Maintainers
1
Versions
20
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ffmpeg-python - pypi Package Compare versions

Comparing version
0.1.18
to
0.2.0
+3
-3
ffmpeg_python.egg-info/PKG-INFO
Metadata-Version: 2.1
Name: ffmpeg-python
Version: 0.1.18
Version: 0.2.0
Summary: Python bindings for FFmpeg - with complex filtering support

@@ -9,3 +9,3 @@ Home-page: https://github.com/kkroening/ffmpeg-python

License: UNKNOWN
Download-URL: https://github.com/kkroening/ffmpeg-python/archive/v0.1.18.zip
Download-URL: https://github.com/kkroening/ffmpeg-python/archive/v0.2.0.zip
Description: ffmpeg-python: Python bindings for FFmpeg

@@ -17,3 +17,3 @@ =========================================

Keywords: -vf,a/v,audio,dsp,FFmpeg,ffmpeg,ffprobe,filtering,filter_complex,movie,render,signals,sound,streaming,streams,vf,video,wrapper,aac,ac3,avi,bmpflac,gif,mov,mp3,mp4,png,raw,rawvideo,wav,.aac,.ac3,.avi,.bmpflac,.gif,.mov,.mp3,.mp4,.png,.raw,.rawvideo,.wav
Keywords: -vf,a/v,audio,dsp,FFmpeg,ffmpeg,ffprobe,filtering,filter_complex,movie,render,signals,sound,streaming,streams,vf,video,wrapper,aac,ac3,avi,bmp,flac,gif,mov,mp3,mp4,png,raw,rawvideo,wav,.aac,.ac3,.avi,.bmp,.flac,.gif,.mov,.mp3,.mp4,.png,.raw,.rawvideo,.wav
Platform: UNKNOWN

@@ -20,0 +20,0 @@ Classifier: Intended Audience :: Developers

@@ -5,2 +5,3 @@ future

future==0.17.1
numpy==1.16.4
pytest-mock==1.10.4

@@ -10,2 +11,1 @@ pytest==4.6.1

tox==3.12.1
twine==1.13.0

@@ -97,7 +97,2 @@ from __future__ import unicode_literals

__all__ = [
'input',
'merge_outputs',
'output',
'overwrite_output',
]
__all__ = ['input', 'merge_outputs', 'output', 'overwrite_output']

@@ -24,3 +24,5 @@ from __future__ import unicode_literals

"""
return FilterNode(stream_spec, filter_name, args=args, kwargs=kwargs, max_inputs=None)
return FilterNode(
stream_spec, filter_name, args=args, kwargs=kwargs, max_inputs=None
)

@@ -148,3 +150,8 @@

kwargs['eof_action'] = eof_action
return FilterNode([main_parent_node, overlay_parent_node], overlay.__name__, kwargs=kwargs, max_inputs=2).stream()
return FilterNode(
[main_parent_node, overlay_parent_node],
overlay.__name__,
kwargs=kwargs,
max_inputs=2,
).stream()

@@ -185,6 +192,3 @@

return FilterNode(
stream,
crop.__name__,
args=[width, height, x, y],
kwargs=kwargs
stream, crop.__name__, args=[width, height, x, y], kwargs=kwargs
).stream()

@@ -215,3 +219,5 @@

kwargs['t'] = thickness
return FilterNode(stream, drawbox.__name__, args=[x, y, width, height, color], kwargs=kwargs).stream()
return FilterNode(
stream, drawbox.__name__, args=[x, y, width, height, color], kwargs=kwargs
).stream()

@@ -392,4 +398,6 @@

raise ValueError(
'Expected concat input streams to have length multiple of {} (v={}, a={}); got {}'
.format(stream_count, video_stream_count, audio_stream_count, len(streams)))
'Expected concat input streams to have length multiple of {} (v={}, a={}); got {}'.format(
stream_count, video_stream_count, audio_stream_count, len(streams)
)
)
kwargs['n'] = int(len(streams) / stream_count)

@@ -396,0 +404,0 @@ return FilterNode(streams, concat.__name__, kwargs=kwargs, max_inputs=None).stream()

@@ -27,4 +27,2 @@ import json

__all__ = [
'probe',
]
__all__ = ['probe']

@@ -11,6 +11,3 @@ from __future__ import unicode_literals

from ._ffmpeg import (
input,
output,
)
from ._ffmpeg import input, output
from .nodes import (

@@ -28,3 +25,5 @@ get_stream_spec_nodes,

def __init__(self, cmd, stdout, stderr):
super(Error, self).__init__('{} error (see stderr output for detail)'.format(cmd))
super(Error, self).__init__(
'{} error (see stderr output for detail)'.format(cmd)
)
self.stdout = stdout

@@ -74,5 +73,11 @@ self.stderr = stderr

outgoing_edges = get_outgoing_edges(node, outgoing_edge_map)
inputs = [_format_input_stream_name(stream_name_map, edge) for edge in incoming_edges]
outputs = [_format_output_stream_name(stream_name_map, edge) for edge in outgoing_edges]
filter_spec = '{}{}{}'.format(''.join(inputs), node._get_filter(outgoing_edges), ''.join(outputs))
inputs = [
_format_input_stream_name(stream_name_map, edge) for edge in incoming_edges
]
outputs = [
_format_output_stream_name(stream_name_map, edge) for edge in outgoing_edges
]
filter_spec = '{}{}{}'.format(
''.join(inputs), node._get_filter(outgoing_edges), ''.join(outputs)
)
return filter_spec

@@ -85,3 +90,3 @@

outgoing_edge_map = outgoing_edge_maps[upstream_node]
for upstream_label, downstreams in list(outgoing_edge_map.items()):
for upstream_label, downstreams in sorted(outgoing_edge_map.items()):
if len(downstreams) > 1:

@@ -91,3 +96,6 @@ # TODO: automatically insert `splits` ahead of time via graph transformation.

'Encountered {} with multiple outgoing edges with same upstream label {!r}; a '
'`split` filter is probably required'.format(upstream_node, upstream_label))
'`split` filter is probably required'.format(
upstream_node, upstream_label
)
)
stream_name_map[upstream_node, upstream_label] = 's{}'.format(stream_count)

@@ -99,3 +107,6 @@ stream_count += 1

_allocate_filter_stream_names(filter_nodes, outgoing_edge_maps, stream_name_map)
filter_specs = [_get_filter_spec(node, outgoing_edge_maps[node], stream_name_map) for node in filter_nodes]
filter_specs = [
_get_filter_spec(node, outgoing_edge_maps[node], stream_name_map)
for node in filter_nodes
]
return ';'.join(filter_specs)

@@ -118,3 +129,5 @@

# edge = node.incoming_edges[0]
stream_name = _format_input_stream_name(stream_name_map, edge, is_final_arg=True)
stream_name = _format_input_stream_name(
stream_name_map, edge, is_final_arg=True
)
if stream_name != '0' or len(node.incoming_edges) > 1:

@@ -133,3 +146,5 @@ args += ['-map', stream_name]

video_size = kwargs.pop('video_size')
if not isinstance(video_size, basestring) and isinstance(video_size, collections.Iterable):
if not isinstance(video_size, basestring) and isinstance(
video_size, collections.Iterable
):
video_size = '{}x{}'.format(video_size[0], video_size[1])

@@ -158,3 +173,5 @@ args += ['-video_size', video_size]

args += ['-filter_complex', filter_arg]
args += reduce(operator.add, [_get_output_args(node, stream_name_map) for node in output_nodes])
args += reduce(
operator.add, [_get_output_args(node, stream_name_map) for node in output_nodes]
)
args += reduce(operator.add, [_get_global_args(node) for node in global_nodes], [])

@@ -187,4 +204,10 @@ if overwrite_output:

def run_async(
stream_spec, cmd='ffmpeg', pipe_stdin=False, pipe_stdout=False, pipe_stderr=False,
quiet=False, overwrite_output=False):
stream_spec,
cmd='ffmpeg',
pipe_stdin=False,
pipe_stdout=False,
pipe_stderr=False,
quiet=False,
overwrite_output=False,
):
"""Asynchronously invoke ffmpeg for the supplied node graph.

@@ -272,3 +295,4 @@

return subprocess.Popen(
args, stdin=stdin_stream, stdout=stdout_stream, stderr=stderr_stream)
args, stdin=stdin_stream, stdout=stdout_stream, stderr=stderr_stream
)

@@ -278,4 +302,10 @@

def run(
stream_spec, cmd='ffmpeg', capture_stdout=False, capture_stderr=False, input=None,
quiet=False, overwrite_output=False):
stream_spec,
cmd='ffmpeg',
capture_stdout=False,
capture_stderr=False,
input=None,
quiet=False,
overwrite_output=False,
):
"""Invoke ffmpeg for the supplied node graph.

@@ -311,8 +341,2 @@

__all__ = [
'compile',
'Error',
'get_args',
'run',
'run_async',
]
__all__ = ['compile', 'Error', 'get_args', 'run', 'run_async']

@@ -37,4 +37,7 @@ from __future__ import unicode_literals

if sys.version_info.major >= 3:
class basestring(with_metaclass(BaseBaseString)):
pass
else:

@@ -56,3 +59,6 @@ # noinspection PyUnresolvedReferences,PyCompatibility

elif isinstance(item, dict):
kv_pairs = ['{}: {}'.format(_recursive_repr(k), _recursive_repr(item[k])) for k in sorted(item)]
kv_pairs = [
'{}: {}'.format(_recursive_repr(k), _recursive_repr(item[k]))
for k in sorted(item)
]
result = '{' + ', '.join(kv_pairs) + '}'

@@ -59,0 +65,0 @@ else:

@@ -37,4 +37,6 @@ from __future__ import unicode_literals

except ImportError:
raise ImportError('failed to import graphviz; please make sure graphviz is installed (e.g. `pip install '
'graphviz`)')
raise ImportError(
'failed to import graphviz; please make sure graphviz is installed (e.g. `pip install '
'graphviz`)'
)

@@ -53,3 +55,5 @@ show_labels = kwargs.pop('show_labels', True)

if len(list(kwargs.keys())) != 0:
raise ValueError('Invalid kwargs key(s): {}'.format(', '.join(list(kwargs.keys()))))
raise ValueError(
'Invalid kwargs key(s): {}'.format(', '.join(list(kwargs.keys())))
)

@@ -62,7 +66,11 @@ for node in sorted_nodes:

lines += ['{!r}'.format(arg) for arg in node.args]
lines += ['{}={!r}'.format(key, node.kwargs[key]) for key in sorted(node.kwargs)]
lines += [
'{}={!r}'.format(key, node.kwargs[key]) for key in sorted(node.kwargs)
]
node_text = '\n'.join(lines)
else:
node_text = node.short_repr
graph.node(str(hash(node)), node_text, shape='box', style='filled', fillcolor=color)
graph.node(
str(hash(node)), node_text, shape='box', style='filled', fillcolor=color
)
outgoing_edge_map = outgoing_edge_maps.get(node, {})

@@ -76,3 +84,7 @@

if show_labels and (up_label is not None or down_label is not None or up_selector is not None):
if show_labels and (
up_label is not None
or down_label is not None
or up_selector is not None
):
if up_label is None:

@@ -100,4 +112,2 @@ up_label = ''

__all__ = [
'view',
]
__all__ = ['view']

@@ -73,3 +73,12 @@ from __future__ import unicode_literals

DagEdge = namedtuple('DagEdge', ['downstream_node', 'downstream_label', 'upstream_node', 'upstream_label', 'upstream_selector'])
DagEdge = namedtuple(
'DagEdge',
[
'downstream_node',
'downstream_label',
'upstream_node',
'upstream_label',
'upstream_selector',
],
)

@@ -81,3 +90,11 @@

upstream_node, upstream_label, upstream_selector = upstream_info
edges += [DagEdge(downstream_node, downstream_label, upstream_node, upstream_label, upstream_selector)]
edges += [
DagEdge(
downstream_node,
downstream_label,
upstream_node,
upstream_label,
upstream_selector,
)
]
return edges

@@ -88,6 +105,14 @@

edges = []
for upstream_label, downstream_infos in list(outgoing_edge_map.items()):
for upstream_label, downstream_infos in sorted(outgoing_edge_map.items()):
for downstream_info in downstream_infos:
downstream_node, downstream_label, downstream_selector = downstream_info
edges += [DagEdge(downstream_node, downstream_label, upstream_node, upstream_label, downstream_selector)]
edges += [
DagEdge(
downstream_node,
downstream_label,
upstream_node,
upstream_label,
downstream_selector,
)
]
return edges

@@ -105,3 +130,11 @@

upstream_node, upstream_label, upstream_selector = upstream_info
hashes += [hash(x) for x in [downstream_label, upstream_node, upstream_label, upstream_selector]]
hashes += [
hash(x)
for x in [
downstream_label,
upstream_node,
upstream_label,
upstream_selector,
]
]
return hashes

@@ -137,3 +170,5 @@

formatted_props = ['{!r}'.format(arg) for arg in self.args]
formatted_props += ['{}={!r}'.format(key, self.kwargs[key]) for key in sorted(self.kwargs)]
formatted_props += [
'{}={!r}'.format(key, self.kwargs[key]) for key in sorted(self.kwargs)
]
out = '{}({})'.format(self.name, ', '.join(formatted_props))

@@ -165,3 +200,9 @@ if include_hash:

def visit(upstream_node, upstream_label, downstream_node, downstream_label, downstream_selector=None):
def visit(
upstream_node,
upstream_label,
downstream_node,
downstream_label,
downstream_selector=None,
):
if upstream_node in marked_nodes:

@@ -173,3 +214,5 @@ raise RuntimeError('Graph is not a DAG')

outgoing_edge_infos = outgoing_edge_map.get(upstream_label, [])
outgoing_edge_infos += [(downstream_node, downstream_label, downstream_selector)]
outgoing_edge_infos += [
(downstream_node, downstream_label, downstream_selector)
]
outgoing_edge_map[upstream_label] = outgoing_edge_infos

@@ -181,3 +224,9 @@ outgoing_edge_maps[upstream_node] = outgoing_edge_map

for edge in upstream_node.incoming_edges:
visit(edge.upstream_node, edge.upstream_label, edge.downstream_node, edge.downstream_label, edge.upstream_selector)
visit(
edge.upstream_node,
edge.upstream_label,
edge.downstream_node,
edge.downstream_label,
edge.upstream_selector,
)
marked_nodes.remove(upstream_node)

@@ -184,0 +233,0 @@ sorted_nodes.append(upstream_node)

@@ -26,6 +26,11 @@ from __future__ import unicode_literals

def __init__(self, upstream_node, upstream_label, node_types, upstream_selector=None):
def __init__(
self, upstream_node, upstream_label, node_types, upstream_selector=None
):
if not _is_of_types(upstream_node, node_types):
raise TypeError('Expected upstream node to be of one of the following type(s): {}; got {}'.format(
_get_types_str(node_types), type(upstream_node)))
raise TypeError(
'Expected upstream node to be of one of the following type(s): {}; got {}'.format(
_get_types_str(node_types), type(upstream_node)
)
)
self.node = upstream_node

@@ -46,3 +51,5 @@ self.label = upstream_label

selector = ':{}'.format(self.selector)
out = '{}[{!r}{}] <{}>'.format(node_repr, self.label, selector, self.node.short_hash)
out = '{}[{!r}{}] <{}>'.format(
node_repr, self.label, selector, self.node.short_hash
)
return out

@@ -151,5 +158,13 @@

if min_inputs is not None and len(stream_map) < min_inputs:
raise ValueError('Expected at least {} input stream(s); got {}'.format(min_inputs, len(stream_map)))
raise ValueError(
'Expected at least {} input stream(s); got {}'.format(
min_inputs, len(stream_map)
)
)
elif max_inputs is not None and len(stream_map) > max_inputs:
raise ValueError('Expected at most {} input stream(s); got {}'.format(max_inputs, len(stream_map)))
raise ValueError(
'Expected at most {} input stream(s); got {}'.format(
max_inputs, len(stream_map)
)
)

@@ -160,4 +175,7 @@ @classmethod

if not _is_of_types(stream, incoming_stream_types):
raise TypeError('Expected incoming stream(s) to be of one of the following types: {}; got {}'
.format(_get_types_str(incoming_stream_types), type(stream)))
raise TypeError(
'Expected incoming stream(s) to be of one of the following types: {}; got {}'.format(
_get_types_str(incoming_stream_types), type(stream)
)
)

@@ -168,7 +186,20 @@ @classmethod

for downstream_label, upstream in list(stream_map.items()):
incoming_edge_map[downstream_label] = (upstream.node, upstream.label, upstream.selector)
incoming_edge_map[downstream_label] = (
upstream.node,
upstream.label,
upstream.selector,
)
return incoming_edge_map
def __init__(self, stream_spec, name, incoming_stream_types, outgoing_stream_type, min_inputs,
max_inputs, args=[], kwargs={}):
def __init__(
self,
stream_spec,
name,
incoming_stream_types,
outgoing_stream_type,
min_inputs,
max_inputs,
args=[],
kwargs={},
):
stream_map = get_stream_map(stream_spec)

@@ -211,4 +242,5 @@ self.__check_input_len(stream_map, min_inputs, max_inputs)

def __init__(self, upstream_node, upstream_label, upstream_selector=None):
super(FilterableStream, self).__init__(upstream_node, upstream_label, {InputNode, FilterNode},
upstream_selector)
super(FilterableStream, self).__init__(
upstream_node, upstream_label, {InputNode, FilterNode}, upstream_selector
)

@@ -229,3 +261,3 @@

args=args,
kwargs=kwargs
kwargs=kwargs,
)

@@ -249,3 +281,3 @@

args=args,
kwargs=kwargs
kwargs=kwargs,
)

@@ -290,3 +322,3 @@

args=args,
kwargs=kwargs
kwargs=kwargs,
)

@@ -301,4 +333,8 @@

def __init__(self, upstream_node, upstream_label, upstream_selector=None):
super(OutputStream, self).__init__(upstream_node, upstream_label, {OutputNode, GlobalNode, MergeOutputsNode},
upstream_selector=upstream_selector)
super(OutputStream, self).__init__(
upstream_node,
upstream_label,
{OutputNode, GlobalNode, MergeOutputsNode},
upstream_selector=upstream_selector,
)

@@ -315,3 +351,3 @@

min_inputs=1,
max_inputs=None
max_inputs=None,
)

@@ -331,3 +367,3 @@

args=args,
kwargs=kwargs
kwargs=kwargs,
)

@@ -353,4 +389,2 @@

__all__ = [
'Stream',
]
__all__ = ['Stream']
Metadata-Version: 2.1
Name: ffmpeg-python
Version: 0.1.18
Version: 0.2.0
Summary: Python bindings for FFmpeg - with complex filtering support

@@ -9,3 +9,3 @@ Home-page: https://github.com/kkroening/ffmpeg-python

License: UNKNOWN
Download-URL: https://github.com/kkroening/ffmpeg-python/archive/v0.1.18.zip
Download-URL: https://github.com/kkroening/ffmpeg-python/archive/v0.2.0.zip
Description: ffmpeg-python: Python bindings for FFmpeg

@@ -17,3 +17,3 @@ =========================================

Keywords: -vf,a/v,audio,dsp,FFmpeg,ffmpeg,ffprobe,filtering,filter_complex,movie,render,signals,sound,streaming,streams,vf,video,wrapper,aac,ac3,avi,bmpflac,gif,mov,mp3,mp4,png,raw,rawvideo,wav,.aac,.ac3,.avi,.bmpflac,.gif,.mov,.mp3,.mp4,.png,.raw,.rawvideo,.wav
Keywords: -vf,a/v,audio,dsp,FFmpeg,ffmpeg,ffprobe,filtering,filter_complex,movie,render,signals,sound,streaming,streams,vf,video,wrapper,aac,ac3,avi,bmp,flac,gif,mov,mp3,mp4,png,raw,rawvideo,wav,.aac,.ac3,.avi,.bmp,.flac,.gif,.mov,.mp3,.mp4,.png,.raw,.rawvideo,.wav
Platform: UNKNOWN

@@ -20,0 +20,0 @@ Classifier: Intended Audience :: Developers

+2
-0

@@ -243,2 +243,4 @@ # ffmpeg-python: Python bindings for FFmpeg

- [Fabrice Bellard](https://bellard.org/)
- [The FFmpeg team](https://ffmpeg.org/donations.html)
- [Arne de Laat](https://github.com/153957)

@@ -245,0 +247,0 @@ - [Davide Depau](https://github.com/depau)

from setuptools import setup
from textwrap import dedent
version = '0.1.18'
download_url = 'https://github.com/kkroening/ffmpeg-python/archive/v{}.zip'.format(version)
version = '0.2.0'
download_url = 'https://github.com/kkroening/ffmpeg-python/archive/v{}.zip'.format(
version
)
long_description = dedent("""\
long_description = dedent(
'''\
ffmpeg-python: Python bindings for FFmpeg

@@ -13,3 +16,4 @@ =========================================

:API Reference: https://kkroening.github.io/ffmpeg-python/
""")
'''
)

@@ -21,3 +25,3 @@

'avi',
'bmp'
'bmp',
'flac',

@@ -75,2 +79,3 @@ 'gif',

'future==0.17.1',
'numpy==1.16.4',
'pytest-mock==1.10.4',

@@ -80,4 +85,3 @@ 'pytest==4.6.1',

'tox==3.12.1',
'twine==1.13.0',
],
]
},

@@ -84,0 +88,0 @@ classifiers=[