web-dev-qa-db-ja.com

Linux / FreeBSDでMP3の長さを取得する

さまざまな長さのmp3ファイルがたくさんあります。 50%〜60%にカットしたいです。 1分から30秒までと言います。 ffmpegを使用すると簡単です。しかし、ffmpegを使用して処理するためのベースとして、元の長さを決定する方法がわかりません。

誰かがアイデアを持っていますか?

29
ariefbayu

Ffmpegでは、スクリプトで使用できる変数として長さを取得する方法がわかりません。しかし mp3info はそうです。

mp3info -p "%S" sample.mp3   // total time in seconds
31
A Dwarf

ffmpegは、他の引数を指定しない場合、ファイルについて知っているすべてを出力します。 grepを使用して、「Duration」以外のすべてを取り除きます。

$ ffmpeg -i foo.mp3 2>&1 | grep Duration
  Duration: 01:02:20.20, start: 0.000000, bitrate: 128 kb/s

mplayerを使用することもできます。行「ID_LENGTH =」のGrep:

$ mplayer -ao null -identify -frames 0 foo.mp3 2>&1 | grep ID_LENGTH
ID_LENGTH=3740.00
24
quack quixote

興味深いことに、 EXIFTool アプリケーションは、MP3期間を最後の行として提供します。

 $ exiftool somefile.mp3 
 ExifToolバージョン番号:7.98 
ファイル名:somefile.mp3 
ディレクトリ:。
ファイルサイズ:49 MB 
ファイル変更日時:2009:09:10 11:04:54 + 05:30 
ファイルタイプ:MP3 
 MIMEタイプ:audio/mpeg 
 MPEGオーディオバージョン:2.5 
オーディオレイヤー:3 
オーディオビットレート:64000 
サンプルレート:8000 
チャンネルモード:シングルチャンネル
 MSステレオ:オフ
強度ステレオ:オフ
著作権フラグ:偽
元のメディア:真
強調:なし
 ID3サイズ:26 
ジャンル:ブルース
期間:1:47:46(約) 
9
nik

ffmpeggrepのみを使用して期間を取得する別の方法:

# ffmpeg -i rara.mp3 2>&1 |grep -oP "[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{2}"
00:03:49.12
3
F.C.

ffmpegを使用するソリューションは、インターフェイスとして完全には設計されていない出力を解析するため、少し壊れやすいように感じます。とはいえ、彼らはおそらく数年は働き続けるでしょう。

ffmpegには、オーディオファイル(mp3を含む多くの形式)に関する情報を取得するためのツールffprobeが付属しており、機械が読み取り可能な出力を生成できます。次のコマンドは、曲の長さを取得します。

ffprobe -show_streams -print_format json song.mp3 -v fatal | jq '.streams[0].duration'
2
Att Righ

ファイルの期間を取得するには、ffmpegを使用できます。ただ使用する:

ffmpeg -i <infile> 2>&1 | grep "Duration" | cut -d ' ' -f 4 | sed s/,//
1
Monica Sol

私は個人的に Mplayer を使用して情報を抽出します。これは、ほとんどの場合、すでにインストールされており、不必要に新しいソフトウェアをインストールする必要がないためです。これの利点は、特にmp3ファイルに限定されず、Mplayerが処理できる任意のメディアファイルで機能することです。次のワンライナーは、トラックの長さを秒単位で返します。

mplayer -identify -ao null -vo null -frames 0 Filename.mp3 | grep ^ID_LENGTH= | cut -d = -f 2
1
goldPseudo

私も同じ問題を抱えており、mplayerコマンド(goldPseudo)はうまく機能していることがわかりましたが、RhythmBoxでアルバムを開くと、ステータスラインにトラック数、合計再生時間、ディスクサイズが表示されることがわかりました。

0
AFH