我如何才能知道我的编码文件有多大?

我如何才能知道我的编码文件有多大?

我正在使用以下命令转换视频:

ffmpeg -i "input.avi" -vcodec mpeg4 -r 15 -sameq "output.avi"

但是我只对 output.avi 的文件大小感兴趣。是否有一个命令可以发送给 ffmpeg,以便它实际上不写入文件,而是告诉我文件的大小?

答案1

你无法真正估计视频文件的大小编码。由于编解码器的工作方式,这是不可能的。它为每个帧分配一定数量的位,但这个数量通常取决于帧本身的内容。

不过,也有一些解决方案。


1. 便宜的:

让它编码,检查文件大小并再次删除该文件

2.“解决方法”:

使用简单的计算器自行计算文件大小。这仅在使用恒定比特率时有效。例如,-b 500k指定 500 kBit/s。您必须确保指定编解码器可以使用的比特率。例如,无法使用 的200k比特率压缩 1080p 视频mpeg4,因为它需要的比特率远高于这个数字。

3.“真正的”解决方案:

我想到的最后一个选项是将输出传输到管道/dev/null并测量传输的文件大小。然而,这并不适用于所有格式,因为 FFmpeg 需要可搜索的文件才能产生有效的输出。

不过,对于 AVI 来说,它工作得很好。以下命令将通过管道传输到/dev/null,从而不留下文件本身的痕迹,最后输出编码文件的大小。

ffmpeg -i input.avi -vcodec mpeg4 -b 3M -f avi pipe:1 | pv > /dev/null

…例如这样:

5.42MB 0:00:10 [ 521kB/s]

它有什么作用?

  • 您必须使用 指定格式-f avi。否则 FFmpeg 将不知道使用哪种格式。
  • pipe:1告诉 FFmpeg将输出写入管道
  • 我们将此输出输入到管道查看器, 短的pv
  • Pipe viewer 将测量传输的大小并将您的视频输出至/dev/null

唯一的小缺点是,在视频播放完成之前,输出看起来有点奇怪。我还没有找到完全禁用 FFmpeg 输出的方法开始pv使用它。

答案2

如果您担心的是写入磁盘的速度/磨损,您可以考虑使用 RAM 安装的卷。它们在 Linux 上很容易设置,但在 Windows 上可能就不那么容易了。优点是它适用于所有格式,并且允许事后相当快地复制到磁盘。缺点是需要至少与转换后的视频一样多的备用 RAM。

正如在接受的答案中提到的那样,否则,无法预先计算使用不同比特率编解码器的视频的大小。

相关内容