ムービーやmp3の時間を取得する方法

(お約束)ご利用は自己責任でお願いします

前に、Mac OSXでmp3を簡単にflvにしてYoutubeにアップする方法を書いたんですけど、もっと自動化できないかと試行錯誤しておりました。

まずは動画かmp3の時間を自動で取得したい。でいろいろと調べたんですが、ffmpegで時間を取得できることは分かりました。

$ ffmpeg -i 1.mp3 2.mp3

(略・・・)

Duration: 00:03:52.69, start: 0.000000, bitrate: 320 kb/s
    Stream #0.0: Audio: mp3, 44100 Hz, stereo, s16, 320 kb/s

この変換中に、「Duration」で表示されているのが、1.mp3の再生時間です。

これを取り出し(抽出)したいんだけど、シェルスクリプトでの書き方に慣れていなくて、どうやって取り出せばいいのかさっぱり分からない。phpやperlなら楽勝なのに・・・。

sed で 正規表現を使い、\1 や \2 などを使えばいいらしいということは分かったんですが、ややこしくて理解できなかったので力技で抽出しました(笑)

使ったのはcutです。【 文字列を抜き出す「cut」 】

# 変数にffmpeg_outputにコマンドの出力値を格納
ffmpeg_output=`ffmpeg -i 1.mp3 2>&1 | grep Duration`
# こんな感じで出力させる Duration: 00:03:52.69, start: 0.000000, bitrate: 320 kb/s

echo “—————————–”
echo “ffmpegの出力値=     “$ffmpeg_output

hour=`echo “$ffmpeg_output” | cut -c 13-14`
echo “—————————–”
echo “時を取得=     “$hour

min=`echo “$ffmpeg_output” | cut -c 16-17`
echo “—————————–”
echo “分を取得=     “$min

sec=`echo “$ffmpeg_output” | cut -c 19-20`
echo “—————————–”
echo “秒を取得=     “$sec

movie_time=`expr \( $hour \* 60 \* 60 \) + \( $min \* 60 \) + $sec + 5` #秒数計算。最後に5を足しているのは秒以下を切り上げするためと曲の終わりに少し余裕をもたせるため
echo “—————————–”
echo “再生時間(秒)=     “$movie_time
exit

これを実行すると以下になります。

$ sh movietime.sh 
—————————–
ffmpegの出力値=      Duration: 00:03:52.69, start: 0.000000, bitrate: 320 kb/s
—————————–
時を取得=     00
—————————–
分を取得=     03
—————————–
秒を取得=     52
—————————–
再生時間(秒)=     237

 

コメント

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