オーディオ/ビデオの持続時間を取得するための遅いbashスクリプト

オーディオ/ビデオの持続時間を取得するための遅いbashスクリプト

現在のフォルダにあるオーディオ/ビデオファイルの持続時間を含むHTMLファイルを生成するためのbashスクリプトを作成しました。このスクリプトは、ffprobeサイレントモードの期間とfileMIMEタイプを取得するために使用されます。スクリプトは期待どおりに機能しますが、少し遅い感じがします。スピードアップできるかな?。しかし、私はスクリプトの経験がなく、時間分析ツールも知りません。このトピックに対するstackoverflowの回答を見つけましたが、時間分析では新しいライブラリや方法を提案できませんでした。

私はPythonの世界でopencvを使用するためのSOの提案に触れました。

編集する:遅いと感じるのは、私が使用しているいくつかのコマンドや使用方法にもっと速い選択肢があると信じているということです。私の1年間のHDDでは、わずか12個のビデオファイルで構成されるファイルを作成するのに約1秒かかります。私はシェルスクリプトなので、私はこのスクリプトがCほど速く、少なくとも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}"

明らかに、私はコードレビューにこの質問を投稿しましたが、何も答えませんでした。協会

ベストアンサー1

おすすめ記事