import json | |
import subprocess | |
from ._run import Error | |
from ._utils import convert_kwargs_to_cmd_line_args | |
def probe(filename, cmd='ffprobe', **kwargs): | |
"""Run ffprobe on the specified file and return a JSON representation of the output. | |
Raises: | |
:class:`ffmpeg.Error`: if ffprobe returns a non-zero exit code, | |
an :class:`Error` is returned with a generic error message. | |
The stderr output can be retrieved by accessing the | |
``stderr`` property of the exception. | |
""" | |
args = [cmd, '-show_format', '-show_streams', '-of', 'json'] | |
args += convert_kwargs_to_cmd_line_args(kwargs) | |
args += [filename] | |
p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) | |
out, err = p.communicate() | |
if p.returncode != 0: | |
raise Error('ffprobe', out, err) | |
return json.loads(out.decode('utf-8')) | |
__all__ = ['probe'] | |