这两个视频有啥区别?
Posted
技术标签:
【中文标题】这两个视频有啥区别?【英文标题】:What is the difference between these 2 videos?这两个视频有什么区别? 【发布时间】:2019-03-12 09:12:50 【问题描述】:我正在使用fluent-ffmpeg 调整视频大小。
我不知道发生了什么。我有 2 个视频文件,一个有效,另一个无效。我一直在搜索两个文件的mediainfo
输出,检查是否存在差异,但除了filesize
、duration
等之外,没有区别(相同的codec
、format
、width
/height
、 frame rate
等)
Here's 两个文件的链接。
我一直在使用输入流将这些视频文件读入 fluent-ffmpeg,如下所示:
await new Promise((resolve, reject) =>
ffmpeg(file.stream)
.output(path)
.size('426x240')
.on('start', function()
console.log('started');
)
.on('error', function(err)
console.log('An error occurred: ' + err.message);
)
.on('progress', function(progress)
console.log('... frames: ' + progress.frames);
)
.on('end', function()
console.log('Finished processing');
resolve();
)
.run();
);
工作文件打印:
started
... frames: 86
... frames: 107
Finished processing
但非工作文件似乎没有任何框架,并打印:
started
... frames: 0
Finished processing
知道可能出了什么问题吗?
正在执行的ffmpeg命令:
ffmpeg -i pipe:0 -y -filter:v scale=w=426:h=240 uploads/works.mp4
【问题讨论】:
【参考方案1】:我一直在搜索这两个文件的 mediainfo 输出,检查是否存在差异,但除了文件大小、持续时间等之外,没有任何区别
确实如此,但仅限于完整模式。在文件上尝试mediainfo -f
,你会看到:
IsStreamable : Yes
对于工作文件,和
IsStreamable : No
对于非工作文件。
这里的“否”表示输入需要支持seek(header在末尾,播放器需要seek到end来解析header,然后再回到开头解析数据)。
【讨论】:
啊,我明白了,谢谢。如here 所述,我可以通过将标题移动到文件的前面来使其工作 ffprobe中是否可以获取isStreamable?【参考方案2】:当您将文件作为流传递时,ffmpeg 似乎在探测文件时遇到问题。但是,如果您将其作为文件传递,它确实有效。可能是因为探测/解复用器可以选择使用搜索等。我试图增加探测缓冲区但没有让它工作。
这不起作用:
cat doesnt_work.mp4 | ffmpeg -i pipe:0 test.mp4
但这有效:
ffmpeg -i doesnt_work.mp4 test.mp4
【讨论】:
谢谢,我会把它保存到磁盘上的一个临时文件中并从那里调整大小。以上是关于这两个视频有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章