node.js - Fluent FFMPEG 复杂过滤器将文件拆分为多个输出
问题描述
似乎可以从单个 FFMPEG 命令获得多个输出:ffmpeg overlay on multiple output
我想知道如何在 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()
推荐阅读
- html - 如何处理网格溢出?
- javascript - 从页面加载超时调用 removeChild 不起作用
- python - 关于在python中迭代函数的问题
- android - 在 DAO 查询方法中传递 POJO 作为参数来更新列的子集?
- nginx - 使用 X-Accel 保护 nchan 的 websocket 通道
- python - 如何通过 Pandas 导出到 csv 来排除空值
- date - 用于检查日期是否没有时间组件的液体模板逻辑?字符串比较失败
- scala - scala sbt scala项目上没有MethodError异常
- go - 如何解密在 Go 中使用固定盐生成的字符串?
- php - 使用 PHP 运行 CSV 导入到 MySQL 时的错误处理