ffmpeg: target size encoding added

master
tiyn 2 years ago
parent 8d84876570
commit 6256a037d3

@ -1,6 +1,6 @@
# ffmpeg
# FFmpeg
[ffmpeg](https://www.ffmpeg.org) is a free and open-source suite consisting of
[FFmpeg](https://www.ffmpeg.org) is a free and open-source suite consisting of
many audio and video tools and libraries.
## Usage
@ -32,3 +32,34 @@ ffmpeg -f concat -safe 0 -i files.txt -map 0 -c copy output.mp4
If the video files you want to concatenate are not mp4 files change the above
command accordingly.
### Two-Pass Encoding
Two pass encoding - as described in the
[official FFmpeg documentation](https://trac.ffmpeg.org/wiki/Encode/H.264#twopass)
- uses two passes.
The first pass analyzes the input data and outputs a descriptor file.
The second pass actually encodes the data.
The following is an example where the file `input` is encoded with `libx264` to
`mp4` video with `libfdk_aac` audio.
The video bitrate is `555k` and the audio bitrate is `128k`.
```sh
ffmpeg -y -i input -c:v libx264 -preset medium -b:v 555k -pass 1 -c:a libfdk_aac -b:a 128k -f mp4 /dev/null && \
ffmpeg -i input -c:v libx264 -preset medium -b:v 555k -pass 2 -c:a libfdk_aac -b:a 128k output.mp4
```
### Encode Audio/Video to Target Size
For the encoding of a file to a target size the target bitrate of the output
video is needed.
An explanation of this was given by
[aergistal on Stack Overflow](https://stackoverflow.com/questions/29082422/ffmpeg-video-compression-specific-file-size).
This can easily be done with the calculation `bitrate = target size / duration`
in Bits/Second.
Afterwards the encoding can be done by using Two-Pass Encoding as explained in
[a previous section](#two-pass-encoding).
Note that the bitrate for videos is split amongst a bitrate for video and a
bitrate for audio.
The target bitrate has to be equal to or greater than the sum of both video
bitrate and audio bitrate.

Loading…
Cancel
Save