我在ffmpeg媒体转换脚本上挣扎。
我正在使用fluent-ffmpeg库与node.js
。
我的应用程序应该接收一个流作为输入,使用ffmpeg调整它的大小,然后输出一个流。
然而,我绝对无法处理ffmpeg输入流,即使指定输入格式(-f
ffmpeg的选项)。
工作代码(无流)
import * as ffmpeg from 'fluent-ffmpeg';
ffmpeg('myMp4File')
.inputFormat('mp4')
.audioCodec('aac')
.videoCodec('libx264')
.format('avi')
.size('960x540')
.save('mySmallAviFile');
错误代码(使用流)
import * as ffmpeg from 'fluent-ffmpeg';
import { createReadStream } from 'fs';
ffmpeg(createReadStream('myMp4File'))
.inputFormat('mp4')
.audioCodec('aac')
.videoCodec('libx264')
.format('avi')
.size('960x540')
.save('mySmallAviFile');
生成以下ffmpeg错误:
Error: ffmpeg exited with code 1: pipe:0: Invalid data found when processing input
Cannot determine format of input stream 0:0 after EOF
Error marking filters as finished
Conversion failed!
这个错误明确指出ffmpeg无法识别输入格式,尽管有参数-f mp4
。
我读了一页又一页的ffmpeg的男人,但我可以找到任何有关我的问题的相关信息。
互补信息下面是command._getArguments()
的输出,显示了库生成的完整ffmpeg命令:
[
'-f', 'mp4',
'-i', 'pipe:0',
'-y', '-acodec',
'aac', '-vcodec',
'libx264', '-filter:v',
'scale=w=960:h=540', '-f',
'avi', 'mySmallAviFile'
]
完整的ffmpeg命令如下:
ffmpeg -f mp4 -i pipe:0 -y -acodec 'aac' -vcodec 'libx264 -filter:v 'scale=w=960:h=540' -f 'avi' mySmallAviFile
我得到同样的错误,但仅适用于文件末尾有moov atom
元数据的文件。
用:ffmpeg -i input.mp4 -movflags faststart out.mp4
将mov atom
移到文件开头后,错误消失了。