问题描述
单个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()