如果你想用 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")
你就完成了!