花了非常多的時間看資料,結果成效不彰啊!主要是在找 Java 版的程式庫,但偶爾也會看到幾眼 C 語言版本,兩者交互測試。我想做的事有兩件,第一件事是將連續的 Jpeg 串成影片,第二件事,就是將兩個影片再合併成一個影片,主要用在一些演算法上。
以下是我參考的相關討論,其中 Java Media Framework 中,有很完整的範例程式 JMF 2.1.1 Solutions ,它可以將 jpeg 弄成 mov 影片,並且又提供 merge 的範例,但無論我怎樣試,都沒辦法把兩個 mov 再串成一個 mov ,儘管程式在編譯或執行上都沒有顯示任何問題(除了範例程式使用 Vector 沒有指定 type),但合併的結果卻不是正常的,真讓我十分灰心。
- Generating a Movie File from a List of (JPEG) Images
- Extracting Frames from Video - vid2jpg.zip
- ImageJ
- Writing AVI videos using pure Java
- Java Media Framework - Possible to generate AVI video using JMF?
- Java Media Framework - Generating a .mjpg or .avi file from a List of Images
- Java Media Framework - convert jpeg to mpeg/avi
最後,關於 Jpeg 製成 AVI 的部分,我使用 Writing AVI videos using pure Java 這篇提到的 AVIDemo.jar 程式庫,寫得滿乾淨又簡單!
import ch.randelshofer.media.avi.AVIOutputStream;
import java.io.*;
import java.awt.image.BufferedImage ;
import javax.imageio.ImageIO;
class test
{
public static void main( String[] args ) throws Exception
{
if( args.length < 2 )
{
System.out.println( "Usage> test file_out 1.jpg" );
System.exit( -1 );
}
AVIOutputStream out = null;
out = new AVIOutputStream( new File( args[0] ) , AVIOutputStream.VideoFormat.JPG );
out.setVideoCompressionQuality( 1f );
out.setTimeScale(1);
out.setFrameRate(1);
for( int i=1 ; i <args.length ; ++i )
{
out.writeFrame( ImageIO.read(new File( args[i] ) ) );
}
out.close();
}
}
如此一來,就能夠用 java test out.avi 1.jpg 2.jpg 3.jpg 來產生影片啦!
關於 Merge 的部分,暫時沒有 Java 版的成果,以下是相關的參考資料,但我尚未測試成功。
關於將兩個影片串在一起,其實早就有範例可用啦!
看來我的英文真的有待加強!隔行如隔山!下錯關鍵字,成果差很大啦,用上述的範例程式就可以成功把我作的影片合併再一起囉!
如果是 C 的版本,那有 Transcode 可以用喔,裡頭有一支 tool 叫 avimerge ,它可以很成功的將我用上述 Java 程式產生影片合併串在一起。最後,若純粹只是想把 jpeg 串成影片,或將影片再合併起來,滿推薦使用 mencoder 和 Transcode - avimerge ,前者有需要可以再參考這篇 製作 Motion JPEG (Mjpeg) 影片 - 將連續的照片串成影片 。
Hello 您好
回覆刪除請問透過此程式進行jpeg壓縮至avi檔,
是否有jpeg解析度及jpeg的數量限制,
假設,有一萬張jpeg,在壓縮的過程中,會不會造成記憶體不夠之類的,
謝謝您的答覆,感恩。
版主回覆:(04/13/2010 12:06:03 AM)
不好意思, 我還沒有試過這個大量的 case 囉, 當初只是拿來練習而已 :D
所以你的問題我沒辦法回答你