How to find duration of a video file using mediainfo in seconds or other formats?

后端 未结 3 592
时光说笑
时光说笑 2020-12-28 10:51

How can I find duration of a video file in miliseconds i.e. in integer in deterministic way. I have used ffprobe to get the duration but it doesn\'t give duration for all fi

相关标签:
3条回答
  • 2020-12-28 11:23

    Use the following commands:

    i) To get the duration of video stream:

    $ mediainfo --Inform="Video;%Duration%"  [inputfile]
    

    ii) To get the duration of the media file:

    $ mediainfo --Inform="General;%Duration%" [inputfile]
    

    iii) To get the duration of audio stream only:

    $ mediainfo --Inform="Audio;%Duration%" [inputfile]
    

    iv) To get values of more than one parameter:

    $ mediainfo --Inform="Video;%Width%,%Height%,%BitRate%,%FrameRate%" [inputfile]
    

    Output would be something like this:

    1280,720,3000000,30.0
    
    0 讨论(0)
  • 2020-12-28 11:30

    As offered by iota to use mediainfo --Inform="Video;%Duration%" [inputfile], possible but returns weird results.

    For example, for video with duration 31s 565ms the output of given command would be:

    31565
    

    It wasn't suitable for me and I came up to the following solution:

    mediainfo --Inform="Video;%Duration/String3%" inputExample.webm
    

    Returned value is:

    00:00:31.565
    

    After all, you could just format returned value with, let's say PHP, to convert it to seconds, e.g.:

    $parsed = date_parse( '00:00:31.565' );
    echo $parsed['hour'] * 3600 + $parsed['minute'] * 60 + $parsed['second'];
    

    Example

    0 讨论(0)
  • 2020-12-28 11:36

    we can also use ffmpeg to get the duration of any video or audio files.

    To install ffmpeg follow this link

    import subprocess
    import re
    
    process = subprocess.Popen(['ffmpeg',  '-i', path_of_media_file], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    stdout, stderr = process.communicate()
    matches = re.search(r"Duration:\s{1}(?P<hours>\d+?):(?P<minutes>\d+?):(?P<seconds>\d+\.\d+?),", stdout, re.DOTALL).groupdict()
    
    print matches['hours']
    print matches['minutes']
    print matches['seconds']
    
    0 讨论(0)
提交回复
热议问题