android - How to encode jpeg images to H264 very fast(将图像转换为视频)

标签 android encoding ffmpeg h.264 video-encoding

我有 30 张分辨率为 480 x 640 的 JPEG 图片 (.jpg)。 每张图片大约需要 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 命令,也不熟悉我需要使用的参数,这就是我在这里发布这个问题的原因。

视频质量需要ok,不需要完美。

请注意:我在一个 Android 应用程序中运行这些命令,我​​在其中使用 ProcessBuilder 执行了 ffmpeg。

回复 1(给 Robert 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;

最佳答案

去掉-r 1/5怎么样?它加快了我的编码速度。

关于android - How to encode jpeg images to H264 very fast(将图像转换为视频),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17117721/

相关文章:

python - 如何将 "b'\\xfe\\xff\\x002\\x000\\x001\\x00 9'"转换为python中的字符

c - 如何通过管道传输到 ffmpeg RGB 值 10?

c# - pictureBox 图像处理异常

java - 如何识别字符串是否包含无法使用 utf8-mb4 字符集存储的特殊字符

encoding - 编码和字符集有什么区别?

iphone - iphone sdk中的ffmpeg集成错误?

android - 在 Android 中跨 Activity 监听

android - 错误 :Execution failed for task ':app:compileDebugAidl ProcessException

android - 如何在所需位置动态地将edittext添加到linearlayout到android中的linearlayout

java - 即使在全新安装并重新运行后也无法将数据库从版本 2 降级到版本 1