(お約束)ご利用は自己責任でお願いします
Mac OSXでmp3をflvにしてYoutubeにアップする簡単な方法を書いたんですが、それをバージョンアップしました。
- ファイル名にスペースがあると処理がおかしくなるので、その対応
ほんとはスペースがあるファイルでもcpやmvしたいんだけど、やり方が分からない・・・。 - mp3だけでなくm4aファイル対応
- 再生時間を自動設定
これで、作業用ディレクトリと画像ファイルと音ファイルを指定するだけで、書きだすことが可能になりました。もちろん設定によってが、これらも決め打ちにすることが可能です。
例によって、なるべく分かりやすく書いたので、余分な命令もあると思います。適時削って下さい。
#!/bin/sh # ########################################################## # 適当な画像をつけて音楽ファイルをムービー化するためのシェルスクリプト # https://mcbrain.jp/3145/ # (お約束)ご利用は自己責任で。 # 改変も自由ですが、自己責任で。 # ############################################### # ディレクトリの変更 ############################################### echo “作業するディレクトリを指定して下さい” read WORK_DIR # 作業ディレクトリを固定するときは以下にて指定 #WORK_DIR=/Users/xxxx/yyy/zzz cd $WORK_DIR #WORK_DIR内のファイル名の半角全角スペースを_に変換 for tmp_fname in *.* ; do mv “$tmp_fname” `echo $tmp_fname | sed -e “s/ /_/g” | sed -e “s/ /_/g”`; done # ############################################### # ムービーに埋め込みたい画像ファイルをjpgに変更 ############################################### echo “ムービーに埋め込みたい画像ファイルを指定して下さい” read WORK_IMAGE # jpgに変換 convert $WORK_IMAGE $WORK_DIR/tmp.jpg # ############################################### #音楽ファイルの指定 ############################################### echo “ムービー化したい音楽ファイル\(mp3かm4a\)を指定して下さい” read MUSIC_FILE # MUSIC_FILE_FULL_NAME=${MUSIC_FILE##*/} #ファイル名だけ取得 echo “ファイル名: $MUSIC_FILE_FULL_NAME” MUSIC_FILE_NAME=${MUSIC_FILE_FULL_NAME%.*} #拡張子無しのファイル名 echo “拡張子無しのファイル名: $MUSIC_FILE_NAME” MUSIC_FILE_EXTENSION=${MUSIC_FILE_FULL_NAME##*.} #拡張子だけ取得 echo “拡張子: $MUSIC_FILE_EXTENSION” MUSIC_FILE_EXTENSION=`echo $MUSIC_FILE_EXTENSION | tr “[:upper:]” “[:lower:]“` #のちの処理のために拡張子を小文字に統一する #echo “小文字変換: $MUSIC_FILE_EXTENSION” if [ "$MUSIC_FILE_EXTENSION" = "m4a" ]; then #m4aならmp3に変換する # mp3に変換 echo “———–mp3に変換 スタート——————” ffmpeg -i $MUSIC_FILE -ab 192k -f mp3 $WORK_DIR/tmp.mp3 echo “———–mp3に変換 終わり ——————” else #それ以外つまりmp3ならファイル名をtmp.mp3にしてcpする(後処理を簡略化するため) cp $MUSIC_FILE $WORK_DIR/tmp.mp3 fi ############################################### # ムービーの再生時間を設定 ############################################### # 変数にFFMPEG_OutPutコマンドの出力値をDuration部分だけ抜き出して格納 #Duration: 00:03:52.69, start: 0.000000, bitrate: 320 kb/s のように抜き出すことができる FFMPEG_OutPut=`ffmpeg -i $WORK_DIR/tmp.mp3 2>&1 | grep Duration` echo “——— ムービーの再生時間を設定 ——————–” echo “ffmpegの出力= “$FFMPEG_OutPut FFMPEG_Hour=`echo “$FFMPEG_OutPut” | cut -c 13-14` echo “時間= “$FFMPEG_Hour FFMPEG_Min=`echo “$FFMPEG_OutPut” | cut -c 16-17` echo “分= “$FFMPEG_Min FFMPEG_Sec=`echo “$FFMPEG_OutPut” | cut -c 19-20` echo “秒= “$FFMPEG_Sec # ムービーの再生時間を設定 MOVIE_TIME=`expr \( $FFMPEG_Hour \* 60 \* 60 \) + \( $FFMPEG_Min \* 60 \) + $FFMPEG_Sec + 5` #秒数計算。最後に足しているのは秒以下を切り上げするためと曲の終わりに少し余裕をもたせるため # # 作成時間を取得してファイル名にするときは下のを使う #MOVIE_FILENAME=`date +%H-%M-%S` # # 音楽ファイル名.flvというファイル名にするときは下のを使う MOVIE_FILENAME=`basename $MUSIC_FILE` # ############################################### # aviファイルを作成 ############################################### echo “———-aviファイルを作成 スタート ——————-” ffmpeg -f image2 -loop_input -t $MOVIE_TIME -r 4 -vcodec copy -i $WORK_DIR/tmp.jpg $WORK_DIR/tmp.avi echo “———-aviファイルを作成 終わり ——————-” # ############################################### # aviファイルをflvに変換 ############################################### echo “————aviファイルをflvに変換 スタート —————–” ffmpeg -i $WORK_DIR/tmp.avi $WORK_DIR/tmp.flv echo “————aviファイルをflvに変換 終わり —————–” # ############################################### # flvファイルを作成 ############################################### echo “————-flvファイルを作成 スタート —————-” ffmpeg -vcodec copy -acodec copy -i $WORK_DIR/tmp.flv -i $WORK_DIR/tmp.mp3 $WORK_DIR/$MOVIE_FILENAME.flv echo “————-flvファイルを作成 終わり —————-” # ############################################### # いらないファイルをお掃除 rm -f $WORK_DIR/tmp.jpg $WORK_DIR/tmp.avi $WORK_DIR/tmp.flv $WORK_DIR/tmp.mp3 # Growlにて通知 growlnotify -m flv変換完了 echo “—————————–” echo “ 処理終了” echo “—————————–”
文字コードはUTF-8。改行コードはLFです。
コメント
[…] 新しいバージョンをリリースしました。こちらからどうぞ。 […]