FFmpeg(强大的音视频处理工具) - 一些基本实用方法
FFmpeg(强大的音视频处理工具) - 一些基本实用方法
下载安装
官网:ffmpeg.org
下载页面 -> Windows -> Windows builds from gyan.dev 或 Windows builds by BtbN
推荐使用第二个Github@BtbN/FFmpeg-Builds,在最新的一个release中,搜索win,下载ffmpeg-master-latest-win64-gpl.zip或ffmpeg-master-latest-win64-gpl-shared.zip。
解压.zip压缩包,将bin目录添加到环境变量,重启cmd终端,输入ffmpeg -version,看到ffmpeg version n5.1-5-gaba74d7843-20220803 Copyright (c) 2000-2022 the FFmpeg developers即说明安装配置成功。
使用
最简单的使用方式为:
格式转换
1 | |
音视频裁剪
1 | |
其中,-ss是开始时间,-t是持续时间。
1 | |
其中,-ss是开始时间,-to是结束时间。
1 | |
其中,20代表20秒,0:0:20代表0时0分20秒。
另外的,若-to和-t同时设置,则以-t为准。
特别提醒:
使用ffmpeg进行视频裁剪时,请务必将-ss参数放在-i前面!
虽然先-i和先-ss都能正常裁剪,但是先-i的话,可能会比先-ss慢很多。
1 | |
等长分割(批量分割)
1 | |
将input.mp3分割为数个7秒的小片段,并命名为output001.mp3、output002.mp3、…。
其中:
copy``` instructs FFmpeg to copy the audio codec from the input file without re-encoding it, which means the output files will have the same audio quality. 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16+ ```-vn``` tells FFmpeg to extract only the audio stream from the input file and ignore the video stream, as this command does not produce any video output.
+ ```-f segment``` sets the output format to segmented files.
+ ```-segment_time 7``` 每段7秒
🤫
### 给视频添加图片文字
所用到素材及结果详见:[阿里云盘分享](https://www.aliyundrive.com/s/EQKti4XkgB3)
#### 给视频添加图片
如果想要往某个视频上的某个位置添加一个图片(比如二维码),则可以使用以下命令将```0.png```添加到```0.mp4```的左上角```(10, 10)```的位置:
```bash
ffmpeg -i 0.mp4 -i 0.png -filter_complex "overlay=10:10" output.mp4
如果想要0.png仅在第5到10秒出现,则可以:
1 | |
给视频添加文字
如果想在0.mp4的(130, 320)处添加大小为70的黑色华文行楷的欢迎来到我的空间,则可以:
1 | |
同时给视频添加图片和文字
ffmpeg中-vf和-filter_complex不能同时用于同一个输出流。想要同时往视频中添加图片和文字,可以使用-filter_complex选项来指定所有过滤器:
1 | |
合并视频和字幕
假设当前目录下有0.mp4和0.ass,则可以:
1 | |
假设提示“找不到字体”,则可以
1 | |
提取视频中的一段音频并输出为mp3
1 | |
使用硬件加速(GPU)
首先确定可用硬件列表:
1 | |
得到结果:
1 | |
则说明可以使用cuda、qsv等进行硬件加速。
接着只需要:
1 | |
关于如何在Linux上编译安装支持CUDA的FFmpeg请查看FFmpeg - 如何在Linux(Ubuntu)上安装支持CUDA的FFmpeg。
使用一个视频的格式信息压制另一个视频
首先获取已有视频的格式信息:
1 | |
得到:
1 | |
接着按照此格式开始压制即可:
1 | |
格式转换时保留内挂字幕
1 | |
其中-c:s是值字幕,copy是指复制,也可以修改成-c:s ass等。
视频倍速
1 | |
参数详解
ffmpeg:调用FFmpeg程序。-i WeChat_20240521100857.mp4:指定输入文件名为WeChat_20240521100857.mp4。-filter_complex "[0:v]setpts=PTS/1.5[v];[0:a]atempo=1.5[a]":应用复杂滤镜处理:-filter_complex:使用复杂滤镜功能。[0:v]setpts=PTS/1.5[v]:将视频流的时间戳(PTS)按1.5倍速调整。具体含义如下:[0:v]:表示第一个输入文件的视频流。setpts=PTS/1.5:PTS(Presentation Time Stamp,显示时间戳)是FFmpeg用来同步音视频的标记。将时间戳缩短为原来的1/1.5,从而实现1.5倍速播放。[v]:给处理后的视频流命名为[v],供后续使用。
[0:a]atempo=1.5[a]:将音频流的速度调整为1.5倍。具体含义如下:[0:a]:表示第一个输入文件的音频流。atempo=1.5:将音频速度调整为1.5倍。FFmpeg中atempo滤镜用于调整音频速度,允许的值范围是[0.5, 2.0],超过范围需要链式使用多个atempo。[a]:给处理后的音频流命名为[a],供后续使用。
-map "[v]":指定输出文件使用处理后的视频流[v]。-map "[a]":指定输出文件使用处理后的音频流[a]。-c:v libx264:指定视频编码器为libx264,这是一个常用的高质量H.264编码器。-c:a aac:指定音频编码器为aac,这是一个常用的高质量音频编码器。-b:a 192k:指定音频比特率为192 kbps,确保音频质量。output.mp4:指定输出文件名为output.mp4。
原创不易,转载请附上原文链接哦~
https://blog.letmefly.xyz/2023/07/03/Other-FFmpeg-SomeCommonUsage/