Linux / FreeBSD で MP3 の長さを取得

ffmpeg freebsd linux mp3

私は様々な長さのmp3ファイルの束を持っています。私はそれを50%から60%の長さにカットしたいと思っています。つまり、1分から30秒までの長さにしたいのです。ffmpegを使えば簡単にできるはずです。しかし、ffmpegを使って処理する際のベースとなる元の長さを決める方法がわからない

誰か心当たりは?

  30  ariefbayu  2009-10-31


ベストアンサー

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

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

32  A Dwarf  2009-10-31


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

25  quack quixote  2009-10-31


興味深いことに、EXIFToolアプリケーションは、最後の行にMP3の持続時間を与えています!

$ exiftool somefile.mp3
ExifTool Version Number         : 7.98
File Name                       : somefile.mp3
Directory                       : .
File Size                       : 49 MB
File Modification Date/Time     : 2009:09:10 11:04:54+05:30
File Type                       : MP3
MIME Type                       : audio/mpeg
MPEG Audio Version              : 2.5
Audio Layer                     : 3
Audio Bitrate                   : 64000
Sample Rate                     : 8000
Channel Mode                    : Single Channel
MS Stereo                       : Off
Intensity Stereo                : Off
Copyright Flag                  : False
Original Media                  : True
Emphasis                        : None
ID3 Size                        : 26
Genre                           : Blues
Duration                        : 1:47:46 (approx)

9  nik  2009-10-31


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.  2012-09-20


ffmpegを使ったソリューションは、インターフェイスとして設計されていない出力を解析しているので、少し壊れやすいと感じます。そうは言っても、これらはおそらく数年間は関係なく動作し続けるでしょう

ffmpegには、オーディオファイルの情報を取得するツールffprobeが付属しています(mp3を含む多くのフォーマット)。以下のコマンドは、曲の持続時間を取得します

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

2  Att Righ  2017-01-08


私は個人的にMplayerを使って情報を抽出していますが、ほとんどの場合、すでにインストール済みで、不必要に新しいソフトウェアをインストールするのが面倒だからです。これの利点は、特にmp3ファイルに限定されず、Mplayerが扱えるあらゆるメディアファイルで動作するはずです。以下のワンライナーは、トラックの長さを秒単位で返してくれます

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

1  goldPseudo  2009-10-31


ffmpegを使ってファイルの持続時間を取得することができます。使うだけです

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

1  Monica Sol  2012-06-25


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

0  AFH  2014-05-28


上記を参考に、私の簡単な使い方をご紹介します

mp3_full_path="$HOME/i/want/the/length/of/file.mp3"
ffmpeg -i "$mp3_full_path" 2>&1 | grep Duration | awk -F ' ' '{print $2}' | awk -F '[,|.]' '{print $1}'
10:47:15

その値を変数mp3_full_lengthに送ります

mp3_full_path="$HOME/i/want/the/length/of/file.mp3"
read -r mp3_full_length <<< `ffmpeg -i "$mp3_full_path" 2>&1 | grep Duration | awk -F ' ' '{print $2}' | awk -F '[,|.]' '{print $1}'`



# I can use this variable for my own purpose!
echo $mp3_full_length
10:47:15

上記の方々、ありがとうございました。私はあなたのアイデアや知識を使用して、あなたが読んでくれてありがとうございます、素敵な一日を持っている! 😉

-1  Jeongpyo Lee  2018-12-20


タイトルとURLをコピーしました