如何检查视频(mp4)使用外壳的时间?

Tho*_*mas 23 command-line video bash scripts mp4

我需要使用 shell 将所有 mp4 文件上传到长度 > 4 分钟的目录中。我找不到任何脚本来检查视频的长度。有人知道该怎么做吗?

非常感谢!

小智 28

这将为您提供视频的长度。

ffmpeg -i myvideo 2>&1 | grep Duration | cut -d ' ' -f 4 | sed s/,//
Run Code Online (Sandbox Code Playgroud)


qub*_*dup 11

Mediainfo是用于此目的的快速工具:

$ mediainfo --Inform="Video;%Duration%"  [inputfile]
Run Code Online (Sandbox Code Playgroud)

您可以在更全面的答案中找到更多选项。

在我的测试中,ffprobe需要 0.3 秒,mediainfo需要 0.09 秒。

  • 这给出了奇怪的结果......比如*2679600*......更好地使用`mediainfo --Inform="Video;%Duration/String%" [inputfile]`......这会给你一些类似的*43 min 50s* (2认同)

zra*_*ajm 6

exiftool(最初用于从图像文件中读取相机元数据,但后来扩展到从几乎任何类型的媒体文件中读取和写入元数据)使用起来非常方便。运行它:

exiftool FILE.mp4 | grep Duration
Run Code Online (Sandbox Code Playgroud)

您可能需要先安装exiftool,但这很容易使用以下命令完成(在 Debian 和衍生产品如 Ubuntu 等上):

apt install libimage-exiftool-perl
Run Code Online (Sandbox Code Playgroud)

当然,这个答案只是另一种选择。许多其他答案也很好。:)

  • 我相信您可以使用`exiftool -Duration FILE.mp4` 来获取持续时间。不需要grep... (2认同)

Rom*_*uet 5

您可以尝试使用avconv命令..

首先你应该安装:

通过软件中心安装

如果您键入带有标志 -i 的命令,您将获得有关视频的信息:

avconv -i test.mp4

在输出中有一个名为Duration的字段

avconv version 0.8.4-4:0.8.4-0ubuntu0.12.04.1, Copyright (c) 2000-2012 the Libav developers
  built on Nov  6 2012 16:51:33 with gcc 4.6.3
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.mp4':

  Duration: 00:58:28.05, start: 0.000000, bitrate: 888 kb/s
    Stream #0.0(eng): Video: h264 (High), yuv420p, 720x404, 748 kb/s, 25 fps, 25 tbr, 20k tbn, 50 tbc
    Stream #0.1(und): Audio: aac, 48000 Hz, stereo, s16, 127 kb/s
Run Code Online (Sandbox Code Playgroud)

现在您可以使用该命令仅获取字段Duration的值

类型:

avconv -i file.mp4 2>&1 | grep 'Duration' | awk '{print $2}' | sed s/,//
Run Code Online (Sandbox Code Playgroud)

在我的情况下,结果是:

00:58:28.05
Run Code Online (Sandbox Code Playgroud)

58 分 28.05 秒。

希望这会有所帮助!


小智 5

添加到pers解决方案,这可以在整个目录上使用:

for f in *; do ffmpeg -i "$f" 2>&1 | grep Duration | cut -d " " -f 4 | sed s/,//  | tr -d "\n" && echo " $f"; done
Run Code Online (Sandbox Code Playgroud)

它甚至可以扩展为| sort按文件长度排序。

您可以将其添加到.bashrc.bash_aliases以便能够 lsvlength | sort在目录上执行

alias lsvlength='for f in *; do ffmpeg -i "$f" 2>&1 | grep Duration | cut -d " " -f 4 | sed s/,//  | tr -d "\n" && echo " $f"; done'
Run Code Online (Sandbox Code Playgroud)