关于Android 使用ffmpeg给视频加水印速度慢的问题解决

阿木木 阿木木 | 102 | 2022-08-18

8ffed32bef5c43e4a84fca56d98047c6
在使用ffmpeg给视频添加水印的过程中速度过慢的问题代码如下:

StringBuilder sb1 = new StringBuilder();
        sb1.append("ffmpeg");
        sb1.append(" -i");
        sb1.append(" " + vediooutput);
        sb1.append(" -i");
        sb1.append(" " + imagePath);
        sb1.append(" -filter_complex");
        sb1.append(" overlay=20:35");
        sb1.append(" -vcodec libx264 -profile:v baseline -preset ultrafast -b:v 3000k -g 25");
        sb1.append(" -y");
        sb1.append(" " + mergeVideo);

这段代码是一个正常来添加水印的ffmpeg命令。因为我在做版本迭代的过程中修改了底层的视频源数据,导致之后生成的视频文件在使用这个命令时速度异常缓慢,大概需要好几分钟,甚至更长时间,这样是无法接受的。开始我以为是ffmpeg对手机的性能有要求,后来我在查阅资料的过程中发现这个命令的处理速度还是很快的。所以问题的原因没有出在命令行上面,在我查找的时候发现是我的视频源的问题。对于视频源没有做任何编码的处理,导致源数据过于庞大。下面是解决办法:

StringBuilder sb = new StringBuilder("ffmpeg");
        sb.append(" -i");
        sb.append(" " + path);
        sb.append(" -codec");
        sb.append(" copy");
        sb.append(" -bsf");
        sb.append(" h264_mp4toannexb ");
        sb.append("-r 25  ");
        sb.append("-s 720x1280 ");
        sb.append("-pix_fmt nv21  ");
        sb.append("-ar 44100  ");
        sb.append("-ac 1  ");
        sb.append("-analyzeduration 500  ");
        sb.append("-vcodec libx264  ");
        sb.append("-profile:v baseline  ");
        sb.append("-preset ultrafast  ");
        sb.append("-b:v 4m -g 30  ");
        sb.append("-acodec libfdk_aac  ");
        sb.append("-b:a 512k  ");
        sb.append(" -f");
        sb.append(" mpegts");
        sb.append(" " + path.replaceAll("mp4", "ts"));

这里的处理方式可以有很多种,我这种处理是因为我需要一个.ts结尾的视频文件进行一个分段合成的需求,所以在转码的过程中对这个视频源进行了一个处理。这个操作可能会比较耗时,建议做一个异步或者子线程处理。但是相比添加水印的耗时那就不过九牛一毛了。经过测试10s左右的视频转码大概需要1-2s,这样的处理效率还是可以接受的。

文章标签: Android
推荐指数:

真诚点赞 诚不我欺~

关于Android 使用ffmpeg给视频加水印速度慢的问题解决

点赞 收藏 评论