108 lines
3.7 KiB
Markdown
108 lines
3.7 KiB
Markdown
`FFmpeg` is a comprehensive, cross-platform solution to record, convert, and stream audio and video. It includes `libavcodec`, a leading audio/video codec library that can be used with a vast array of codecs. While FFmpeg itself is not a Python library, its functionality can be accessed through various Python libraries designed to interact with it, such as `imageio-ffmpeg` for video reading/writing or `ffmpeg-python` for more general FFmpeg operations in Python scripts.
|
|
|
|
### FFmpeg Basic Usage
|
|
|
|
FFmpeg's command-line utility covers a wide range of functionalities. Here's how to perform some of the most common operations:
|
|
|
|
#### Installation
|
|
|
|
FFmpeg needs to be installed separately from your Python environment. It's available for Linux, Windows, and Mac. On Linux, you can typically install FFmpeg using your distribution's package manager:
|
|
|
|
```sh
|
|
sudo apt-get install ffmpeg # For Debian/Ubuntu
|
|
sudo yum install ffmpeg # For CentOS/RHEL
|
|
sudo dnf install ffmpeg # For Fedora
|
|
```
|
|
|
|
#### Converting Media Formats
|
|
|
|
Convert an audio or video file from one format to another:
|
|
|
|
```sh
|
|
ffmpeg -i input.avi output.mp4
|
|
```
|
|
|
|
#### Extracting Audio from Video
|
|
|
|
Extract the audio stream from a video without altering the original audio quality:
|
|
|
|
```sh
|
|
ffmpeg -i video.mp4 -vn -acodec copy output-audio.aac
|
|
```
|
|
|
|
#### Combining Audio and Video
|
|
|
|
Combine an audio and video file into one:
|
|
|
|
```sh
|
|
ffmpeg -i video.mp4 -i audio.wav -c:v copy -c:a aac output.mp4
|
|
```
|
|
|
|
#### Resizing Videos
|
|
|
|
Change the resolution of a video file:
|
|
|
|
```sh
|
|
ffmpeg -i input.mp4 -vf "scale=1280:720" output.mp4
|
|
```
|
|
|
|
#### Cutting Media Files
|
|
|
|
Extract a specific part of a video (or audio) by specifying the start time and duration:
|
|
|
|
```sh
|
|
ffmpeg -i input.mp4 -ss 00:00:10 -t 00:00:30 -c copy output.mp4
|
|
```
|
|
- `-ss`: Start time
|
|
- `-t`: Duration
|
|
|
|
#### Generating Thumbnails from Videos
|
|
|
|
Create a thumbnail image at a specific time point in the video:
|
|
|
|
```sh
|
|
ffmpeg -i video.mp4 -ss 00:01:00 -vframes 1 output.png
|
|
```
|
|
|
|
### Python Integration with FFmpeg
|
|
|
|
#### `ffmpeg-python` Overview
|
|
|
|
`ffmpeg-python` wraps FFmpeg and provides a Pythonic way to interact with it, allowing for complex filtering and more.
|
|
|
|
##### Installation
|
|
|
|
```sh
|
|
pip install ffmpeg-python
|
|
```
|
|
|
|
##### Basic Usage with `ffmpeg-python`
|
|
|
|
- **Reading Metadata**:
|
|
|
|
```python
|
|
import ffmpeg
|
|
|
|
probe = ffmpeg.probe('video.mp4')
|
|
video_streams = [stream for stream in probe['streams'] if stream['codec_type'] == 'video']
|
|
print(video_streams[0]['width'], video_streams[0]['height'])
|
|
```
|
|
|
|
- **Converting Media Formats**:
|
|
|
|
```python
|
|
import ffmpeg
|
|
|
|
ffmpeg.input('input.avi').output('output.mp4').run()
|
|
```
|
|
|
|
### Use Cases
|
|
|
|
- **Automated Video Production**: Generating video content programmatically, such as combining clips, adding watermarks, or creating video compilations.
|
|
- **Media Conversion Services**: Building services or tools for users to convert media files between different formats.
|
|
- **Content Analysis**: Extracting frames from videos for image analysis or machine learning purposes.
|
|
- **Streaming Applications**: Preparing media for streaming by adjusting formats, bitrates, or resolutions to suit different bandwidths and devices.
|
|
|
|
### FFmpeg's Versatility
|
|
|
|
FFmpeg's broad functionality makes it an invaluable tool for developers working on media-heavy applications. Through Python libraries like `ffmpeg-python`, these capabilities become easily accessible within Python scripts, blending FFmpeg's powerful media processing capabilities with Python's ease of use and flexibility. Whether for simple format conversions, complex video processing workflows, or real-time media streaming setups, integrating FFmpeg into Python projects unlocks a vast potential for automating and enhancing media manipulation tasks. |