用于获取音频/视频持续时间的慢速 bash 脚本

用于获取音频/视频持续时间的慢速 bash 脚本

我创建了一个 bash 脚本来生成 HTML 文件,该文件将包含当前文件夹中音频/视频文件的持续时间。该脚本用于ffprobe获取安静模式下的持续时间并file获取 mime 类型。虽然脚本按预期工作,感觉有点慢。我想知道是否可以加快速度。但是,我没有任何脚本编写经验,也不知道任何时间分析工具。我确实遇到过有关该主题的 stackoverflow 答案,但时间分析无法建议新的库或方法。

我确实在 python 世界中使用 opencv 遇到了关于 SO 的建议,并且基准看起来很有希望,但我对安装如此庞大的库及其或大或小的依赖项持谨慎态度,只是为了这个。

编辑:我所说的感觉慢是指,我相信我正在使用的某些命令或我使用它们的方式有更快的替代方案。在我使用一年的 HDD 上,创建仅 12 个视频文件的文件大约需要一秒钟。作为一个 shell 脚本,我期望这个脚本的速度能像 C 语言一样,或者至少是它的优化版本。

#!/bin/bash

today=$(date +"%Y-%m-%d-%H-%M-%S")
file=$(printf "duration-${today}.html")
tot_dur=0
echo "<!DOCTYPE html>
<html>
<head>
<style>
table {
  border: 1px solid black;
  border-collapse: collapse;
}
th, td {
  border: 1px solid black;
  text-align: left;
  padding: 8px;
}

tr:nth-child(even) {background-color: #f5f5f5;}
</style>
</head>
<body>" >> "${file}"
echo "<table>" >> "${file}"
echo "<tr>
        <th>File</th>
        <th>Duration</th>
      </tr>" >> "${file}"
while read filename
do
    mime=$(file -b --mime-type "${filename}")
    IFS='/' read -r -a mime <<< "$mime"
    if [[ $mime == "video" || $mime == "audio" ]]; then
        duration=$(ffprobe -v quiet -of default=noprint_wrappers=1:nokey=1 -show_entries format=duration "${filename}")
        tot_dur=$(echo $tot_dur + $duration | bc -l)
        duration=$(printf '%02d:%02d:%02f\n' $(echo -e "$duration/3600\n$duration%3600/60\n$duration%60"| bc | xargs echo))
        echo "<tr><td>"${filename}"</td><td>"${duration}"</td></tr>" >> "${file}"
    fi
done < <(ls)
# (find . -type f)
tot_dur=$(printf '%02d:%02d:%02f\n' $(echo -e "$tot_dur/3600\n$tot_dur%3600/60\n$tot_dur%60"| bc | xargs echo))
echo "<tr>
        <td><b>Total</td>
        <td><b>${tot_dur}</td>
      </tr>" >> "${file}"
echo "</table>" >> "${file}"
echo "</body> </html>" >> "${file}"

需要明确的是,我已经在代码审查中发布了这个问题,但没有得到任何回复。关联

相关内容