FFmpeg is a widespread media converter. It can convert between mainly video formats, and apply transformation such as cutting, filtering, overlaying videos and images. It can read and write/transmit files, streams, and standard input/output. It can also use video hardware.
FFmpeg is built upon a collection of libraries each of which implements a "single concept", which are the internal pipeline elements:
- libavutil
- libavcodec
- libavformat
- libavdevice
- libavfilter
- libswscale
- libswresample
There are other tools that use these libraries to do similar tasks as ffmpeg like Handbrake.
Operations
For operating ffmpeg the only way is using command line; there is no other interface, nor programmatic interface like json input. The only alternative is using a text file for listing the inputs (for example for concat) or a text file for complex_filter (for example in case of large sequences of overlays or splitting or conditionals). This means there is the need to deal with various levels of escaping, which is one of the difficult parts.
Automation
Since ffmpeg is a tool to facilitate operations it has some automations like rotating and scaling.
In some more detailed workflows it could be needed to disable them, there are the switches -noautoscale and -noautorotate for this.
