【问题标题】:AWS ffmpeg-lambda-layer and concat protocol (Node.js)AWS ffmpeg-lambda-layer 和 concat 协议 (Node.js)
【发布时间】:2021-05-27 02:53:11
【问题描述】:

我正在尝试使用 ffmpeg lambda 层连接两个 .mp3 文件。我有我认为正确的命令,但我很难用代码表示它,以便为 lambda 层正确格式化。这是我正在努力纠正的一段代码:

spawnSync(
  '/opt/ffmpeg/ffmpeg',
  [
    '-i',
    '"concat:/tmp/pt1.mp3|/tmp/pt2.mp3"',
    '-acodec',
    'copy',
    `/tmp/${fileName}`
  ],
  { stdio: 'inherit' }
)

我得到的错误:"concat:/tmp/pt1.mp3|/tmp/pt2.mp3": No such file or directory

我尝试列出 /tmp/ 文件夹中的文件 - 输入中列出的两个文件都在那里,不知道为什么 lambda 层找不到它们。

类似问题:https://lists.ffmpeg.org/pipermail/ffmpeg-user/2019-December/046299.html。 ffmpeg 连接协议文档:https://trac.ffmpeg.org/wiki/Concatenate#protocol.

提前致谢!

【问题讨论】:

    标签: node.js amazon-web-services lambda ffmpeg


    【解决方案1】:

    更新: 能够通过使用 concat demuxer 而不是 concat 协议来解决这个问题。文档:https://trac.ffmpeg.org/wiki/Concatenate#demuxer

    它需要带有输入文件列表的 .txt 文件,所以我必须创建一个。这是我的解决方案:

    // in the head of the file
    const { writeFile } = require('fs')
    const { promisify } = require('util')
    
    const asyncWriteFile = promisify(writeFile)
    
    // ...
    
    await asyncWriteFile('/tmp/list.txt', 'file \'/tmp/pt1.mp3\'\r\nfile \'/tmp/pt2.mp3\'', (err) => {
     if (err)
      console.log(err)
    })
    
    // concat
    spawnSync(
     '/opt/ffmpeg/ffmpeg',
     [
       '-f',
       'concat',
       '-safe',
       '0',
       '-i',
       '/tmp/list.txt',
       '-c',
       'copy',
       `/tmp/${fileName}`
      ],
      { stdio: 'inherit' }
    )
    

    【讨论】:

      猜你喜欢
      • 2017-11-06
      • 1970-01-01
      • 2018-07-02
      • 1970-01-01
      • 1970-01-01
      • 2016-02-19
      • 1970-01-01
      • 1970-01-01
      • 2022-11-27
      相关资源
      最近更新 更多