FFmpeg 是一个免费、开源且高度可定制的多媒体处理工具,它是一个强大的跨平台框架,用于处理音频、视频、多媒体流和图像。FFmpeg 的主要功能包括解码、编码、转码、流处理、多路复用、分离、合并、过滤等,支持多种音视频格式,包括但不限于MP4、AVI、MKV、MP3、H.264、H.265、AAC 等。
前往官网下载 Download FFmpeg
官方文档:ffmpeg Documentation(具体还有很多功能,可以查看官方文档学习)
安装
windows:
将下载的压缩包,解压缩
将\bin目录加到环境变量,添加后在黑窗口,查看是否有ffmpeg命令;
这样安装就ok了。
基础命令
1. 转码视频格式:
ffmpeg -i input.mp4 -c:v libx264 -c:a aac output.mp4
- -i input.mp4:指定输入文件为input.mp4,这是要重新编码的源视频文件。
- -c:v libx264:指定使用libx264编码器来进行视频编码。libx264是一种高效的H.264视频编码器,通常提供高质量的视频压缩。
- -c:a aac:指定使用AAC编码器进行音频编码。AAC是一种常见的音频编码格式,它在维持高音质的同时提供了较小的文件大小。
- output.mp4:指定输出文件的名称为output.mp4,这是重新编码后的视频文件的保存位置。
2. 转码音频格式:
ffmpeg -i input.mp3 -c:a aac -b:a 256k output.m4a
- -i input.mp3:指定输入文件为input.mp3,这是要重新编码的源音频文件。
- -c:a aac:指定使用AAC编码器进行音频编码。这将重新编码音频文件为AAC格式。
- -b:a 256k:指定音频的目标比特率为256Kbps。这将控制新生成的AAC文件的音频质量和文件大小。
- output.m4a:指定输出文件的名称为output.m4a,这是重新编码后的音频文件的保存位置。
3. 剪辑视频:
ffmpeg -i input.mp4 -ss 00:01:00 -t 00:00:30 -c:v copy -c:a copy output.mp4
- -i input.mp4:指定输入文件为input.mp4,这是要进行剪切操作的源视频文件。
- -ss 00:01:00:这是用来指定开始时间点的选项。在这里,-ss后面的时间戳00:01:00表示从视频的1分钟处开始剪切。
- -t 00:00:30:这是用来指定持续时间的选项。在这里,-t后面的时间戳00:00:30表示截取30秒的视频。
- -c:v copy:这部分表示视频流将保持不变,不进行重新编码。 -c:v copy 意味着视频流会被直接复制到输出文件中,无需重新压缩视频。
- -c:a copy:这部分表示音频流也将保持不变,不进行重新编码。 -c:a copy 意味着音频流会被直接复制到输出文件中,无需重新编码音频。
- output.mp4:指定输出文件的名称为output.mp4,这是剪切后的视频文件的保存位置。
4. 合并多个视频
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "concat=n=2:v=1:a=1" -c:v libx264 -c:a aac output.mp4
- -i input1.mp4:指定第一个输入文件为input1.mp4,这是要合并的第一个视频文件。
- -i input2.mp4:指定第二个输入文件为input2.mp4,这是要合并的第二个视频文件。
- -filter_complex "concat=n=2:v=1:a=1":这是使用-filter_complex选项来应用复杂的滤镜图。在这里,concat=n=2:v=1:a=1 是一个复合滤镜,它告诉FFmpeg合并两个输入视频文件,n=2表示两个输入,v=1表示合并视频流,a=1表示合并音频流。
- -c:v libx264:指定使用libx264编码器进行视频编码。这将重新编码合并后的视频。
- -c:a aac:指定使用AAC编码器进行音频编码。这将重新编码合并后的音频。
- output.mp4:指定输出文件的名称为output.mp4,这是合并后的视频文件的保存位置。
5. 改变分辨率
ffmpeg -i input.mp4 -vf "scale=1280:720" output.mp4
- -i input.mp4:指定输入文件为input.mp4,这是要进行分辨率调整操作的源视频文件。
- -vf "scale=1280:720":这是使用 -vf(视频滤镜)选项来应用视频滤镜。在这里,scale=1280:720 是一个视频滤镜,它告诉FFmpeg将视频重新缩放为1280x720像素的分辨率。
- output.mp4:指定输出文件的名称为output.mp4,这是调整分辨率后的新视频文件的保存位置。
6. 同时转换多个视频文件
ffmpeg -i input1.ts -i input2.ts -i input3.ts -c:v libx264 -c:a aac output1.mp4 -output2.mp4 -output3.mp4
这个命令将依次处理每个输入文件(input1.ts、input2.ts 和 input3.ts),为每个输入文件分别创建一个输出文件(output1.mp4、output2.mp4 和 output3.mp4)。每次 -i 后面的输入文件都会对应一个 -c:v(视频编码器选项)和 -c:a(音频编码器选项),以确定每个输出文件的编码方式。
拼接视频方法
-
方法一:FFmpeg concat 协议
对于 MPEG 格式的视频,可以直接连接:
ffmpeg -i "concat:input1.mpg|input2.mpg|input3.mpg" -c copy output.mpg
对于非 MPEG 格式容器,但是是 MPEG 编码器(H.264、DivX、XviD、MPEG4、MPEG2、AAC、MP2、MP3 等),可以包装进 TS 格式的容器再合并。在新浪视频,有很多视频使用 H.264 编码器,可以采用这个方法
ffmpeg -i input1.flv -c copy -bsf:v h264_mp4toannexb -f mpegts input1.ts
ffmpeg -i input2.flv -c copy -bsf:v h264_mp4toannexb -f mpegts input2.ts
ffmpeg -i input3.flv -c copy -bsf:v h264_mp4toannexb -f mpegts input3.ts
ffmpeg -i "concat:input1.ts|input2.ts|input3.ts" -c copy -bsf:a aac_adtstoasc -movflags +faststart output.mp4
保存 QuickTime/MP4 格式容器的时候,建议加上 -movflags +faststart。这样分享文件给别人的时候可以边下边看。
-
直接备注分辨率
ffmpeg -i begin.mp4 -i mid.mp4 -i end.mp4 -filter_complex "[0:v]scale=1920:1080[0v];[1:v]scale=1920:1080[1v];[2:v]scale=1920:1080[2v];[0v][0:a][1v][1:a][2v][2:a]concat=n=3:v=1:a=1[v][a]" -map "[v]" -map "[a]" -c:v libx264 -c:a aac output.mp4