@echo off REM ========================================== REM 初期設定 REM ========================================== REM ===FFMPEG 実行ファイル指定 set FFMPEG_KDH=ffmpeg.exe set FFMPEG_LATEST=ffmpeg_latest.exe set PATH=%~dp0\cores;%PATH% set QTFILE="%~dp0\cores\QT_3GPP(MobileMP4)_WQVGA_AAC.ini" cd /d "%~dp0" REM ========================================== REM ========================================== echo ------------------------------- echo SoftBank 911SH 用  echo 携帯動画変換君エンジン利用バッチファイル (2008/05/27) echo ------------------------------- echo 入力ファイル:"%~1" echo 動画フォーマットを指定 (不明な場合, 上手く動かない場合は1を選択) echo (ニコニコムービーメーカー[NMM]作成ファイル(.swf)、WMV等は未対応) echo (1) flv4 echo (2) mp4(H.264) [default] echo ------------------------------- set /p INIFORMAT0=入力ファイルのフォーマット(1 or 2): if ""=="%INIFORMAT0%" ( set INIFORMAT=2 ) else ( set INIFORMAT=%INIFORMAT0% ) echo 入力ファイルのフォーマット: %INIFORMAT% REM ========================================== echo ------------------------------- echo 入力動画のアスペクト比の指定 echo (1) 元が 4:3動画。 echo (2) 元が16:9動画。[default] echo (3) 元が 4:3動画。上下黒帯は有 (上下均等に削除) echo (4) 元が 4:3動画。上下黒帯は有 (歌詞が下にある時用。(3)と同じだが上を多めに削除) echo ------------------------------- set /p INIASPECT0=入力ファイルのアスペクト比(1, 2, 3 or 4): if ""=="%INIASPECT0%" ( set INIASPECT=2 ) else ( set INIASPECT=%INIASPECT0% ) echo 入力ファイルのアスペクト比: %INIASPECT% REM ========================================== echo ------------------------------- echo 911SH 動画品質設定 echo (1) 標準画質用  (ビデオbps 768k、フレームレート 30fps) [default] echo (2) 長編用   (ビデオbps 384k、フレームレート 30fps) echo (3) アニメMAD用 (ビデオbps 768k、フレームレート 24fps) echo (4) 長編アニメ用 (ビデオbps 384k、フレームレート 24fps) echo (5) 見れれば良い用 (ビデオbps 128k、フレームレート 15fps) echo (6) 高画質用 (ビデオbps 1024k、フレームレート 30fps) echo (7) 超高画質用 (ビデオbps 2048k、フレームレート 30fps) echo ------------------------------- set /p VIDEOQT0=動画品質設定(1, 2, 3, 4, 5 or 6): if ""=="%VIDEOQT0%" ( set VIDEOQT=1 ) else ( set VIDEOQT=%VIDEOQT0% ) echo 動画品質設定: %VIDEOQT% REM ========================================== echo ------------------------------- echo パス数指定 [default : 1] echo ------------------------------- set /p PASSNUM0=パス数指定(1 or 2): if ""=="%PASSNUM0%" ( set PASSNUM=1 ) else ( set PASSNUM=%PASSNUM0% ) echo パス数指定: %PASSNUM% REM ========================================= echo ------------------------------- echo ffmpegの-tオプションの秒数 echo デバッグ用です。10 とか短い秒数にしてちゃんと動作するかの確認用 echo ------------------------------- set /p TSEC=秒数指定(未入力でEnterでもOK): if ""=="%TSEC%" ( set TSECS=0 ) else ( set TSECS=%TSEC% ) REM ========================================== set FORMAT=-f 3gp set MUX=-muxvb 128 -muxab 96 set EXTOPT=%FORMAT% -t %TSECS% %MUX% REM ========================================== REM OTHER OPT set OPT0=-y set OPT1= set OPT2= set OPT=%OPT0% %OPT1% %OPT2% REM ========================================== REM pass の指定、パスログファイルの指定 set PASSLOG="%~1.log" set PASSLOGDEL="%~1.log-0.log" set PASS1=-pass 1 -passlogfile %PASSLOG% set PASS2=-pass 2 -passlogfile %PASSLOG% REM ========================================== REM INPUT, OUTPUT ファイルを指定 set OUTPUT="%~1.3gp" set OUTPUT1="%~1.p1.3gp" set OUTPUT2="%~1.p2.3gp" set OUTPUTQ="%~1.911sh.3gp" set INPUT="%~1" REM ========================================== REM ビデオフォーマット設定 REM 最初に指定した番号から、解像度とcrop、padを指定 REM ========================================== REM ===4x3 (1) if %INIASPECT% == 1 ( set VS=-s 320x240 set VOPT2= ) REM ===16x9 (2) if %INIASPECT% == 2 ( set VS=-s 400x224 set VOPT2=-padtop 8 -padbottom 8 ) REM ===4x3 kuroobi-ari (3) if %INIASPECT% == 3 ( set VS=-s 400x300 set VOPT2=-croptop 30 -cropbottom 30 ) REM ===4x3 kuroobi-kashi (4) if %INIASPECT% == 4 ( set VS=-s 400x300 set VOPT2=-croptop 42 -cropbottom 18 ) REM ===fot TEST (9) if %INIASPECT% == 9 ( set VS=-s 400x300 set VOPT2= ) REM ========================================== REM ビデオオプション REM ==========================================   REM (高画質化したいならVBのビットレートを上げること。)   REM (フレームレートで60fpsは表示できるけど良く止まるので却下) if %VIDEOQT% == 1 ( set VB=-b 768 set VR=-r 30000/1001 set VOPT3=-qmin 6 -qmax 31 ) if %VIDEOQT% == 2 ( set VB=-b 384 set VR=-r 30000/1001 set VOPT3=-qmin 6 -qmax 31 ) if %VIDEOQT% == 3 ( set VB=-b 768 set VR=-r 24000/1001 set VOPT3=-qmin 6 -qmax 31 ) if %VIDEOQT% == 4 ( set VB=-b 384 set VR=-r 24000/1001 set VOPT3=-qmin 6 -qmax 31 ) if %VIDEOQT% == 5 ( set VB=-b 128 set VR=-r 15000/1001 set VOPT3=-qmin 10 -qmax 51 ) if %VIDEOQT% == 6 ( set VB=-b 1024 set VR=-r 30000/1001 set VOPT3=-qmin 2 -qmax 31 ) if %VIDEOQT% == 7 ( set VB=-b 2048 set VR=-r 30000/1001 set VOPT3=-qmin 1 -qmax 4 -mbd 2 -4mv -trell -aic ) REM === テスト用 === if %VIDEOQT% == 9 ( set VB=-b 128 set VR=-r 30000/1001 set VOPT3=-qmin 10 -qmax 51 ) REM ========================================== set VCODEC=-vcodec xvid set VOPT1=-fixaspect -bitexact set VOPT=%VCODEC% %VB% %VS% %VR% %VOPT1% %VOPT2% %VOPT3% REM ========================================== REM 音声コーデック設定 REM ==========================================   REM (携帯動画変換君のFFMPEGはチャンネル毎のビットレート指定のため   REM 48kbpsにしています。よって2チャンネルで96kbps) set ACODEC=-acodec aac set AB=-ab 48 set AR=-ar 44100 set AC=-ac 2 set AOPT1= set AOPT=%ACODEC% %AB% %AR% %AC% %AOPT1% REM ========================================== REM ========================================== REM FLV4の場合、携帯動画変換君のffmpegでは入力に対応していないので REM 対応している最新のffmpegでいったんaviファイルを作成。 REM H.264の場合は携帯動画変換君付属ffmpegでも入力に対応してるのでそのまま REM ========================================== if %INIFORMAT% == 1 ( echo %FFMPEG_LATEST% -i %INPUT% -vcodec libxvid -vb 8000k -acodec copy -f avi "%~1.avi" %FFMPEG_LATEST% -y -i %INPUT% -vcodec libxvid -vb 8000k -acodec copy -t %TSECS% -f avi "%~1.avi" set INPUTS="%~1.avi" set INPUTAVI="%~1.avi" ) if %INIFORMAT% == 2 ( set INPUTS=%INPUT% ) echo %FFMPEG_KDH% %OPT% -i %INPUTS% %VOPT% %AOPT% %EXTOPT% %PASS1% %OUTPUT1% if %PASSNUM% == 2 ( REM ==== for 2pass %FFMPEG_KDH% %OPT% -i %INPUTS% %VOPT% %AOPT% %EXTOPT% %PASS1% %OUTPUT1% %FFMPEG_KDH% %OPT% -i %INPUTS% %VOPT% %AOPT% %EXTOPT% %PASS2% %OUTPUT2% ) if %PASSNUM% == 1 ( REM ==== 1pass only %FFMPEG_KDH% %OPT% -i %INPUTS% %VOPT% %AOPT% %EXTOPT% %OUTPUT2% ) REM ========================================== REM QT3GPPFlatten これを通さないと911shで再生できない REM ここが携帯動画変換君の肝だね REM ========================================== echo QT3GPPFlatten.exe %OUTPUT2% %OUTPUTQ% -c %QTFILE% QT3GPPFlatten.exe %OUTPUT2% %OUTPUTQ% -c %QTFILE% -t 3gpp REM ========================================== REM 終了処理、テンポラリファイルの削除 REM ========================================== REM end REM if EXIST "%~1.avi" (del "~1.avi" ) del %OUTPUT1% del %OUTPUT2% del %INPUTAVI% del %PASSLOGDEL% del "%~dp0\xvidff*" del "%~dp0\push" echo Enterキーで終了します。 REM pause>nul exit ------------------------------------------------------------------------------- *メモ  このバッチファイルは携帯動画変換君のFFMPEGやQTComverterを利用しています  免責事項としてこのバッチファイルを用いたことによって携帯電話の破損、パソコンの破損、データの破損などを含む、利用者または第三者が被ったいかなる損害についても当方は責任を負わないものとします。自己責任での利用をお願いします。 【入力ファイル指定】  (1)を指定すると最新のFFMPEGを利用して、いったん携帯動画変換君付属のFFMPEGで読めるAVIファイルを中間ファイルとして作る。よってFLV4も入力対応になる。つまり指定した新しいFFMPEGが対応してるフォーマットなら何でもいい。ビットレートは多めに取ってあるのは中間ファイルでの劣化を少なくするため。  ただし非圧縮フォーマットは容量が肥大しすぎるからAVIにしてる。acodecはコピーにしてるため、H.264などを使うとAVIファイルでは読むことができない。しかしその後の3gp変換で認識してくれるからとりあえず大丈夫かと。AVIファイルでも音楽を聞きたいようなら「-acodec copy」を「-acodec libmp3lame -ac 2 -ab 256k -ar 48000」などとして、無駄に高音質設定にしてみるとよいかも」  (2)は携帯動画付属FFMPEGが読めれば何でもいい。x264が含まれてるのでH.264やFLV1動画はそのまま入力でも問題ない。個人的には最近H.264動画しか作らななくなり、かつダウンローするのもH.264が多くなったのでこちらがデフォルト指定。  ニコニコムービーメーカで作ったのは圧縮SWFらしい。ただのSWFなら付属のFFMPEGでも対応可能だけど圧縮SWFは入力未対応。swftoolとか使えばよいけど・・・ 【アスペクト指定】  (1)は4:3動画を4:3でそのまま。320x240にします。  (2)は16:9を16:9そのままにして、911sh用に上下に8ピクセル分黒帯を追加。横幅400で16:9なら縦は本来225になるが、FFMPEGではピクセル数は偶数でないと受け付けないので、224にしてます。その関係か-sオプションを指定しないとエラーになったような気がするので、FFMPEGの自動認識は使ってないです。  (3)は16:9など横長動画なのにわざわざ上下に黒帯を付けて4:3にしている動画を、911shで表示するためのオプション。いったん400x300にした後、-croptop, -cropbottomで上下を30ピクセルづつ削除して400x240にしてます。920SHなどは854x480なので、「-s 854x640 -cropbottom 80 -croptop 80」でいいかもしれない(試してないけど)  (4)は(3)といっしょだけど、歌詞を16:9動画の下の黒帯部分に書いてる動画用。-croptop, -cropbottomで上を削る部分を多くしたたけ。911SHの15:9画面だから可能なオプション。   【動画画質指定】  最初は画質固定だったけど、とりあえず何パターンか選択できるようにつくってしまった。個人的には 768k-30fps,しか使わないけど。 【パス数指定】  最初は1パスしか考慮してなかったけど、2passもとりあえず入れてみた。 【-t 秒数指定】  はっきり言ってデバッグ用。 【余談】  何気にWindowsでのバッチファイル作成初めてなので、こんなものかと。  Linuxで業務上200行位までのシェルスクリプトとかjavascriptとかは書いたことあるけど。だから排他処理や例外処理やエラー処理も中途半端。  最初はあまり会話的処理を多くしたくなかったけど結局かなりの数になってしまった。  あくまで動画共有サイト動画の変換を目指しているので、avisynth利用でWMVの変換とかはこのスクリプトで今のところ考慮してない。