Java版ffmpeg実行支援ツール
ffmpegの入力ファイルにワイルドカードが使えないので、Javaで支援プログラムを作ってみた。コマンドラインで実行な。
Java実行ファイル:AppMultiStarter.zip
Javaソースファイル:AppMultiStarter_src.zip
そんなのファイル一覧を取得して、ffmpegのプロセスを起動するときに入力ファイルに指定すればいいじゃんことになるのだけれど、それだけだとつまらないので色々試してみた。
- プロセス起動してますんよ。
- 起動したプロセスの標準出力・エラー出力を、そのままだと出力されないのでプログラムから出力できるようにしてみたんすよ。
- Javaのenumってコンストラクタ用意できるんよ。そこで文字定数とか無名クラスとか設定できるんよ。あ、ソースコメント嘘書いてある。
- プロセスの入力についてはサポートしないので、このまま入力待ちでいつまでたっても終わりゃしない。というわけでWatchDogTimerを組み込んで見た。出力が一定時間ない時、プロセスを停止します。Object-Oriented & Java maneuver 別室さんの
「Timerを使う。周期的に実行したり、一定時間後に実行したり」を参照。
でもjava.util.concurrent.ScheduledExecutorServiceを使ったらタイマのスレッドが残ってしまい、結局Timerクラスを使ったよ。 - 引数解析もやってみた。あと、プロセスに渡す引数についてパラメタを設定できるような仕組みも作ってみた。enumで文字列やら無名クラス使っているのはここ。
どうやって使うかっていうと、例として以下のような感じ。
C:\TEMP>java -jar AppMultiStarter.jar -i"C:\TEMP\test" -o"C:\TEMP\test2" -app"C:\tools\ffmpeg\bin\ffmpeg.exe" -arg"-y -i %FILE_FULLNAME% -ar 48000 -ab 128 -f mp3 %OUTPUT_DIR%\%FILE_NAME%_%NOW_DATE%%NOW_TIME%.mp3" -f"*.mp4" -r -wdt10
- -i:入力ディレクトリ C:\TEMP\test 指定
- -r :サブディレクトリ検索
- -f:ファイルワイルドカード *.mp4 を検索
- -o:出力先ディレクトリ C:\TEMP\test2 指定
- -app:起動するApplication C:\tools\ffmpeg\bin\ffmpeg.exe
- -arg:Applicationに渡す引数 -y -i %FILE_FULLNAME% -ar 48000 -ab 128 -f mp3 %OUTPUT_DIR%\%FILE_NAME%_%NOW_DATE%%NOW_TIME%.mp3
%~%の部分はマクロ。 - -wdt:WatchDogTimerのタイマ時間(秒)
- 他には-l:プロセス起動上限数、-iv:プロセス起動前のWait時間(秒)があります。
-argで使用できるマクロ
- FILE_FULLNAME:入力ファイルフルパス
- FILE_NAME:入力ファイルのパスと拡張子を抜いたもの
- FILE_EXTEND:入力ファイルの拡張子
- INPUT_DIR:-iで指定された入力ディレクトリ
- OUTPUT_DIR:-oで指定された出力ディレクトリ
- NOW_DATE:現在年月日(yyyyMMdd表記)
- NOW_TIME:現在時刻(HHmmss表記)
分からんかったらソース読んでおくれ。
再生にも使えるかなとGOMPlayerやWindowsMediaPlayerの引数を調べてのだが、リストに追加するオプションでは再生されない。再生オプションだと入力したファイルに更新されてしまうという・・・。めんどくせー!!
初回、再生オプションでプロセスを立ち上げて、2回目以降はリストに追加するという方法にしないとダメか。
GOMPlayer:再生 /open、リスト追加 /add
WindowsMediaPlayer:再生 /open、リスト追加はない?(起動時に複数ファイル設定は可能)
Java版和魂に組み込む予定・・・
注:お試しプログラムですので、動作は保証しません。本プログラムを使用して被害・損害を受けた、または与えたとしても当方は一切責任を持ちませんのでご了承ください。また、質問 は一切受け付けませんのでご自分で勉強なさったら。まあ、オイラも勉強不足だし、直観とフィーリングでプログラムを作っているので、何が正しいかは己の心 に聞け!
USE AT YOUR OWN RISK
« 今週届いた本 | トップページ | WindowsUpdateが失敗するようになって »
コメント