提高将视频Blob转换为gif的性能

蒙蒂市长

我有一个程序(在这里),使用getusermedia将视频Blob转换为gif。为了利用让我将画布框架转换为gif框架的库(GIFEncoder),我首先使用将vide blob绘制到画布,ctx.drawImage然后再将框架绘制到gif。

有没有更有效的方法来做到这一点?

代码:

<!Doctype html>
<html>
<head>
<style type="text/css">
    body {

    }
</style>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="LZWEncoder.js"></script>
<script type="text/javascript" src="NeuQuant.js"></script>
<script type="text/javascript" src="GIFEncoder.js"></script> 
<script type="text/javascript" src="b64.js"></script>
</head>
<body>
        <title>RecorderGif</title>
        <header>
            <h1>RecordGif</h1>
        </header>
        <article>
            <video id="video" width="320" height="200" style="display:none" autoplay=""></video>
            <section>
                <button id="btnStart">Start video</button>
                <button id="btnStop">Stop video</button>
                <button id="btnSave">Download</button>             
                            </section>
            <canvas id="canvas" width="320" height="240"></canvas>
        </article>
<script type="text/javascript">//<![CDATA[ 
var encoder = new GIFEncoder();
encoder.setRepeat(0);
encoder.setDelay(100);
encoder.start();
window.onload = function() {

//Compatibility


 navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia;
    var data = []
    var canvas = document.getElementById("canvas"),
        context = canvas.getContext("2d"),
        video = document.getElementById("video"),
        btnStart = document.getElementById("btnStart"),
        btnStop = document.getElementById("btnStop"),
        btnSave = document.getElementById("btnSave")
        videoObj = {
            video: true,
            };

    btnStart.addEventListener("click", function() {
        var localMediaStream;

        if (navigator.getUserMedia) {
            navigator.getUserMedia(videoObj, function(stream) {              
                video.src = (navigator.webkitGetUserMedia) ? window.webkitURL.createObjectURL(stream) : stream;
                localMediaStream = stream;
                var addFrame = setInterval(function() {
                data.push(canvas.toDataURL('image/png'))
            },100);

            }, function(error) {
                console.error("Video capture error: ", error.code);
            });

            btnStop.addEventListener("click", function() {
                clearInterval(addFrame)
                localMediaStream.stop();

            });
            btnSave.addEventListener("click", function() {
                for (var i = 0; i < data.length; i++) {
                    var frame = new Image();
                    frame.src=data[i]
                    context.drawImage(frame,0,0)
                    encoder.addFrame(context);

                };
                encoder.finish();
                var binary_gif = encoder.stream().getData() //notice this is different from the as3gif package!
                var data_url = 'data:image/gif;base64,'+encode64(binary_gif);
                var gif = window.open('about:blank','','width=320,height=240')
                gif.document.location.href=data_url
            });

            setInterval(function() {context.drawImage(video, 0, 0, 320, 240)},100);
        }

    });
};
//]]>  
</script>
</body>
</html>
用户名

由于浏览器不支持GIF编码,因此您非常依赖JavaScript解决方案,例如您所使用的解决方案。

改善编码的唯一方法是遍历源代码,看看是否可以优化它的某些部分,例如利用类型化数组(如果没有的话),了解特定于引擎的引擎编译器(例如,类似引擎的东西),遵守引擎细节。使用模拟类型,完整构造函数,非变形对象等)。

另一个技巧是在播放视频时使用GIF编码(对于每个帧,使用currentPosition和事件手动“将其手动向前” ),并使用屏幕外的视频元素进行编码这可能会为浏览器和引擎留下更多资源,以使脚本更快地运行脚本(部分取决于系统及其对硬件解码视频的支持-在屏幕上更新视频仍然会产生开销,这可能会或可能不会影响编码过程)。

我的2.5美分

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将图像转换为视频

来自分类Dev

如何使用AVFoundation将视频转换为动画gif?

来自分类Dev

如何将7sec视频转换为Gif Android

来自分类Dev

使用ffmpeg将视频转换为Gif Android Studio

来自分类Dev

delphi将gif透明转换为png

来自分类Dev

将消息网址转换为youtube视频

来自分类Dev

在保留帧频的同时将gif动画转换为linux服务器上的视频

来自分类Dev

将视频转换为图像序列MATLAB

来自分类Dev

python将视频转换为音频

来自分类Dev

spark-将数据框转换为列表以提高性能

来自分类Dev

将图像转换为Blob

来自分类Dev

将ZIP转换为Blob

来自分类Dev

提高将字节转换为UInt32的性能

来自分类Dev

如何将动画GIF转换为YouTube友好的视频格式?

来自分类Dev

将任何视频转换为高清视频

来自分类Dev

如何将Blob转换为视频?

来自分类Dev

值得将ArrayList转换为数组以提高性能吗?

来自分类Dev

将视频文件转换为.ogg

来自分类Dev

如何使用AVFoundation将视频转换为动画gif?

来自分类Dev

将CTE转换为性能更好的查询

来自分类Dev

如何将7sec视频转换为Gif Android

来自分类Dev

FFMpeg将jpeg图像转换为视频

来自分类Dev

将GIF转换为视频会更改其持续时间

来自分类Dev

将asciinema输出转换为gif

来自分类Dev

如何使用ffmpeg将视频转换为带有文本叠加层的GIF

来自分类Dev

如何将gif转换为阴影?

来自分类Dev

如何使用 ffmpeg 以合理的质量将视频转换为 GIF?

来自分类Dev

将列表集合转换为字典以提高性能 C#

来自分类Dev

将实体框架 C# 代码转换为原始 SQL 以提高性能