私は様々な長さの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
ffmpeg
とgrep
だけを使って持続時間を取得する別の方法があるだけです
# 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