2012-07-05 3 views
0

내 비디오 스테 가노 그라피 프로젝트 (java)에서 순차적 PNG를 무비 파일로 인코딩해야합니다. 나는xuggler을 시도하지만 압축을 얻고 있었다.png 이미지 파일을 비디오로 변환 (무손실)

내가 retreive해야 할 필요가 있기 때문에 (때문에 어느로 PNG로 이미지의 LSB의에 숨겨진 데이터 나 비디오에서 프레임을 추출 다음 시간을 잃어버린 경우) 숨겨진 데이터 나중에, 나는 무손실 방식으로 비디오 (선호 형식 : avi)에 png 이미지를 인코딩하는 프로세스를 찾아야합니다. 새 비디오의 크기는 입니다. 내게는이 아닙니다.

누군가가 나를 안내하거나 유용한 다른 Java 라이브러리를 추천 할 수 있다면 도움이 될 것입니다.

필요한 경우 내 Java 코드를 게시 할 수 있습니다.

답변

2

www.processing.org에서 처리 프레임 워크를 다운로드하면 매우 간단한 Java 프로그램을 작성하여 이미지를 읽고 mov 파일로 작성할 수 있습니다. ANIMATION 코덱을 사용하고 무손실, 그것은 완전히 무손실입니다.

+0

당신이 stegged 것 같은 것을 영화에 넣을 수 있습니까? – Lizz

3

트랜스 코딩 (정확한 원본 이미지 보존)없이 PNG 시퀀스를 MP4 파일로 다중화 할 수 있습니다. 순수 자바 사용 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(); 
} 
관련 문제