現在のフォルダにあるすべてのメディアの持続時間の合計

現在のフォルダにあるすべてのメディアの持続時間の合計

フォルダに複数のメディア(正確にはビデオ)があり、すべての長さを要約したいと思います。今はポイントを把握するために数秒と数時間を無視します。私は次のスクリプトを書いた。

sum=0
for file in *
do
curr=$(exiftool $file |
   grep -i "^Duration" |
   awk '{print $3}' |
   cut -d':' -f 2)
((sum = sum + curr))
done
echo $sum

しかし、本当に遅くてどういうわけかより速くすることができるかどうかを知りたいです(または変更できるかどうか、別にできるかどうかを知りたい)。

その背後にあるロジックはとても簡単です。ディレクトリ内の各ファイルを繰り返し、期間のある行をつかみ、awk分離時間(hh:mm:ss)形式を使用し、「:」を区切り文字として分を分割します。プロセスの分を合計し、合計を印刷します。私はzsh記録を使用します。

ベストアンサー1

これは次のように単純化できます。

exiftool -n -q -p '${Duration;$_ = ConvertDuration(our $total += $_)}' ./*(-.) |
   tail -n 1

(によるとディレクトリ内のビデオファイルの総再生時間を取得します。*(-.)、シンボリックリンクを一般ファイルまたは一般ファイルに制限するために使用しているため、ここで使用されますzsh

ここで、持続時間は-n生の秒を取得するので正しく計算され、合計後に素晴らしい形式のみを実行します。

それにもかかわらず、遅い部分はほとんどそれ自体が原因である可能性が高いですexiftool。少なくともここでは一度だけ呼び出されるので、いくつかの改善が必要です。

また、合計は合計とawk同時に実行できるため、直接計算を実行できない場合でも単純化できます。grepcutexiftool

exiftool -q -n -Duration ./*(-.) | awk -F: '{sum += $2}; END{print sum/60}'

総期間(分)です。

おすすめ記事