さまざまな長さのmp3ファイルがたくさんあります。 50%〜60%にカットしたいです。 1分から30秒までと言います。 ffmpegを使用すると簡単です。しかし、ffmpegを使用して処理するためのベースとして、元の長さを決定する方法がわかりません。
誰かがアイデアを持っていますか?
Ffmpegでは、スクリプトで使用できる変数として長さを取得する方法がわかりません。しかし mp3info はそうです。
mp3info -p "%S" sample.mp3 // total time in seconds
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
興味深いことに、 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(約)
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
ffmpeg
を使用するソリューションは、インターフェイスとして完全には設計されていない出力を解析するため、少し壊れやすいように感じます。とはいえ、彼らはおそらく数年は働き続けるでしょう。
ffmpeg
には、オーディオファイル(mp3を含む多くの形式)に関する情報を取得するためのツールffprobe
が付属しており、機械が読み取り可能な出力を生成できます。次のコマンドは、曲の長さを取得します。
ffprobe -show_streams -print_format json song.mp3 -v fatal | jq '.streams[0].duration'
ファイルの期間を取得するには、ffmpegを使用できます。ただ使用する:
ffmpeg -i <infile> 2>&1 | grep "Duration" | cut -d ' ' -f 4 | sed s/,//
私は個人的に Mplayer を使用して情報を抽出します。これは、ほとんどの場合、すでにインストールされており、不必要に新しいソフトウェアをインストールする必要がないためです。これの利点は、特にmp3ファイルに限定されず、Mplayerが処理できる任意のメディアファイルで機能することです。次のワンライナーは、トラックの長さを秒単位で返します。
mplayer -identify -ao null -vo null -frames 0 Filename.mp3 | grep ^ID_LENGTH= | cut -d = -f 2
私も同じ問題を抱えており、mplayerコマンド(goldPseudo)はうまく機能していることがわかりましたが、RhythmBoxでアルバムを開くと、ステータスラインにトラック数、合計再生時間、ディスクサイズが表示されることがわかりました。