这两个视频有啥区别?

Posted

技术标签:

【中文标题】这两个视频有啥区别?【英文标题】:What is the difference between these 2 videos?这两个视频有什么区别? 【发布时间】:2019-03-12 09:12:50 【问题描述】:

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

我不知道发生了什么。我有 2 个视频文件,一个有效,另一个无效。我一直在搜索两个文件的mediainfo 输出,检查是否存在差异,但除了filesizeduration 等之外,没有区别(相同的codecformatwidth/heightframe 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

【讨论】:

谢谢,我会把它保存到磁盘上的一个临时文件中并从那里调整大小。

以上是关于这两个视频有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

EntityDbContext SaveChanges :这两个代码有啥区别?

这两个代码片段有啥区别?

这两个字符串有啥区别?

这两个片段有啥区别?

这两个 Python 语句有啥区别?

这两个媒体查询有啥区别? [复制]