【发布时间】:2020-11-03 20:42:40
【问题描述】:
我有一个 lambda 函数可以用 ffmpeg 裁剪视频
我是这样安装层的
#!/bin/bash
mkdir -p layer
cd layer
rm -rf *
curl -O https://johnvansickle.com/ffmpeg/builds/ffmpeg-git-amd64-static.tar.xz
tar -xf ffmpeg-git-amd64-static.tar.xz
mv ffmpeg-git-*-amd64-static ffmpeg
rm ffmpeg-git-amd64-static.tar.xz
我不知道是哪个版本,但应该是最近的,因为我今天最后一次这样做了
然后我的 node js lambda 函数正在运行以下 nodejs 模块https://github.com/fluent-ffmpeg/node-fluent-ffmpeg
return new Promise((resolve, reject) => {
ffmpeg(inputFile.name)
.videoFilters(`crop=${width}:${height}:${x}:${y}`)
.format('mp4')
.on('error', reject)
.on('end', () => resolve(fs.readFileSync(outputFile.name)))
.save(outputFile.name);
例如videoFilters('crop=500:500:20:20')
我有以下错误
ffmpeg exited with code 1: Error reinitializing filters!
Failed to inject frame into filter network: Invalid argument
Error while processing the decoded data for stream #0:0
Conversion failed!
在我的本地计算机上,我在完全相同的图像上运行以下命令
ffmpeg -i in.mp4 -filter:v "crop=500:500:20:20" out.mp4
我的 ffmpeg 版本是 4.2.2,效果很好
我对所有视频都没有问题,这里有一个视频引起了我的问题https://ajouve-util.s3.amazonaws.com/earth.mp4
【问题讨论】:
-
所以看起来您将无效参数传递给 .videoFilters。您检查失败时的宽度、高度、x 和 y 值了吗?拒绝时传递值。
-
我不认为这是一个参数问题,这是与具有完全相同参数的其他视频一起使用的
-
你能把参数
crop=${width}:${height}:${x}:${y}放在一个变量中,把它记录下来并粘贴到这里吗?我同意这很可能是这种情况。如果你计算 w/h 和crop 值,那么500.1可能会给出准确的结果。 -
尝试使用 ffprobe 找出视频的确切宽度和高度。
标签: node.js ffmpeg aws-lambda