目录中的总视频时间

Ple*_*elp 8 command-line video scripts

是否有脚本(bash、python 等)输出目录中所有视频文件的总持续时间(递归)?

例如,执行以下操作:

script mypath
Run Code Online (Sandbox Code Playgroud)

它给x minutes/hours.

Syl*_*eau 11

首先安装mediainfo

sudo apt-get install mediainfo
Run Code Online (Sandbox Code Playgroud)

您现在可以使用以下 oneliner 来获取目录的总视频时间:

find . -type f -exec mediainfo --Inform="General;%Duration%" "{}" \; 2>/dev/null | awk '{s+=$1/1000} END {h=s/3600; s=s%3600; printf "%.2d:%.2d\n", int(h), int(s/60)}'
Run Code Online (Sandbox Code Playgroud)

find命令将mediainfo递归调用每个文件并以毫秒为单位获取视频持续时间。

然后该awk部分将对这些值求和并以HH:MM格式返回总时间。


更新avprobe确实比mediainfo(感谢@souravc)快

为了获得更好的结果,请改用下面的命令(您需要sudo apt-get install libav-tools先)

find . -type f -exec avprobe -v quiet -show_format_entry duration "{}" \; | awk '{s+=$1} END {h=s/3600; s=s%3600; printf "%.2d:%.2d\n", int(h), int(s/60)}'
Run Code Online (Sandbox Code Playgroud)


sou*_* c. 6

您可以使用以下脚本递归地了解目录中所有视频文件的总持续时间。我avprobe在以下脚本中使用了libav-tools

安装libav-tools为,

sudo apt-get install libav-tools
Run Code Online (Sandbox Code Playgroud)

将脚本另存get_video_duration.sh(说)。从终端授予它执行权限作为

chmod u+x get_video_duration.sh
Run Code Online (Sandbox Code Playgroud)

如何运行脚本

要知道目录的总视频持续时间/full/path/to/videodir,请使用参数运行

./get_video_duration.sh /full/path/to/videodir
Run Code Online (Sandbox Code Playgroud)

或者要知道当前目录运行的总视频持续时间没有任何参数

./get_video_duration.sh .
Run Code Online (Sandbox Code Playgroud)

对于递归,在目录路径之后添加-Ror-r-recursiveor --recursive。例如/full/path/to/videodir递归地知道目录的总视频时长(也搜索里面的所有文件夹/full/path/to/videodir

./get_video_duration.sh /full/path/to/videodir -R
Run Code Online (Sandbox Code Playgroud)

脚本如下:

sudo apt-get install libav-tools
Run Code Online (Sandbox Code Playgroud)

脚本执行的屏幕截图

在此处输入图片说明

注意:由于我的主目录中没有任何文件.mkv.avi文件,因此屏幕截图中的最后两行出现了持续时间 0Hr 0Min 0Sec