📌  相关文章
📜  获取目录中视频文件的总时长 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:27:51.344000             🧑  作者: Mango

获取目录中视频文件的总时长 - Shell-Bash

在处理视频文件时,有时需要计算多个视频文件的总时长。在 Shell-Bash 中,可以使用 ffprobe 工具获取视频文件的信息,进而计算总时长。

程序实现步骤
  1. 使用 find 命令查找目录中的视频文件。
  2. 使用 xargs 命令调用 ffprobe 工具获取视频文件的信息。
  3. 使用 grep 命令过滤出视频文件的时长信息。
  4. 使用 awk 命令计算视频文件的总时长。

下面是一个示例脚本:

#!/bin/bash

# 查找目录中的视频文件,并使用 xargs 调用 ffprobe 获取信息
find . -type f -name "*.mp4" -o -name "*.mkv" | xargs -I{} ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 {}

# 使用 grep 和 awk 计算视频文件的总时长
echo "总时长为:$(find . -type f -name "*.mp4" -o -name "*.mkv" | xargs -I{} ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 {} | grep -v '^$' | awk '{s+=$1} END {print int(s+0.5)}' | awk '{printf("%02d:%02d:%02d\n"),($1/3600),($1/60%60),($1%60)}')"
代码说明
查找视频文件并调用 ffprobe
find . -type f -name "*.mp4" -o -name "*.mkv" | xargs -I{} ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 {}

这一行命令首先使用 find 命令查找当前目录下的所有 .mp4.mkv 文件。然后使用 xargs -I{} 命令将每个文件名替换到 ffprobe 命令中,获取视频文件的时长信息。

计算视频文件总时长
echo "总时长为:$(find . -type f -name "*.mp4" -o -name "*.mkv" | xargs -I{} ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 {} | grep -v '^$' | awk '{s+=$1} END {print int(s+0.5)}' | awk '{printf("%02d:%02d:%02d\n"),($1/3600),($1/60%60),($1%60)}')"

这一行命令首先使用 find 命令查找当前目录下的所有 .mp4.mkv 文件。然后通过管道符将文件名传给 ffprobe 命令获取视频文件的时长信息。使用 grep 命令过滤掉空行,使用 awk 命令将时长信息(秒数)相加,并将结果四舍五入取整。最后使用 awk 命令将时长信息格式化为 HH:MM:SS 的形式。

输出结果类似于:

总时长为:01:23:45