53

オーディオ ファイルのグループの長さを確認する必要があります。UNIXコマンドラインでこれを行う簡単な方法はありますか?

> duration *

私は、期間を含む一連のオーディオ情報を生成する stats というオプションを備えた素晴らしい SoX アプリを持っています。期間のみを取得する方法を探しています。私は出力形式に柔軟に対応しており、サンプルの長さ、hh:mm:ss、または秒のいずれかになります。後者が私の好みです。

4

18 に答える 18

52
soxi -D filename
soxi -D *

Soxiはオーディオファイルのメタデータを照会します。Dは期間オプションです。グロブをサポートします。Soxiの兄貴のsoxは、コマンドラインオーディオ処理を行います。

于 2012-01-21T16:41:54.963 に答える
37
mp3info -p "%m:%02s\n" filename

指定したファイルの長さをmm:ss形式で示します (mm は 59 より大きい場合があります)。ファイル内の合計秒数だけを取得するには、次を使用します。

mp3info -p "%S\n" filename

すべての mp3 ファイルの合計の長さを秒単位で取得するには、AWK が役立ちます。

mp3info -p "%S\n" *.mp3 | awk 'BEGIN { s = 0 }; { s = s + $1 }; END { print s }'
于 2012-01-19T20:59:49.877 に答える
16

mediainfoは、オーディオ ファイルのミリ秒を返します。現在のディレクトリに音声ファイルのみがあると仮定すると、次のようになります。

mediainfo --Inform="Audio;%Duration%" "Miley Cyrus - Wrecking Ball.mp3"

ローカル ディレクトリ内のすべてのオーディオの長さを計算するには、次の要点が役立ちます。

shopt -s nullglob
let playlist_duration_ms=0
for song_file in *.{mp3,ogg,m4a,flac,wav}; do
  playlist_duration_ms=$(expr $playlist_duration_ms + $(mediainfo --Inform="Audio;%Duration%" "$song_file"))
done
shopt -u nullglob

let playlist_duration_secs=$(expr $playlist_duration_ms / 1000)
let playlist_duration_mins=$(expr $playlist_duration_ms / 60000)
let playlist_duration_remaining_secs=$(expr $playlist_duration_secs - $(expr $playlist_duration_mins \* 60))

echo $playlist_duration_mins minutes, $playlist_duration_remaining_secs seconds
于 2015-10-19T18:17:32.200 に答える
12

OSX 上

現在のディレクトリにある各オーディオ ファイルの長さを出力します。

afinfo * | awk '/estimated duration/ { print $3 }'

ファイルパスを含めます:

afinfo * | awk '/File:/ { song=$2 } /estimated duration/ { print song, $3 }'
于 2016-02-27T00:39:41.667 に答える
8

ffprobe次のように、ffmpeg を使用すると、秒単位の生の継続時間を高精度で取得できます。

ffprobe -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "filename.mp3" 2>/dev/null

さらなるスクリプトで使いやすい出力は、次のようにフォーマットされます。

193.656236

それを拡張すると、以下は現在のディレクトリ内のすべての .mp3 ファイルの合計時間を秒単位で測定します。

LENGTH=0; for file in *.mp3; do if [ -f "$file" ]; then LENGTH="$LENGTH+$(ffprobe -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$file" 2>/dev/null)"; fi; done; echo "$LENGTH" | bc

また、いくつかの拡張子のオーディオ ファイルの合計の長さを測定するために、別のワイルドカードを追加できます。

LENGTH=0; for file in *.mp3 *.ogg; do if [ -f "$file" ]; then LENGTH="$LENGTH+$(ffprobe -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$file" 2>/dev/null)"; fi; done; echo "$LENGTH" | bc
于 2019-12-02T14:10:04.177 に答える
8

soxiと python を使用してディレクトリ内の wav ファイルの合計時間を知りたい場合は、次のように使用できます。

soxi -D input_dir/*.wav | python -c "import sys;print(sum(float(l) for l in sys.stdin))"

input_dir入力ディレクトリに従って変更します。すべての wav ファイル間の最大/最小デュレーションを見つけたい場合は、または に自由に変更しsumてください。maxmin

于 2019-12-02T14:57:53.227 に答える