回答:
ffmpegでは、スクリプトで使用できる変数として長さを取得する方法がわかりません。しかし、mp3infoは行います。
mp3info -p "%S" sample.mp3 // total time in seconds
\n
して新しい行を印刷します。> mp3info -p "%S\n" sample.mp3
//合計時間(秒
ffmpeg
他の引数を指定しない場合、ファイルについて知っているすべてを出力します。grep
「期間」以外のすべてを削除するために使用します。
$ 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
TOTLENGTH=0; for f in *.mp3; do LENGTH=$(mplayer -ao null -identify -frames 0 "$f" 2>&1 | awk -F= '/ID_LENGTH/ {print $2}' | awk -F. '{print $1}'); TOTLENGTH=$(($TOTLENGTH + $LENGTH)); done; echo $TOTLENGTH
、すべてのファイルのオーディオの合計長さを秒単位で印刷します。おそらくもっと効率的に行うことができますが、一度だけ書いたので、私のニーズには十分でした。(2番目のawk呼び出しは小数を取り除くため、結果は100%正確ではありませんが、再び、私のニーズには十分です。)
Estimating duration from bitrate, this may be inaccurate
。この答えは、Constant Bitrate MP3でのみ有効だと思います。
興味深いことに、EXIFToolアプリケーションは最後の行としてMP3期間を提供します!
$ exiftool somefile.mp3 ExifToolバージョン番号:7.98 ファイル名:somefile.mp3 ディレクトリ:。 ファイルサイズ:49 MB ファイル変更日時:2009:09:10 11:04:54 + 05:30 ファイルの種類:MP3 MIMEタイプ:オーディオ/ mpeg MPEGオーディオバージョン:2.5 オーディオ層:3 オーディオビットレート:64000 サンプルレート:8000 チャンネルモード:シングルチャンネル MSステレオ:オフ 強度ステレオ:オフ 著作権フラグ:False オリジナルメディア:True 重点:なし ID3サイズ:26 ジャンル:ブルース 期間:1:47:46(約)
を使用するソリューションffmpeg
は、インターフェースとして設計されていない出力を解析しているため、ややもろいように思います。とはいえ、おそらく彼らは関係なく数年間働き続けるでしょう。
ffmpeg
ffprobe
オーディオファイル(mp3を含む多くの形式)に関する情報を取得するツールが付属しており、機械で読み取り可能な出力を生成できます。次のコマンドは、曲の長さを取得します。
ffprobe -show_streams -print_format json song.mp3 -v fatal | jq '.streams[0].duration'
ffprobe -show_entries stream=duration -of compact=p=0:nk=1 -v fatal song.mp3
上記の参照を使用した簡単な方法を次に示します。
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
人々に感謝します!私はあなたのアイデアと知識を使用します読んでくれてありがとう、良い一日を!;)