簡體   English   中英

AWS ffmpeg-lambda-layer 和 concat 協議 (Node.js)

[英]AWS ffmpeg-lambda-layer and concat protocol (Node.js)

我正在嘗試使用 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.ZFC35FDC70D5FC69D269883A822C7A53 Ffmpeg 連接協議文檔: https://trac.ffmpeg.org/wiki/Concatenate#protocol

提前致謝!

更新:能夠通過使用 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' }
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM