📅  最后修改于: 2023-12-03 15:27:51.344000             🧑  作者: Mango
在处理视频文件时,有时需要计算多个视频文件的总时长。在 Shell-Bash 中,可以使用 ffprobe
工具获取视频文件的信息,进而计算总时长。
find
命令查找目录中的视频文件。xargs
命令调用 ffprobe
工具获取视频文件的信息。grep
命令过滤出视频文件的时长信息。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