2020-05-19 11:06:44 +08:00
|
|
|
|
# FFMPEG 的基本使用
|
|
|
|
|
|
|
|
|
|
## 安装
|
|
|
|
|
|
|
|
|
|
### 安装 FFMPEG
|
|
|
|
|
|
2020-05-20 16:18:39 +08:00
|
|
|
|
```bash
|
2020-05-19 11:06:44 +08:00
|
|
|
|
# Manjaro
|
|
|
|
|
sudo pacman ffmpeg
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Intel Quick Sync Video
|
|
|
|
|
|
|
|
|
|
若想使用 Intel GPU 进行硬件编解码加速,需要安装 intel-media-sdk:
|
|
|
|
|
|
2020-05-20 16:18:39 +08:00
|
|
|
|
```bash
|
2020-05-19 11:06:44 +08:00
|
|
|
|
# Manjaro
|
|
|
|
|
sudo pacman -S intel-media-sdk
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### NVIDIA NVENC/NVDEC
|
|
|
|
|
|
|
|
|
|
若想使用 NVIDIA GPU 进行硬件编解码加速,需要安装 nvidia-utils:
|
|
|
|
|
|
2020-05-20 16:18:39 +08:00
|
|
|
|
```bash
|
2020-05-19 11:06:44 +08:00
|
|
|
|
# Manjaro
|
|
|
|
|
sudo pacman -S nvidia-utils
|
|
|
|
|
```
|
2019-08-23 11:01:12 +08:00
|
|
|
|
|
|
|
|
|
## 主要参数
|
|
|
|
|
|
|
|
|
|
* -i 设定输入流
|
|
|
|
|
* -f 设定输出格式
|
|
|
|
|
* -ss 开始时间
|
|
|
|
|
|
|
|
|
|
视频参数:
|
|
|
|
|
|
|
|
|
|
* -c:v 是 -vcodec 的缩写,设定视频编解码器,未设定时则使用与输入流相同的编解码器
|
|
|
|
|
* -vn 不处理视频
|
|
|
|
|
* -b 设定视频流量,默认为200Kbit/s
|
|
|
|
|
* -r 设定帧速率,默认为25
|
|
|
|
|
* -s 设定画面的宽与高
|
|
|
|
|
* -aspect 设定画面的比例
|
|
|
|
|
|
|
|
|
|
音频参数:
|
|
|
|
|
|
|
|
|
|
* -c:a 是 -acodec 的缩写,设定声音编解码器,未设定时则使用与输入流相同的编解码器
|
|
|
|
|
* -an 不处理音频
|
|
|
|
|
* -ar 设定采样率
|
|
|
|
|
* -ac 设定声音的 Channel 数
|
|
|
|
|
|
|
|
|
|
## 获取媒体文件信息
|
|
|
|
|
|
2020-05-20 16:18:39 +08:00
|
|
|
|
```bash
|
2023-07-13 18:01:09 +08:00
|
|
|
|
# 显示视频编码、尺寸、音轨等.
|
|
|
|
|
ffprobe -i <file>
|
2019-08-23 11:01:12 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## 转码
|
|
|
|
|
|
|
|
|
|
若需采用与源文件视频和音频编码一致的输出文件可使用下列命令,其输出的音频质量和视频质量与源文件一样。
|
|
|
|
|
|
2020-05-20 16:18:39 +08:00
|
|
|
|
```bash
|
2019-08-23 11:01:12 +08:00
|
|
|
|
ffmpeg -y -i <input file> -c:v copy -c:a copy -f mp4 <output file>
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
* copy 指采用相同的制式
|
|
|
|
|
|
|
|
|
|
若对音频或视频转码,可使用下列命令:
|
|
|
|
|
|
2020-05-20 16:18:39 +08:00
|
|
|
|
```bash
|
2019-12-19 13:47:29 +08:00
|
|
|
|
ffmpeg -y -i <input file> -c:v <video codec> -c:a <audio codec> <output file>
|
2019-08-23 11:01:12 +08:00
|
|
|
|
```
|
|
|
|
|
|
2020-05-19 11:06:44 +08:00
|
|
|
|
### 编/解码器类型
|
|
|
|
|
|
2019-12-19 13:47:29 +08:00
|
|
|
|
编解码器类型可通过命令:
|
|
|
|
|
|
2020-05-20 16:18:39 +08:00
|
|
|
|
```bash
|
2019-12-19 13:47:29 +08:00
|
|
|
|
ffmpeg -encoders
|
|
|
|
|
ffmpeg -decoders
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
查看,常用的有
|
|
|
|
|
|
2020-05-19 11:06:44 +08:00
|
|
|
|
Audio Codec:
|
2019-08-23 11:01:12 +08:00
|
|
|
|
|
|
|
|
|
* aac
|
2019-12-19 13:47:29 +08:00
|
|
|
|
* ac3
|
|
|
|
|
* flac
|
2019-08-23 11:01:12 +08:00
|
|
|
|
|
2020-05-19 11:06:44 +08:00
|
|
|
|
Video Codec:
|
2019-08-23 11:01:12 +08:00
|
|
|
|
|
2020-05-18 15:20:04 +08:00
|
|
|
|
* h263
|
|
|
|
|
* libx264
|
|
|
|
|
* libx265
|
2020-05-19 11:06:44 +08:00
|
|
|
|
* h264_qsv: Intel Quick Sync Video 硬件加速器
|
|
|
|
|
* hevc_qsv: Intel Quick Sync Video 硬件加速器
|
|
|
|
|
* mpeg2_qsv: Intel Quick Sync Video 硬件加速器
|
|
|
|
|
|
|
|
|
|
### 使用硬件加速转码
|
|
|
|
|
|
2020-05-20 16:18:39 +08:00
|
|
|
|
```bash
|
2020-05-19 11:06:44 +08:00
|
|
|
|
ffmpeg -y -hwaccel <hw acc methods> -c:v <hw video decoder> -c:a <audio decoder> -i <input file> -c:v <hw video encoder> -c:a <audio encoder> <output file>
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
其中 hw acc methods 可用
|
|
|
|
|
|
2020-05-20 16:18:39 +08:00
|
|
|
|
```bash
|
2020-05-19 11:06:44 +08:00
|
|
|
|
ffmpeg -hwaccels
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
命令查看。
|
2020-05-18 15:20:04 +08:00
|
|
|
|
|
2019-08-23 11:01:12 +08:00
|
|
|
|
## 分离视频音频流
|
|
|
|
|
|
2020-05-20 16:18:39 +08:00
|
|
|
|
```bash
|
2019-08-23 11:01:12 +08:00
|
|
|
|
# 分离视频流
|
|
|
|
|
ffmpeg -i <input file> -vcodec copy -an <output file>
|
|
|
|
|
# 分离音频流
|
|
|
|
|
ffmpeg -i <input file> -acodec copy -vn <output file>
|
|
|
|
|
```
|
2019-12-10 11:33:53 +08:00
|
|
|
|
|
|
|
|
|
## 视频截成图片
|
|
|
|
|
|
2020-05-20 16:18:39 +08:00
|
|
|
|
```bash
|
2019-12-10 11:33:53 +08:00
|
|
|
|
# -ss 指示开始时间,如 00:00:05
|
|
|
|
|
# -i 指定输入文件,如 ideo.mp4
|
|
|
|
|
# -f 指定文件格式,如 image2
|
|
|
|
|
# -r 指定截取频率,1为每1秒截取一张,10为每100ms截取一张,0.5为每2s截取一张
|
|
|
|
|
# output 为输出文件,如 out%3d.jpg,输出文件将以out001.jpg、out002.jpg等命名
|
|
|
|
|
./ffmpeg -i <input media> -ss <start time> -f <format> -r <rate> <output>
|
|
|
|
|
```
|