这2个视频有什么区别?

What is the difference between these 2 videos?

我正在使用 fluent-ffmpeg 调整视频大小。

虽然我不知道发生了什么。我有 2 个视频文件,一个有效,另一个无效。我一直在搜索这两个文件的 mediainfo 输出,检查差异,但除了 filesizeduration 等。没有区别(相同的 codecformat, width/height, frame rate 等)

Here's a link 到两个文件。

我一直在使用输入流将这些视频文件读入 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

当您将文件作为流传递时,ffmpeg 似乎无法探测文件。但如果您将它作为文件传递,它确实有效。可能是因为 probing/demuxer 可以选择使用搜索等。我试图增加探测缓冲区但没有让它工作。

这不起作用:

cat doesnt_work.mp4 | ffmpeg -i pipe:0 test.mp4

但这行得通:

ffmpeg -i doesnt_work.mp4 test.mp4

I've been scouring the mediainfo outputs of both files, checking for discrepancies but other than filesize, duration etc. there's no difference

确实如此,但仅限于完整模式。在文件上尝试 mediainfo -f,您会看到:

IsStreamable                             : Yes

工作文件,

IsStreamable                             : No

对于非工作文件。

a "no"这里的意思是input需要支持seek(header在末尾,播放器需要seek到end解析header再seek回到beginning解析数据)。