How to calculate ffmpeg output file size?
Asked Answered
S

1

9

I am using ffmpeg to convert home videos to DVD format and want to calculate the output file size before doing the conversion.

My input file has a bit rate of 7700 kbps and is 114 seconds long. The audio bitrate is 256 kbit (per second?) The input file is 77MB. To get this information I ran:

mplayer -vo null -ao null -frames 0 -identify input.MOD

So in theory, the input file should have (roughly) a file size of:

((7700 / 8) * 114) / 1024

That is, (7700 / 8) is kilobytes/second, multiplied by 114 seconds, and then converted to megabytes. This gives me 107MB, which is way beyond my 77. Thus I am skeptical of his formula.

That said, after converting the video:

ffmpeg -i input.MOD -y -target ntsc-dvd -sameq -aspect 4:3 output.mpg

The numbers seem to make more sense. Bitrate is 9000 kbps, and applying the above formula, I get 125MB, and my actual output file size is 126MB.

So, two questions:

  1. How do I factor the audio bitrate into this calculation? Is it additive (video file size + audio file size)?

  2. Do DVDs always have a 9000 kilobit/second rate? Is that the definition of a DVD? Or might that change depending on video quality of my input video? What does "-target ntsc-dvd" guarantee about my video?

  3. Why does my input file not "match" the calculation, but the output file does? Is there some other variable I'm not accounting for?

What is the correct way to calculate filesize?

Sneed answered 25/9, 2011 at 15:6 Comment(0)
A
3

What you have to keep in mind, is that there are few different bitrate measurements to consider:

  • maximum bitrate - the bitrate of the most action intensive fragment of the video
  • average (target) bitrate - the bitrate calculated precisely using your formula

  • rate control (how quickly encoder reacts to changes in complexity of the video)

Lossy video encoding works by eliminating features that are hard for human eye to see. This means, that a slow motion, a talking head, can be compressed further than a spinning full-screen zoom/panorama.

Why does it matter? Standards do specify a 'maximum' bitrate for a reason - this is how fast player needs to be in order to read and decode a standards-compliant video. DVD has it around 9000kbps.

Finally, since it's a lossy compression, one can specify the average bitrate. This is used if you need to fit the content in limited space or bandwidth (possibly permitting buffering for the more intense fragments).

For instance, you can have a video with maximum bitrate of 7000kbps and the average bitrate of 5500kbps. Finally, rate control, is the algorithm used to decide how much 'space' encoder should assign to different fragments. If you do multi-pass encoding, you are reusing this information from previous passes - improving the quality and bitrate distribution.

Apostle answered 25/9, 2011 at 18:16 Comment(2)
Does this mean that I could use a maximum bitrate - in this case, for DVDs, 9000kbps - as an upper bound on how large my file size could be after encoding?Sneed
Yes. It also means that you can specify a more restrictive average bitrate if you need to compress it more tightly. Standard DVDs can be anywhere from 1150kbps to 9000kbps, which means from 1h to 8h on a single-sided single-layer disk.Apostle

© 2022 - 2024 — McMap. All rights reserved.