我正在使用以下命令转换视频:
ffmpeg -i "input.avi" -vcodec mpeg4 -r 15 -sameq "output.avi"
Run Code Online (Sandbox Code Playgroud)
但是我只对 output.avi 的文件大小感兴趣。有没有我可以给 ffmpeg 的命令,这样它实际上不会写一个文件,而是告诉我它有多大?
slh*_*hck 12
在编码之前,您无法真正估计视频文件的大小。由于编解码器的工作方式,这是不可能的。它为每一帧分配一定数量的比特,但这个数量通常取决于帧本身的内容。
但是,有一些解决方案。
让它编码,检查文件大小并再次删除文件
使用简单的计算器自行计算文件大小。这仅在使用恒定比特率时有效。例如,将其指定-b 500k
为 500 kBit/s。您必须确保指定编解码器可以使用的比特率。例如,没有办法压缩200k
比特率为 in的 1080p 视频mpeg4
,因为它需要的远不止这些。
我想到的最后一个选项是将输出/dev/null
传输到管道并测量管道文件的大小。但是,这不适用于所有格式,因为 FFmpeg 需要一个可查找的文件来生成有效的输出。
尽管如此,对于 AVI,它仍然运行良好。下面的命令将通过管道进入/dev/null
,从而不会留下文件本身的痕迹,最后输出编码后的文件大小。
ffmpeg -i input.avi -vcodec mpeg4 -b 3M -f avi pipe:1 | pv > /dev/null
Run Code Online (Sandbox Code Playgroud)
...例如像这样:
5.42MB 0:00:10 [ 521kB/s]
Run Code Online (Sandbox Code Playgroud)
它有什么作用?
-f avi
. 否则 FFmpeg 将不知道使用哪种格式。pipe:1
告诉 FFmpeg将输出写入管道。pv
。/dev/null
.唯一的小缺点是在视频完成之前输出看起来有点奇怪。我还没有找到一种方法来完全禁用 FFmpeg 的输出并开始pv
使用它。
归档时间: |
|
查看次数: |
4875 次 |
最近记录: |