如何使用FFmpeg将进度条嵌入视频中?

11

如何使用node-fluent-ffmpeg将进度条嵌入视频中。

示例:

在此输入图片描述

2个回答

5

脚本:

这是一个可用的脚本,使用node的fluent-ffmpeg在视频底部绘制一个20px深红色进度条。它需要安装最新版本的ffmpeg才能工作(我使用的是4.0.2)。您可以将进度条颜色从DarkRed更改为任何有效的ffmpeg颜色,并通过将bar_height设置为所需像素值来更改高度。

#!/usr/bin/env node
var ffmpeg = require('fluent-ffmpeg');

let bar_height = 20;
let input_file = 'input_file.mp4';
let output_file = 'output_file.mp4';
ffmpeg.ffprobe(input_file, (err, data) => {
    let input_duration = data.format.duration;
    let progressBarGraph = [
        {
          inputs: '0',
          filter: 'drawbox',
          options: {
              h: 'iw',
              c: 'DarkRed',
              width: 'iw',
              thickness: 'fill'
          },
          outputs: 'rectangle'
        },
        {
            inputs: ['0', 'rectangle'],
            filter: 'overlay',
            options: {
                x: `-W+W*(t/${input_duration})`,
                y: `H-${bar_height}`
            },
            outputs: "output"
        }
    ];

    ffmpeg(input_file).complexFilter(progressBarGraph, "output").output(output_file).run();
});

示例输出:

这是一个视频文件输出的截图:

Rogue One预告片底部的红色条


你能否演示如何在进度条前面添加一个图标,使其随着进度条移动? - Rehan
如果我想在视频顶部显示这个SeekBar怎么办? - Rehan

3

您可以使用像flowplayer这样的库,如文档中建议的那样。

此外,在查看插件提供的选项后,您可以编写自己的seekbar,当视频加载时需要遵循以下步骤进行计算:

  1. 获取视频持续时间
  2. 获取视频尺寸(特别是用于seekbar的宽度)
  3. 您需要将seekbar的宽度与视频的持续时间进行映射,并设置最小和最大限制
  4. 对于seekbar,您需要两个相同大小的矩形;但是一个具有完整的宽度,另一个为零
  5. 设置一个间隔,每秒钟添加到宽度和视频持续时间的映射结果中
  6. 检测点击/拖动事件以更新红色矩形的相应宽度,并使用seek option在视频中导航

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接