【发布时间】:2013-06-11 15:33:05
【问题描述】:
我有 30 张 JPEG 图像 (.jpg),分辨率为 480 x 640。 每张图片大约需要 20KB(全部大约需要 600KB)。
我正在使用 FFmpeg 命令将这些图像编码为 H264 格式的视频。
我需要快速完成 - 大约 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 的 Android 应用程序中运行这些命令,其中我有 ffmpeg 可执行文件。
回复 1(给罗伯特·朗特里):
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;
【问题讨论】:
-
我需要一个快速的解决方案。我不太关心视频质量。谢谢。
标签: android encoding ffmpeg h.264 video-encoding