ffmpeg 视频处理有fluent-ffmpeg例子

2019-10-23 10:23:43

这里有简单的ffmpeg-fluent一个例子

参考地址  ffmpeg 视频处理


  • 给 input.mp4 视频,加上 input.png 水印 位置为 x:y

ffmpeg -i input.mp4 -i input.png -filter_complex overlay=x:y -acodec copy output.mp4
  • 拼接两个视频,按照 input.txt 中的顺序 ,两个视频必须同样的尺寸

// input.txt 的内容// file 'input1.mp4'// file 'input2.mp4'ffmpeg -f concat -safe 0 -i input.txt -c copy output.mp4
  • 加文字水印

ffmpeg -i input.flv -vf "drawtext=fontfile=simhei.ttf: text='雷':x=100:y=10:fontsize=24:fontcolor=yellow:shadowy=2" drawtext.mp4
  • 加上node

const ffmpeg = require('fluent-ffmpeg');var fs = require('fs');var path = require('path');var vname = '6619626578831740000';var input = './input';var output = './output';var middle = './middle';// 用 endingH 生成 endingW 视频// ffmpeg(path.join(__dirname, middle, `endingH.mp4`))// .size('960x540').autopad('black')// .on('error', function (err) {//     console.log('生成endingW视频发生错误: ' + err.message);// }).on('end', function () {//     console.log('生成endingW视频成功');// }).save(path.join(__dirname, middle, `endingW.mp4`));new Promise((resolve) => {

    ffmpeg(path.join(__dirname, input, `${vname}.mp4`))
    .ffprobe(0, function(err, metadata) {
        !!err && console.log('无法读取视频大小:' + err.message);
        var endName = metadata.streams[0].height > 600 ? 'endingH' : 'endingW';
        var out = fs.createWriteStream(path.join(__dirname, middle, 'input.txt'), 'utf8');
        out.write(`file '${path.join(__dirname, input, vname)}.mp4'\nfile '${path.join(__dirname, middle, endName)}.mp4'`)
        out.end;
        out.on('ready', function () {
            console.log('创建文本成功');
             resolve();
        });
    });}).then(() => {

    return new Promise((resolve) => {
        ffmpeg(path.join(__dirname, middle,'input.txt'))
        .inputOptions(
            '-f','concat',
            '-safe','0'
        ).on('error', function (err) {
            console.log('合并视频发生错误: ' + err.message);
        }).on('end', function () {
            console.log('合并视频成功');
            resolve();
        }).save(path.join(__dirname, middle, 'first.mp4'));
    });
    }).then(() => {

    return new Promise((resolve) => {
        ffmpeg(path.join(__dirname, middle, 'first.mp4'))
        .input(path.join(__dirname, middle, 'logo.png'))
        .inputOptions(
            '-filter_complex','overlay=10:10'
        ).on('error', function (err) {
            console.log('水印添加错误: ' + err.message);
        }).on('end', function () {
            console.log('水印添加成功');
            resolve();
        }).save(path.join(__dirname, middle, 'second.mp4'));
    });}).then(() => {

    return new Promise((resolve) => {
        ffmpeg(path.join(__dirname, middle, 'second.mp4'))
        .videoFilters("drawtext=fontfile=simhei.ttf:text='tttttTTT':x=100:y=10:fontsize=24:fontcolor=yellow:shadowy=2")
        .on('error', function (err) {
            console.log('文字水印添加错误: ' + err.message);
        }).on('end', function () {
            console.log('文字水印添加成功');
            resolve();
        }).save(path.join(__dirname, output, `${vname}.mp4`));
    });}).then(() => {
    console.log(path.join(__dirname, output, `${vname}.mp4`));})// [https://github.com/Nana-Cti/fluent-ffmpeg-watermark](https://github.com/Nana-Cti/fluent-ffmpeg-watermark)
1人点赞
游戏与3D效果
作者:总有妖孽勾引我_cf18
链接:https://www.jianshu.com/p/25816cc8a6bc
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


  • 2019-11-28 11:00:35

    Vue子组件调用父组件的方法

    下面有三种方法,我自己重点推荐第一种,毕竟这种简单粗暴好用好理解,不过这个有一个弊端,再组件嵌套组件的时候,尤其是用第三方组件里面调用自己的子组件的时候,其实已经是孙子组件了,这个时候就要parent.parent。。。。,这样就不好了,我们就得考虑其他方法了,具体怎么判断是父组件,还是爷爷组件,我会单独出一篇文章讲述。

  • 2019-11-29 13:04:47

    计算一个多边形的重心点坐标(准确版)

    在之前的 《如何判断一个多边形是否合法》 一文中有提到,用无人机规划飞行路线前,往往需要框选一个多边形的区域。 而在地图控件上显示这个多边形区域时,往往会遇到这样一个需求:需要把所要测绘的多边形区域移动到地图中心。 实现这个需求的基本思路就是:获取到多边形区域的重心点坐标,然后利用地图控件的 setCenter方法,就可以把地图的显示中心移动到多边形区域重心了。那么问题来了,如何求出一个多边形的重心点坐标呢?

  • 2019-11-29 13:06:27

    如何判断一个多边形是否合法

    利用无人机对一片区域进行测绘前,我们会先在地图上框选一个区域,然后再规划飞行的路线,而需要测绘的这片区域往往是一个多边形。在 MeshKit 中,我们加入了多边形区域的编辑功能,其中就涉及判断用户所编辑出来的多边形是否合法的问题。

  • 2019-11-29 13:47:22

    百度地图做电子围栏总结

    在地图上画出围栏,设置围栏信息后保存,生成围栏列表。全选时,地图视野可看到全部的围栏区域,单独勾选会调整地图视野到当前勾选的围栏。围栏区域的中心点要显示围栏名称。

  • 2019-11-29 13:50:29

    图片连接处出现白线

    block导致,只要父元素设置font-size:0或者设置img display: block; 便可。但是我设置了没有用,这条线不是所有的机型都有,而且页面滚动之后又消失,我琢磨半天,各种尝试,发现把图片高度减少(增加)1px就解决了。因为我们的项目是用postcss-px-to-viewport,我每张图片都是设置高度的,应该是数值转换出现偏差。

  • 2019-11-29 13:54:07

    粗略计算多边形中心点(并不是很准确,但简单好用)

    也是再做栅栏系统,搜索如何获取多边形中心点的问题上,发现了这个,简单易于理解,但是并不是特变准确,但也不影响使用。 后来发现了新的算法,并且百度地图也提供相应的api。 具体内容我写在了前面的文章,大家可以找一下。

  • 2019-11-29 14:20:38

    vue,vuthis.$parent算法

    由于组件嵌套,其实vue parent的位置也改变了,我们可以通过下面的图片,来看一下,parent到底什么哪一层

  • 2019-11-29 14:23:24

    百度地图 多个标记点设置最佳视角

    通过下面的语法,我们可以为不规则图形,以及过大的图形进行地图适配,更好的展示我们画的图形,当然,如果展示所有的图形,我们可以暴力的把所有的点组合起来进行展示,点过多不知道会不会影响性能,不过我们也可以从后台精简点数,不过地球是圆的,不知道好不好做。