【问题标题】:How to find duration of a video file using mediainfo in seconds or other formats?如何使用 mediainfo 以秒或其他格式查找视频文件的持续时间?
【发布时间】:2013-10-06 04:07:20
【问题描述】:

我怎样才能以毫秒为单位找到视频文件的持续时间,即确定性的整数。 我已经使用 ffprobe 来获取持续时间,但它并没有给出所有文件格式的持续时间。

【问题讨论】:

    标签: video ffmpeg multimedia ffprobe mediainfo


    【解决方案1】:

    使用以下命令:

    i) 获取视频流的时长:

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

    ii) 获取媒体文件的持续时间:

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

    iii) 仅获取音频流的持续时间:

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

    iv) 获取多个参数的值:

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

    输出会是这样的:

    1280,720,3000000,30.0
    

    【讨论】:

      【解决方案2】:

      iota 提供使用mediainfo --Inform="Video;%Duration%" [inputfile],可能但返回奇怪的结果。

      例如,对于持续时间 31s 565ms 的视频,给定命令的输出将是:

      31565
      

      它不适合我,我想出了以下解决方案:

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

      返回值为:

      00:00:31.565
      

      毕竟,您可以使用 PHP 来格式化返回值,将其转换为 ,例如:

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

      Example

      【讨论】:

        【解决方案3】:

        我们还可以使用 ffmpeg 来获取任何视频或音频文件的时长。

        要安装 ffmpeg,请遵循 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']
        

        【讨论】:

        • 不错,和我发现的ffprobe一样,支持的格式比mediainfo少。 mediainfo 是专门为这些目的而制作的,但是整个 ffmpeg 框架是为转码而构建的,并且安装繁重。
        【解决方案4】:

        我在我的 xubuntu 机器上使用以下命令,它完全符合 OP 想要完成的任务。

        mediainfo --Output="Video;%Duration%\n" *.mp4 | awk '{ sum += $1 } END { secs=sum/1000; h=int(secs/3600);m=int((secs-h*3600)/60);s=int(secs-h*3600-m*60); printf("%02d:%02d:%02d\n",h,m,s) }'
        

        【讨论】:

          猜你喜欢
          • 2016-07-25
          • 2011-09-21
          • 1970-01-01
          • 2019-02-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多