動機
複数ある音声ファイルの総再生時間を集計したい。
手でひとつひとつ打ち込むのは面倒なので、テキストで一気に。
環境
- macOS Darwin 22.3.0
- Homebrew導入済
方法
ffprobeコマンドを使用して音声ファイルのメタデータを取得する。
ffmpegをインストールするとffprobeコマンドが使用できるようになる。
$ brew install ffmpeg
$ which ffprobe
/usr/local/bin/ffprobe
ffprobeコマンドの引数に音声ファイルを与えるとメタデータが表示される。
このうち 'Duration'が再生時間であるようだ。(1秒未満なのはダミーデータだから)
$ ffprobe hello.mp3
ffprobe version 5.1.2 Copyright (c) 2007-2022 the FFmpeg developers
(中略)
Input #0, mp3, from 'hello.mp3':
Metadata:
encoder : Lavf59.27.100
Duration: 00:00:00.65, start: 0.050113, bitrate: 34 kb/s
Stream #0:0: Audio: mp3, 22050 Hz, mono, fltp, 32 kb/s
ただ、このままパイプにつないで絞り込めない。
$ ffprobe hello.mp3 | grep Duration
(同じ出力になる)
標準エラー出力に出ていた。リダイレクトする。
$ ffprobe hello.mp3 2>&1 | grep Duration
Duration: 00:00:00.65, start: 0.050113, bitrate: 34 kb/s
絞り込めた。あとはAWKで
$ ffprobe hello.mp3 2>&1 | grep Duration | awk -F, '{print $1}' | awk '{print $2}'
00:00:00.65
目的であった再生時間が取得できた。
現在ディレクトリの複数ファイルに対してはたとえば次のように。
$ ls | xargs -I% ffprobe % 2>&1 | grep Duration | awk -F, '{print $1}' | awk '{print $2}'
00:00:00.65
00:00:00.81
(以下略)
以上で目的が達成できた。