#!/bin/bash # = ダイレクトモード == #↓値がyの場合は入力を省いて規定値で確認の上実行、yyの場合は確認なしに実行 DMODE="n" #DMODE="y" #DMODE="yy" # = 既定値 (remを外すと下にあるほうが有効) == BD="." #↓#を削除し、パスの部分を指定フォルダに書き換えるとその上に変換先フォルダを作る(最後の\はつけないこと) #BD="/home" #↓オーディオ ACODEC="-oac mp3lame" #↓ビデオ #対象拡張子 EXT="avi" #---- h264 ----- VCDC="h" BR="400" #---- Xvid ---- #VCDC="x" #BR="4" #---- サイズ ---- SCL="s" #SCL="w" #---- アスペクト比 ---- ASP="s" #ASP="w" ASP="n" #---- フィルタの使用 ---- NF="n" #NF="y" # ========= sub =========== myread() { bkup=$1 read sval if [ "$sval" = "" ] ; then echo $bkup else echo $sval fi } #------- videoコーデック設定 ----------- setvcodec() { if [ "$VCDC" = "x" ] ; then VCODEC="xvid" FOPS="-xvidencopts" OD="_Xvid" BITR="fixed_quant=$BR" elif [ "$VCDC" = "h" ] ; then VCODEC="x264" FOPS="-x264encopts" OD="_H264" BITR="bitrate=$BR" fi } #----------- 対話型入力 --------------- quest() { while : do echo "videoコーデックを指定してください (h=H264 x=Xvid) 【 $VCDC 】 " VCDC=`myread $VCDC` if [ "$VCDC" = "x" ] ; then break ; elif [ "$VCDC" = "h" ] ; then break ; fi done echo "変換元の拡張子を入力してください【 $EXT 】" EXT=`myread $EXT` echo "変換先のフォルダを入力してください(.でカレントフォルダ上)【 $BD 】" BD=`myread $BD` if [ "$VCDC" = "x" ] ; then echo "画質を1~31までの実数で指定してください(5以下がお勧め) 【 $BR 】" elif [ "$VCDC" = "h" ] ; then echo "ビットレートを数値入力してください(300以上がお勧め) 【 $BR 】" fi BR=`myread $BR` echo "縦横のサイズを入力してください(A:B=任意) 【 $SCL 】" sizelist SCL=`myread $SCL` if [ "$VCDC" = "x" ] ; then echo "アスペクト比を入力してください(w=16/9 s=4/3 n=サイズ比 x/y=任意) 【 $ASP 】" elif [ "$VCDC" = "h" ] ; then echo "アスペクト比を入力してください(w=16:9 s=4:3 n=変えない x:y=任意) 【 $ASP 】" fi ASP=`myread $ASP` while : do echo "ノイズ除去フィルタを使いますか?(y=使う n=使わない)【 $NF 】" NF=`myread $NF` if [ "$NF" = "y" ] ; then break ; elif [ "$NF" = "n" ] ; then break ; fi done } #----------- scaleプリセット表示 --------------- sizelist() { echo "qw=352:200 qs=320:240 w=480:270 s=480:360 vw=640:360 vs=640:480" echo "vc=720:480 vd=720:240 nw=640:360 ns=512:384" } #----------- scaleプリセット変換 --------------- presets() { if [ "$SCL" = "qw" ] ; then SCLE="scale=352:200" elif [ "$SCL" = "qs" ] ; then SCLE="scale=320:240" elif [ "$SCL" = "w" ] ; then SCLE="scale=480:270" elif [ "$SCL" = "s" ] ; then SCLE="scale=480:360" elif [ "$SCL" = "vw" ] ; then SCLE="scale=768:432" elif [ "$SCL" = "vs" ] ; then SCLE="scale=640:480" elif [ "$SCL" = "vc" ] ; then SCLE="scale=720:480" elif [ "$SCL" = "vd" ] ; then SCLE="scale=720:240" elif [ "$SCL" = "nw" ] ; then SCLE="scale=640:360" elif [ "$SCL" = "ns" ] ; then SCLE="scale=512:384" elif [ ${#SCL} -ge 7 ] ; then SCLE="scale=$SCL" fi } #----------- aspectプリセット変換 --------------- setaspect() { if [ "$VCDC" = "x" ] ; then if [ "$ASP" = "w" ] ; then aspc=":aspect=16/9" ; ASPCM="16/9" elif [ "$ASP" = "s" ] ; then aspc=":aspect=4/3" ; ASPCM="4/3" elif [ ${#ASP} -ge 3 ] ; then aspc=":aspect=$ASP" ; ASPCM="$ASP" elif [ "$ASP" = "n" ] ; then aspc="" ; ASPCM="サイズ比" fi elif [ "$VCDC" = "h" ] ; then if [ "$ASP" = "w" ] ; then aspc="-aspect 16:9" ; ASPCM="16:9" elif [ "$ASP" = "s" ] ; then aspc="-aspect 4:3" ; ASPCM="4:3" elif [ "$ASP" = "n" ] ; then aspc="-noaspect" ; ASPCM="変えない" elif [ ${#ASP} -ge 3 ] ; then aspc="-aspect $ASP" ; ASPCM="$ASP" fi fi } #----------- フィルタ設定 --------------- nfset() { if [ "$NF" = "y" ] ; then FUSE="使う" FILTERS="pp=hb/vb/dr/al/lb," elif [ "$NF" = "n" ] ; then FUSE="使わない" FILTERS="" fi } #----------- フォルダ名取得 --------------- getdirname() { #親フォルダ名抽出 cd ./ OD="${PWD##*/}$OD" echo "$OD" | sed "s/ /_/g" OD="$BD/$OD" } #----------- フォルダ作成 --------------- mkd() { if [ ! -d '$OD' ] ; then mkdir "$OD" echo "ディレクトリ$ODを作成しました" fi } #----------- パラメータ収集 --------------- inputparam() { echo "----------------------------------" if [ "$DMODE" != "yy" ] ; then if [ "$DMODE" != "y" ] ; then quest fi fi setvcodec #ビデオコーデック設定 presets #サイズ設定 setaspect #アスペクト設定 nfset #フィルター設定 getdirname #出力先フォルダ名取得($OD) echo "|" echo "|対象:$EXT" echo "|変換先:$OD" echo "|コーデック:$VCODEC" echo "|画質:$BR" echo "|サイズ:$SCLE" echo "|アスペクト比:$ASPCM" echo "|フィルタ:$FUSE" echo "|" } # = = = = = main = = = = = echo "----------------------------------" echo "Mencoder使用 H264/Xvid 変換バッチ" echo " v1.7" echo " (c) ishidourou 2014" while : do OK="" if [ "$DMODE" = "yy" ] ; then inputparam OK="y" fi while [ "$OK" != "y" ] do inputparam while : do echo "以上で変換してよろしいですか?(y=変換開始 n=修正 e=終了)" OK="" read OK if [ "$OK" = "y" ] ; then break elif [ "$OK" = "n" ] ; then DMODE="n" break elif [ "$OK" = "e" ] ; then exit 0 fi done done mkd #変換実行 for fname in *.$EXT do mencoder $fname $ACODEC -ovc $VCODEC -vf $FILTERS$SCLE $FOPS $BITR$ASPC -o "$OD/$fname.avi" done echo "******************" echo "変換を終了しました" echo "******************" while : do OK="" echo "さらに変換しますか?(y=さらに変換する n=終了)" read OK if [ "$OK" = "y" ] ; then break elif [ "$OK" = "n" ] ; then exit 0 ; fi done done