2012-07-05 79 views
0

對於我的視頻隱寫術項目(在Java中),我需要將順序PNG編碼到電影文件中。我試圖xuggler,但我得到的壓縮。(由於其數據隱藏在PNG圖像的LSB的迷路下一次我從視頻中提取幀)png圖像文件到視頻(無損)

因爲我需要需要中檢索隱藏的數據後,我需要找到一個過程,以無損的方式將png圖像編碼爲視頻(首選格式:avi)。新視頻的尺寸對我來說不是問題

希望如果有人能指導我或推薦一個有用的不同的java庫來做到這一點。

如果需要,我可以發佈我的java代碼。

回答

2

如果您從www.processing.org下載處理框架,您可以編寫一個非常簡單的java程序來讀取您的圖像並將它們寫入mov文件,如果您使用ANIMATION編解碼器並指定無損,它將完全無損。

+0

,你才能把它變成電影,使得它的stegged? – Lizz 2012-12-04 23:43:51

3

您可以將一個PNG序列複合到一個MP4文件中,而無需轉碼(保留精確的原始圖像)。要做到這一點在純Java應用JCodec(http://jcodec.org):

public class SequenceMuxer { 
    private SeekableByteChannel ch; 
    private CompressedTrack outTrack; 
    private int frameNo; 
    private MP4Muxer muxer; 
    private Size size; 

    public SequenceMuxer(File out) throws IOException { 
     this.ch = NIOUtils.writableFileChannel(out); 

     // Muxer that will store the encoded frames 
     muxer = new MP4Muxer(ch, Brand.MP4); 

     // Add video track to muxer 
     outTrack = muxer.addTrackForCompressed(TrackType.VIDEO, 25); 
    } 

    public void encodeImage(File png) throws IOException { 
     if (size == null) { 
      BufferedImage read = ImageIO.read(png); 
      size = new Size(read.getWidth(), read.getHeight()); 
     } 
     // Add packet to video track 
     outTrack.addFrame(new MP4Packet(NIOUtils.fetchFrom(png), frameNo, 25, 1, frameNo, true, null, frameNo, 0)); 

     frameNo++; 
    } 

    public void finish() throws IOException { 
     // Push saved SPS/PPS to a special storage in MP4 
     outTrack.addSampleEntry(MP4Muxer.videoSampleEntry("png ", size, "JCodec")); 

     // Write MP4 header and finalize recording 
     muxer.writeHeader(); 
     NIOUtils.closeQuietly(ch); 
    } 
} 

要使用它是這樣的:

public static void main(String[] args) throws IOException { 
    SequenceMuxer encoder = new SequenceMuxer(new File("video_png.mp4")); 
    for (int i = 1; i < 100; i++) { 
     encoder.encodeImage(new File(String.format("img%08d.png", i))); 
    } 
    encoder.finish(); 
}