流利的FFMPEG复杂过滤器可将文件拆分为多个输出

问题描述

单个FFMPEG命令似乎有多个输出ffmpeg overlay on multiple outputs

我想知道如何在FFMPEG中做到这一点。我专门使用complexFilter选项,尝试将视频分成4种不同的大小并放置一个叠加层,然后保存4个结果文件

代码是我试图将视频简单地分成4个并保存的尝试。我收到Error: ffmpeg exited with code 1: Filter split:output3 has an unconnected output错误。我不确定如何将输出连接到fluent-ffmpeg中的文件

    let ffmpegCommand = ffmpeg() 
        .addInput(path.join(__dirname,PROCESSING_CACHE_DIRECTORY,"tempImage_%d.jpg"))

        .addOutput(outputPathFull)
        .addOutput(outputPathMed)
        .addOutput(outputPathSmall)
        .addOutput(outputPathThumb)


        .toFormat('mp4')
        .videoCodec('libx264')
        .outputoptions('-pix_fmt yuv420p')
        .complexFilter([
        {
                filter: 'split',options: '4',inputs: ['0:v'],outputs: [outputPathFull,outputPathMed,outputPathSmall,outputPathThumb]
            },])

当我翻转输出并将它们放在complexFilter下面时,我得到4个文件-一个文件的质量合适(并且比预期大4倍),其他文件的质量很低。

解决方法

ffmpeg中执行此操作的正确方法是使用-map为每个输出定义所需的过滤器,并按照示例使用fluent-ffmpeg

let ffmpeg = require('fluent-ffmpeg')
let fileName = 'video.mp4'
let outputID1 = '1'
let outputID2 = '2'
let outputID3 = '3'
let outputID4 = '4'
let outputPathFull = 'out-1.mp4'
let outputPathMed = 'out-2.mp4'
let outputPathSmall = 'out-3.mp4'
let outputPathThumb = 'out-4.mp4'

ffmpeg() 
.addInput(path.join(__dirname,PROCESSING_CACHE_DIRECTORY,fileName))
.complexFilter([
{
        filter: 'split',options: '4',inputs: ['0:v'],outputs: [outputID1,outputID2,outputID3,outputID4]
    },])

.output(outputPathFull)
.map(outputID1)
.toFormat('mp4')
.addOutputOption('-c:v libx264')
.addOutputOption('-pix_fmt yuv420p')

.output(outputPathMed)
.map(outputID2)
.toFormat('mp4')
.addOutputOption('-c:v libx264')
.addOutputOption('-pix_fmt yuv420p')

.output(outputPathSmall)
.map(outputID3)
.toFormat('mp4')
.addOutputOption('-c:v libx264')
.addOutputOption('-pix_fmt yuv420p')

.output(outputPathThumb)
.map(outputID4)
.toFormat('mp4')
.addOutputOption('-c:v libx264')
.addOutputOption('-pix_fmt yuv420p')

.run()

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...