해상도가 480 x 640 인 30 개의 JPEG 이미지 (.jpg)가 있습니다. 각 이미지는 약 20KB (모두 약 600KB)가 소요됩니다.jpeg 이미지를 H264로 매우 빠르게 인코딩하는 방법 (이미지를 비디오로 변환)
나는 H264 형식의 비디오에 이러한 이미지를 인코딩하는 는 FFmpeg 명령을 사용하고 있습니다.
매우 빠른 수행이 필요합니다. 약 1 초.
고전 명령을 사용하여
ffmpeg -y -f image2 -r 1/5 -i image_%d.jpg -c:v libx264 -r 30 video.mp4
약 90초 걸립니다.
-preset ultrafast
를 추가 한 후 :
ffmpeg -y -f image2 -r 1/5 -i image_%d.jpg -c:v libx264 -preset ultrafast -r 30 video.mp4
인코딩으로는 충분하지 여전히 약 15 훨씬 낫다 초하지만, 소요
내가 좋아하는, 또한 다른 매개 변수를 시도했다 :
-profile:v baseline
-qscale:v
-b:v 1000k
-crf 24
인코딩 시간은 10 초 미만으로 떨어지지 않습니다.
필자는 FFmpeg 명령이나 사용해야 할 매개 변수에 익숙하지 않아 여기에이 질문을 게시합니다.
동영상 품질이 좋을 필요가 있고 완벽 할 필요는 없습니다.
참고 사항 : 저는 ProcessBuilder를 사용하여 ffmpeg 실행 파일이있는 Android 애플리케이션에서이 명령을 실행하고 있습니다.
REPLY1 (로버트 Rowntree에) :
ArrayList<String> l2 = new ArrayList<String>();
//l2.add("ffmpeg");
l2.add("/data/data/" + packageName + "/ffmpeg");
l2.add("-y");
l2.add("-loop");
l2.add("1");
l2.add("-i");
l2.add("frame_%d.jpg");
// l2.add("-t");
// l2.add(strngs[3]);
l2.add("-r");
l2.add("1/2");
l2.add("-preset");
l2.add("superfast");
l2.add("-tune");
l2.add("zerolatency");
// l2.add("-pass");
// l2.add(Integer.valueOf(pass).toString());
l2.add("-vcodec");
l2.add("libx264");
l2.add("-b:v");
l2.add("200k");
l2.add("-bt");
l2.add("50k");
l2.add("-threads");
l2.add("0");
l2.add("-b_strategy");
l2.add("1");
// if(pass ==1){
// l2.add("-an");
// } else {
// l2.add("-acodec");
// l2.add("copy");
// }
l2.add("-f");
l2.add("mp4");
l2.add("-strict");
l2.add("-2");
// l2.add("-passlogfile");
// l2.add(strngs[4]);
// if(pass ==1){
// l2.add("/dev/null");
// } else {
// l2.add(strngs[5]);
// }
l2.add("video.mp4");
//return l2;
빠른 해결책이 필요합니다. 비디오 품질에 대해서는별로 신경 쓰지 않습니다. – Paul