2017-12-11 24 views
0

잠시 후 임시 폴더에 BufferedImages를 작성한 다음 ffmpeg를 호출하여 비디오로 변환합니다. 이미지를 직접 작성하는 대신 Java에서 ffmpeg로 직접 보낼 수 있습니까? 가능하다면이 방법을 사용하는 것이 더 빠를 것이라고 가정합니다.비디오에서 FFMpeg로 된 이미지

이것은 현재 디렉토리에서 잘 읽는 중입니다. 만약 FFmpeg에 이미지를 입력하는 경우

  ProcessBuilder processBuilder = new ProcessBuilder(
        "ffmpeg", 
        "-y", 
        "-r", framerate, 
        "-f", "image2", 
        "-i", imageFramesDir, 
        "-itsoffset", offset.toString(), 
        "-i", audioFile, 
        "-c:v", "libx264", 
        "-c:a", "aac", 
        "-pix_fmt", "yuv420p", 
        "-crf", "23", 
        "-r", "24", 
        "-vf", "scale=720x406,setdar=16:9", 
        outputFile); 

      processBuilder.redirectErrorStream(false); 
      Process process = processBuilder.start(); 

답변

0

, 당신이 배관을 통해, 또는 CONCAT 디멀티플렉서 더불어 글롭 패턴 화상 등을 순차적으로 여러 개의 옵션을 가지고있다. 이미지는 메모리에 저장되므로 이미지를 로컬 드라이브에 쓸 필요가 없습니다. 그것은 응용 프로그램 속도를 감소하고 심하게 성능에 영향을줍니다. 당신은 ffmpeg에 이미지를 공급하는 파이프를 사용할 수 있습니다. 파이프 데이터를 ffmpeg로 보려면 this 링크를 확인하십시오.

또한 concat demuxer를 사용하여 여러 이미지에서 비디오를 만들 수 있습니다. Concat demuxer를 사용하면 단일 텍스트 파일을 사용하여 여러 위치 이미지를 사용할 수 있습니다. 이미지 경로를 텍스트 파일에 저장하고 다음 명령을 실행하면됩니다.

ffmpeg -f concat -safe 0 -i text.txt -vcodec mpeg4 -f mpegts test.mp4 

파이프는 요구 사항에 더 적합한 옵션입니다. 그러나 두 가지 방법 모두 문제에 적용될 수 있습니다.

+0

감사합니다. 그게 내가 생각하기에 똑바로 보이지는 않지만, 목표로 할 수있는 것이 있습니다. –