Giter VIP home page Giter VIP logo

ffprobe-python's People

Contributors

dheerendrarathor avatar dongwon00kim avatar gbstack avatar haitch avatar m3dinar avatar maniactwister avatar norus avatar simonh10 avatar vasiliyrusin avatar xaviertolza avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

ffprobe-python's Issues

Chapters

When I try to run against a MKV with chapters I get a error from line 75: AttributeError: 'NoneType' object has no attribute 'groups'

Would like duration in milliseconds rather than rounded seconds.

I would like FFProbe to tell me the duration in milliseconds. I created a workaround as follows, but would like native support:

mp4_data = FFProbe(mp4_file)
duration_s = mp4_data.__dict__['metadata']['Duration']

# convert to duration by pretending it's a time since 00:00:00.00
zero = datetime.datetime.strptime('00:00:00.00', '%H:%M:%S.%f')
duration = datetime.datetime.strptime(duration_s, '%H:%M:%S.%f') - zero
total_duration += duration.seconds * 1000 + duration.microseconds / 1000

AttributeError: 'NoneType' object has no attribute 'groups'

Hey folks,

this lib seems exactly what im looking for but Im unable to properly parse all information using the following snipped:

#!/usr/bin/env python

from ffprobe import FFProbe

# Local file
metadata=FFProbe('/home/mike/Desktop/2 Wie werde ich ein Hase.m4v')

for stream in metadata.streams:
    if stream.is_video():
        print('Stream contains {} frames.'.format(stream.frames()))

I always get back the following error:

File "/home/mike/Documents/PyCharm/Strics.io/strics_app/strics_app/meta_scrape.py", line 6, in <module>
    metadata=FFProbe('/home/mike/Desktop/2 Wie werde ich ein Hase.m4v')
  File "/home/claris/Documents/PyCharm/Strics.io/strics_app/venv/lib/python3.9/site-packages/ffprobe/ffprobe.py", line 75, in __init__
    self.metadata[m.groups()[0]] = m.groups()[1].strip()
AttributeError: 'NoneType' object has no attribute 'groups'

can smb help ?

ImportError: cannot import name 'FFProbe' from partially initialized module 'ffprobe'

Hi! I just installed your ffprobe wrapper directly from PyPi, but when I tried to use it (as per the example), I get the following error:

>>> from ffprobe import FFProbe
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\sgraaf\AppData\Roaming\Python\Python39\site-packages\ffprobe\__init__.py", line 1, in <module>
    from ffprobe import FFProbe
ImportError: cannot import name 'FFProbe' from partially initialized module 'ffprobe' (most likely due to a circular import) (C:\Users\sgraaf\AppData\Roaming\Python\Python39\site-packages\ffprobe\__init__.py)

I am using ffprobe 0.5 w/ Python 3.9.0 on Windows 10 X64.

Error probing file

Error:

(python-v-env) hcruz@Hugos-MacBook-Pro personal-file-processor % python3 demo.py
Traceback (most recent call last):
File "demo.py", line 38, in
video_creation_datetime("/Users/hcruz/Documents/development/python/personal-file-processor/IMG_0119.MOV")
File "demo.py", line 22, in video_creation_datetime
metadata=FFProbe(filepath)
File "/Users/hcruz/Documents/development/python/python-v-env/lib/python3.8/site-packages/ffprobe/ffprobe.py", line 54, in init
self.streams.append(FFStream(data_lines))
File "/Users/hcruz/Documents/development/python/python-v-env/lib/python3.8/site-packages/ffprobe/ffprobe.py", line 114, in init
self.dict.update({key: value for key, value, *_ in [line.strip().split('=')]})
File "/Users/hcruz/Documents/development/python/python-v-env/lib/python3.8/site-packages/ffprobe/ffprobe.py", line 114, in
self.dict.update({key: value for key, value, *_ in [line.strip().split('=')]})
ValueError: not enough values to unpack (expected at least 2, got 1)

FFPROBE OUTPUT
(python-v-env) hcruz@Hugos-MacBook-Pro personal-file-processor % ffprobe IMG_0119.MOV
ffprobe version 4.3.1 Copyright (c) 2007-2020 the FFmpeg developers
built with Apple clang version 12.0.0 (clang-1200.0.32.28)
configuration: --prefix=/usr/local/Cellar/ffmpeg/4.3.1_9 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-libsoxr --enable-videotoolbox --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack
libavutil 56. 51.100 / 56. 51.100
libavcodec 58. 91.100 / 58. 91.100
libavformat 58. 45.100 / 58. 45.100
libavdevice 58. 10.100 / 58. 10.100
libavfilter 7. 85.100 / 7. 85.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 7.100 / 5. 7.100
libswresample 3. 7.100 / 3. 7.100
libpostproc 55. 7.100 / 55. 7.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'IMG_0119.MOV':
Metadata:
major_brand : qt
minor_version : 0
compatible_brands: qt
creation_time : 2021-01-11T09:59:47.000000Z
com.apple.quicktime.location.ISO6709: +10.7792+106.7464+000.499/
com.apple.quicktime.make: Apple
com.apple.quicktime.model: iPhone 6
com.apple.quicktime.software: 12.5
com.apple.quicktime.creationdate: 2021-01-11T16:59:47+0700
Duration: 00:00:02.37, start: 0.000000, bitrate: 11021 kb/s
Stream #0:0(und): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720, 10880 kb/s, 30.02 fps, 30 tbr, 600 tbn, 1200 tbc (default)
Metadata:
rotate : 180
creation_time : 2021-01-11T09:59:47.000000Z
handler_name : Core Media Video
encoder : H.264
Side data:
displaymatrix: rotation of -180.00 degrees
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 90 kb/s (default)
Metadata:
creation_time : 2021-01-11T09:59:47.000000Z
handler_name : Core Media Audio
Stream #0:2(und): Data: none (mebx / 0x7862656D), 23 kb/s (default)
Metadata:
creation_time : 2021-01-11T09:59:47.000000Z
handler_name : Core Media Metadata
Stream #0:3(und): Data: none (mebx / 0x7862656D), 0 kb/s (default)
Metadata:
creation_time : 2021-01-11T09:59:47.000000Z
handler_name : Core Media Metadata
Unsupported codec with id 0 for input stream 2
Unsupported codec with id 0 for input stream 3

ValueError: not enough values to unpack (expected at least 2, got 1)

Traceback (most recent call last):
  File "U:/git/Documents/ts_download/test4.py", line 5, in get_video_info
    metadata = FFProbe(file)
not enough values to unpack (expected at least 2, got 1)
  File "C:\Python\Python38-32\lib\site-packages\ffprobe\ffprobe.py", line 54, in __init__
    self.streams.append(FFStream(data_lines))
False
  File "C:\Python\Python38-32\lib\site-packages\ffprobe\ffprobe.py", line 114, in __init__
    self.__dict__.update({key: value for key, value, *_ in [line.strip().split('=')]})
  File "C:\Python\Python38-32\lib\site-packages\ffprobe\ffprobe.py", line 114, in <dictcomp>
    self.__dict__.update({key: value for key, value, *_ in [line.strip().split('=')]})
ValueError: not enough values to unpack (expected at least 2, got 1)
ffprobe -v error -show_streams -print_format json media\demo\The.Elephant.Queen.2019.1080p_de.mp4
{
    "streams": [
        {
            "index": 0,
            "codec_name": "h264",
            "codec_long_name": "H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10",
            "profile": "High",
            "codec_type": "video",
            "codec_time_base": "6211676/297862611",
            "codec_tag_string": "avc1",
            "codec_tag": "0x31637661",
            "width": 1920,
            "height": 1038,
            "coded_width": 1920,
            "coded_height": 1040,
            "has_b_frames": 1,
            "sample_aspect_ratio": "1:1",
            "display_aspect_ratio": "320:173",
            "pix_fmt": "yuv420p",
            "level": 40,
            "color_range": "tv",
            "color_space": "bt709",
            "color_transfer": "bt709",
            "color_primaries": "bt709",
            "chroma_location": "topleft",
            "refs": 1,
            "is_avc": "true",
            "nal_length_size": "4",
            "r_frame_rate": "24000/1001",
            "avg_frame_rate": "2139968000/89254491",
            "time_base": "1/16000",
            "start_pts": 0,
            "start_time": "0.000000",
            "duration_ts": 89212256,
            "duration": "5575.766000",
            "bit_rate": "9878894",
            "bits_per_raw_sample": "8",
            "nb_frames": "133748",
            "disposition": {
                "default": 1,
                "dub": 0,
                "original": 0,
                "comment": 0,
                "lyrics": 0,
                "karaoke": 0,
                "forced": 0,
                "hearing_impaired": 0,
                "visual_impaired": 0,
                "clean_effects": 0,
                "attached_pic": 0,
                "timed_thumbnails": 0
            },
            "tags": {
                "language": "eng",
                "handler_name": "VideoHandler"
            }
        },
        {
            "index": 1,
            "codec_name": "ac3",
            "codec_long_name": "ATSC A/52A (AC-3)",
            "codec_type": "audio",
            "codec_time_base": "1/48000",
            "codec_tag_string": "ac-3",
            "codec_tag": "0x332d6361",
            "sample_fmt": "fltp",
            "sample_rate": "48000",
            "channels": 6,
            "channel_layout": "5.1(side)",
            "bits_per_sample": 0,
            "dmix_mode": "-1",
            "ltrt_cmixlev": "-1.000000",
            "ltrt_surmixlev": "-1.000000",
            "loro_cmixlev": "-1.000000",
            "loro_surmixlev": "-1.000000",
            "r_frame_rate": "0/0",
            "avg_frame_rate": "0/0",
            "time_base": "1/48000",
            "start_pts": 0,
            "start_time": "0.000000",
            "duration_ts": 267638784,
            "duration": "5575.808000",
            "bit_rate": "384000",
            "nb_frames": "174326",
            "disposition": {
                "default": 1,
                "dub": 0,
                "original": 0,
                "comment": 0,
                "lyrics": 0,
                "karaoke": 0,
                "forced": 0,
                "hearing_impaired": 0,
                "visual_impaired": 0,
                "clean_effects": 0,
                "attached_pic": 0,
                "timed_thumbnails": 0
            },
            "tags": {
                "language": "eng",
                "handler_name": "SoundHandler"
            },
            "side_data_list": [
                {
                    "side_data_type": "Audio Service Type"
                }
            ]
        }
    ]
}

ValueError: not enough values to unpack

Hello, I am trying to use this plugin but when I use it I get this error:

Traceback (most recent call last):
File "/home/john/Projects/autotranscoder/./transcoder.py", line 12, in
FFProbe(file)
File "/home/john/.local/lib/python3.9/site-packages/ffprobe/ffprobe.py", line 54, in init
self.streams.append(FFStream(data_lines))
File "/home/john/.local/lib/python3.9/site-packages/ffprobe/ffprobe.py", line 114, in init
self.dict.update({key: value for key, value, *_ in [line.strip().split('=')]})
File "/home/john/.local/lib/python3.9/site-packages/ffprobe/ffprobe.py", line 114, in
self.dict.update({key: value for key, value, *_ in [line.strip().split('=')]})
ValueError: not enough values to unpack (expected at least 2, got 1)

This is my code

#!/usr/bin/env python

from ffprobe import FFProbe
import os

path = "/home/videos/"

for files in os.listdir(path):
    file = os.path.join(path, files)
    if os.path.isfile(file):
        FFProbe(file)
        print(metadata)

I am 100% sure that directory exists and for loop generates valid paths to video files.

How can I fix it ?

Parsing-Error when probing wav-files

It seems, probing wav files (or other files that don't have a video stream) seems to not work. I tried the same with a mov file and it worked like a charm.

File "C:\Users\MYUSER\AppData\Local\pypoetry\Cache\virtualenvs\MYPROJECT-R5fSZ7UV-py3.8\lib\site-packages\ffprobe\ffprobe.py", line 75, in __init__
    self.metadata[m.groups()[0]] = m.groups()[1].strip()
AttributeError: 'NoneType' object has no attribute 'groups'

Installing with pip is broken with setuptools 59.x.y

Hi,

When I have installed python package setuptools 59.x.y version (latest), I am unable to build this ffprobe package. This has to do with that you read a readme file for description: https://github.com/gbstack/ffprobe-python/blob/master/setup.py#L7

And apparently, it is not allowed to have new lines in there with setup tools 59.x.y version.

pip install git+https://github.com/gbstack/ffprobe-python
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting git+https://github.com/gbstack/ffprobe-python
  Cloning https://github.com/gbstack/ffprobe-python to /tmp/pip-req-build-ot7_lcsu
  Running command git clone --filter=blob:none -q https://github.com/gbstack/ffprobe-python /tmp/pip-req-build-ot7_lcsu
  Resolved https://github.com/gbstack/ffprobe-python to commit 6b499f63e3db0293ae58f99c1726cd0aabe2bd12
  Preparing metadata (setup.py) ... error
  ERROR: Command errored out with exit status 1:
   command: /home/pi/TerrariumPI/venv/bin/python3 -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-req-build-ot7_lcsu/setup.py'"'"'; __file__='"'"'/tmp/pip-req-build-ot7_lcsu/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-xj02ahpt
       cwd: /tmp/pip-req-build-ot7_lcsu/
  Complete output (26 lines):
  running egg_info
  creating /tmp/pip-pip-egg-info-xj02ahpt/ffprobe_python.egg-info
  writing /tmp/pip-pip-egg-info-xj02ahpt/ffprobe_python.egg-info/PKG-INFO
  Traceback (most recent call last):
    File "<string>", line 1, in <module>
    File "/tmp/pip-req-build-ot7_lcsu/setup.py", line 38, in <module>
      'Topic :: Software Development :: Libraries'
    File "/home/pi/TerrariumPI/venv/lib/python3.7/site-packages/setuptools/__init__.py", line 153, in setup
      return distutils.core.setup(**attrs)
    File "/usr/lib/python3.7/distutils/core.py", line 148, in setup
      dist.run_commands()
    File "/usr/lib/python3.7/distutils/dist.py", line 966, in run_commands
      self.run_command(cmd)
    File "/usr/lib/python3.7/distutils/dist.py", line 985, in run_command
      cmd_obj.run()
    File "/home/pi/TerrariumPI/venv/lib/python3.7/site-packages/setuptools/command/egg_info.py", line 292, in run
      writer(self, ep.name, os.path.join(self.egg_info, ep.name))
    File "/home/pi/TerrariumPI/venv/lib/python3.7/site-packages/setuptools/command/egg_info.py", line 656, in write_pkg_info
      metadata.write_pkg_info(cmd.egg_info)
    File "/usr/lib/python3.7/distutils/dist.py", line 1117, in write_pkg_info
      self.write_pkg_file(pkg_info)
    File "/home/pi/TerrariumPI/venv/lib/python3.7/site-packages/setuptools/dist.py", line 167, in write_pkg_file
      write_field('Summary', single_line(self.get_description()))
    File "/home/pi/TerrariumPI/venv/lib/python3.7/site-packages/setuptools/dist.py", line 151, in single_line
      raise ValueError('Newlines are not allowed')
  ValueError: Newlines are not allowed
  ----------------------------------------
WARNING: Discarding git+https://github.com/gbstack/ffprobe-python. Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.

Where you see the Value Error: Newlines are not allowed

When I downgrade to setup tools 58.x.y version, I can build this package. So it looks like the setup tools is changing their behavior about description fields. Could you have a look into this?

Thanks

Support remote video files

ffprobe supports probing remote files over HTTP. It would be great if this library could too.

Right now, if you try and load a remote file you get an OS Error because the file doesn't exist on disk.

>>> from ffprobe import FFProbe
>>> metadata = FFProbe("https://example.com/movie.mp4")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/example-user/virtual-env/lib/python3.6/site-packages/ffprobe/ffprobe.py", line 101, in __init__
    raise IOError('No such media file ' + self.path_to_video)
OSError: No such media file https://example.com/movie.mp4

Trying to convert m4a to wav format using Python code from an AML pipeline. When run from an AML pipeline on a Compute Cluster it fails stating: ImportError: cannot import name 'FFProbe' from partially initialized module 'ffprobe'

I have an issue - The below code works fine when run locally on a Compute Instance (NC6 GPU Series Compute).

#!/usr/bin/env python

from ffprobe import FFProbe
from pydub import AudioSegment

mp4a_version = AudioSegment.from_file("format_test.m4a", "m4a")
dst_name = "test.wav"

exprt_file = mp4a_version.export(dst_name, format='wav')**

When run on a AML pipeline on a Compute Cluster (NC6 series GPU series Compute), it throws an error stating -

ImportError: cannot import name 'FFProbe' from partially initialized module 'ffprobe' (most likely due to a circular import) (/opt/conda/envs/ptca/lib/python3.8/site-packages/ffprobe/init.py)

Please note that the pipeline runs on a curated environment with the following configuration -

Docker

This environment is an alias for

https://github.com/Azure/azureml-assets/tree/main/assets/training/general/environments/acpt-pytorch-1.13-cuda11.7

FROM mcr.microsoft.com/azureml/curated/acpt-pytorch-1.13-cuda11.7:latest

Install pip dependencies

COPY requirements.txt .
RUN pip install -r requirements.txt --no-cache-dir

requirements.txt

azureml-core
matplotlib
ffmpeg-python
pydub

The curated environment builds fine without errors, BUT, the pipeline still fails with - ImportError: cannot import name 'FFProbe' from partially initialized module 'ffprobe'

How to FIX this?
Any specific version of ffprobe we should PIN with this image "mcr.microsoft.com/azureml/curated/acpt-pytorch-1.13-cuda11.7:latest" ?
Any ideas?

SRT protocol

Tried using ffprobe-python to check SRT stream.
Unfortunately because of: if os.path.isfile(self.path_to_video) or self.path_to_video.startswith('http’): it didn't work.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.