为什么ffmpeg处理流失败?



我在ffmpeg媒体转换脚本上挣扎。
我正在使用fluent-ffmpeg库与node.js

我的应用程序应该接收一个流作为输入,使用ffmpeg调整它的大小,然后输出一个流。

然而,我绝对无法处理ffmpeg输入流,即使指定输入格式(-fffmpeg的选项)。

但是,当在mp4文件(没有扩展名)上执行完全相同的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移到文件开头后,错误消失了。

最新更新