現在のフォルダにあるオーディオ/ビデオファイルの持続時間を含むHTMLファイルを生成するためのbashスクリプトを作成しました。このスクリプトは、ffprobe
サイレントモードの期間とfile
MIMEタイプを取得するために使用されます。スクリプトは期待どおりに機能しますが、少し遅い感じがします。スピードアップできるかな?。しかし、私はスクリプトの経験がなく、時間分析ツールも知りません。このトピックに対する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}"
明らかに、私はコードレビューにこの質問を投稿しましたが、何も答えませんでした。協会