Java でやりたい場合は、Xuggle を使用すると非常に簡単に実行できます。
彼らはすべてを行う方法を説明する素晴らしいウェブサイトを持っています
ドキュメントはこちら:
http://build.xuggle.com/view/Stable/job/xuggler_jdk5_stable/javadoc/java/api/index.html
そして、あなたが望むことを行う方法を説明する優れたチュートリアルはここにあります: http://blog.xuggle.com/2009/06/05/introduction-to-xuggler-mediatools/
これらは、単純なトランスコーディングである最初のチュートリアルで必要なことを行うための簡単な方法を提供します。
flv へのエンコードには問題なく機能することがわかりました。舞台裏ではffmpegを使用しているため、ffmpegでつまずくものはすべてxuggleでも失敗します。
関連するサンプル Java コードは次のとおりです。
// create a media reader
IMediaReader reader = ToolFactory.makeReader("videofile.flv");
// add a viewer to the reader, to see the decoded media
reader.addListener(ToolFactory.makeWriter("output.mov", reader));
// read and decode packets from the source file and
// and dispatch decoded audio and video to the writer
while (reader.readPacket() == null)
;
http://wiki.xuggle.com/MediaTool_Introduction から入手したもの
完全に機能する clojure コードが必要な場合は、ここにあります :)
(import '(com.xuggle.mediatool ToolFactory))
(import '(com.xuggle.mediatool IMediaDebugListener IMediaDebugListener$Event))
(defn readerRecurse
"calls .readPacket until there's nothing left to do2"
[reader]
(if (not (nil? (.readPacket reader))) ; here .readPacket actually does the processing as a side-effect.
true ; it returns null when it has MORE ro process, and signals an error when done...
(recur reader)))
(defn convert
"takes video and converts it to a new type of video"
[videoInput videoOutput]
(let [reader (ToolFactory/makeReader videoInput)]
(doto reader
(.addListener (ToolFactory/makeWriter videoOutput reader))
(.addListener (ToolFactory/makeDebugListener (into-array [IMediaDebugListener$Event/META_DATA]))))
(readerRecurse reader)))
今あなたがしなければならないことは、次のようなものです:
(convert "/path/to/some_file.stupid_extention" "/path/to/awesome.flv")
これで完了です。