一、编译的系统环境和FFmpeg的版本
系统:MacOS 15.1
FFmpeg 版本:7.1.1
使用的视频文件: ikun_video1.mp4 ,需要的自行去下载或者自己下载其他视频进行学习
下载地址:你干嘛哎哟
二、FFmpeg基础命令 ----- 获取媒体文件的信息
1. 使用 FFmpeg 获取媒体文件的信息
ffmpeg -i ikun_video1.mp4
显示媒体文件的信息等如下图:
可以在后缀加上-hide_banner 用于隐藏启动时的版权信息和编译详情,让输出更干净,之前的查询命令和下面的命令也可以这样子处理。
ffmpeg -i ikun_video1.mp4 -hide_banner
输出的结构说明:
Input:第一个输入文件,格式为 MP4(mov、mp4 等容器)
Metadata: 文件的元信息,如编码器、品牌
Duration: 时长为 8.17 秒,码率为 973 kb/s
Stream 第一个流(视频流)
Video: h264 视频编码是 H.264,分辨率 852x480,帧率 30fps
Stream :第二个流(音频流)
Audio: aac 音频编码为 AAC,采样率 44100Hz,双声道,码率 131 kb/s
三、FFmpeg基础命令 ----- 视频格式转换
1. 使用 FFmpeg 转换视频文件格式
这里用的文件是mp4文件转为其他视频文件格式作为参考, 其他也是类似一样的转换格式命令。 例如你也可以用avi, mkv, mov, wmv, flv, ts 的格式视频文件转为其他类型的视频格式文件,根据自己的需要来进行处理。
提示:
-c:a 的语法等同于-acodec / -codec:a / -codec:audio
-c:v 的语法等同于 -vcodec / -codec:v / -codec:video
1-1. 使用 FFmpeg 把mp4视频文件转为avi视频文件格式
# -hide_banner为了用于隐藏启动时的版权信息和编译详情,让输出更干净
ffmpeg -i ikun_video1.mp4 ikun_video1.avi -hide_banner
在本地文件夹里面使用ls -ll 命令检查avi文件是否生成,点击文件播放是否正常
1-2. 使用 FFmpeg 把mp4视频文件同时转为mkv, mov, wmv, flv, ts 视频文件格式
# -hide_banner为了用于隐藏启动时的版权信息和编译详情,让输出更干净
ffmpeg -i ikun_video1.mp4 ikun_video1.mkv ikun_video1.mov ikun_video1.wmv ikun_video1.flv ikun_video1.ts -hide_banner
在本地文件夹里面使用ls -ll 命令检查文件是否生成,点击文件播放是否正常
1-3. 自定义指定编码器来进行编码:
默认情况下,FFmpeg 会重新编码视频和音频,以适配目标格式,而重新编码几乎总会导致一定程度的质量损失,除非你做特别设置。
1-3-1. 自定义指定编码器实现 mp4视频文件转为avi视频文件格式
avi 支持的编码格式有限
•.mp4 常用编码是 H.264(libx264),而 .avi 更常用的是 MPEG-4(mpeg4 编码器)或 MJPEG。
• FFmpeg 默认会选择兼容 .avi 的编码器(如 mpeg4),这属于有损编码,所以画质会下降。
自定义较高画质的编码参数:
-c:v mpeg4:使用 MPEG-4 视频编码(兼容 .avi)
-qscale:v 2:画质等级,范围 1(最好)到 31(最差);2 已经很高了
-c:a mp3:音频使用 MP3 编码(常用于 AVI)
-b:a 192k:音频码率,设置较高
-s 800x600 控制分辨率是 800x600
-r 30 控制的帧数是30帧
使用编码的命令:
ffmpeg -i ikun_video1.mp4 -c:v mpeg4 -qscale:v 2 -c:a mp3 -b:a 192k -s 800x600 -r 30 ikun_video1.avi -hide_banner
生成的文件用下面的命令来检查编码日志参数是否正确,点击文件播放是否正常
ffmpeg -i ikun_video1.avi -hide_banner
1-3-2. 自定义指定编码器实现其他视频文件格式转换
自定义通用较高画质的编码参数:
-c:v libx264/libx265:编码器,画质佳、兼容强。
-qscale:v 2:画质等级,范围 1(最好)到 31(最差);2 已经很高了
-crf 18:恒定质量参数(范围 051,推荐 1823,越小越清晰)。
-c:a aac:音频使用 AAC 编码
-b:a 192k:音频码率,设置较高
-preset slow:压缩效率高但速度慢
可选的参数:
-s 800x600 控制分辨率是 800x600
-r 30 控制的帧数是30帧
1-3-2-1. 自定义指定编码器实现 mp4视频文件转为mkv视频文件格式
ffmpeg -i ikun_video1.mp4 -c:v libx264 -crf 18 -preset slow -c:a aac -b:a 192k -s 800x600 -r 30 ikun_video1.mkv -hide_banner
生成的文件用下面的命令来检查编码日志参数是否正确,点击文件播放是否正常
ffmpeg -i ikun_video1.mkv -hide_banner
1-3-2-2. 自定义指定编码器实现 mp4视频文件转为mov视频文件格式
A. 使用 H.264/H.265 编码, 命令:
ffmpeg -i ikun_video1.mp4 -c:v libx264 -crf 18 -preset slow -c:a aac -b:a 192k ikun_video1.mov -hide_banner
B. 使用 ProRes 编码, 但是文件体积会很大, 命令:
ffmpeg -i ikun_video1.mp4 -c:v prores_ks -profile:v 3 -c:a pcm_s16le ikun_video1.mov -hide_banner
生成的文件用下面的命令来检查编码日志参数是否正确,点击文件播放是否正常
ffmpeg -i ikun_video1.mov -hide_banner
1-3-2-3. 自定义指定编码器实现 mp4视频文件转为wmv视频文件格式
自定义较高画质的编码参数:
-c:v wmv2 使用 WMV 9(Windows Media Video v2)编码
-qscale:v 2:画质等级,范围 1(最好)到 31(最差);2 已经很高了
-c:a wmav2 使用 Windows Media Audio v2 编码
-b:a 192k:音频码率,设置较高
-s 800x600 控制分辨率是 800x600
-r 30 控制的帧数是30帧
ffmpeg -i ikun_video1.mp4 -c:v wmv2 -qscale:v 2 -c:a wmav2 -b:a 192k -s 800x600 -r 30 ikun_video1.wmv -hide_banner
生成的文件用下面的命令来检查编码日志参数是否正确,点击文件播放是否正常
ffmpeg -i ikun_video1.wmv -hide_banner
1-3-2-4. 自定义指定编码器实现 mp4视频文件转为flv视频文件格式
自定义通用较高画质的编码参数:
-c:v libx264/libx265:编码器,画质佳、兼容强。
-qscale:v 2:画质等级,范围 1(最好)到 31(最差) 2 已经很高了
-crf 18:恒定质量参数(范围 051,推荐 1823,越小越清晰)。
-c:a aac:音频使用 AAC 编码
-b:a 192k:音频码率,设置较高
-preset slow:压缩效率高但速度慢
-f flv:强制使用 .flv 容器格式
ffmpeg -i ikun_video1.mp4 -c:v libx264 -crf 18 -preset slow -c:a aac -b:a 192k -f flv ikun_video1.flv -hide_banner
生成的文件用下面的命令来检查编码日志参数是否正确,点击文件播放是否正常
ffmpeg -i ikun_video1.flv -hide_banner
1-3-2-5. 自定义指定编码器实现 mp4视频文件转为ts视频文件格式
A. 使用 H.264/H.265 编码, 自定义通用较高画质的编码参数:
-c:v libx264/libx265:编码器,画质佳、兼容强。
-qscale:v 2:画质等级,范围 1(最好)到 31(最差) 2 已经很高了
-crf 18:恒定质量参数(范围 051,推荐 1823,越小越清晰)。
-c:a aac:音频使用 AAC 编码
-b:a 192k:音频码率,设置较高
-preset slow:压缩效率高但速度慢
-f mpegts: 指定输出为 TS 格式
使用命令:
ffmpeg -i ikun_video1.mp4 -c:v libx264 -crf 18 -preset slow -c:a aac -b:a 192k -f mpegts ikun_video1.ts -hide_banner
B. 快速封装(不重编码)
• 更快、无画质损失。
• 适用于原视频已使用 H.264 + AAC 编码。
• -bsf:v h264_mp4toannexb 是必须的,它将 H.264 流转换为 TS 可识别的格式(Annex B 格式)。
注意:如果原视频不是 H.264 + AAC,使用此方式会失败。
ffmpeg -i ikun_video1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts ikun_video1.ts -hide_banner
成功的演示: 原来的编码格式是H264
失败的演示: 原来的编码格式是WMV2
生成的文件用下面的命令来检查编码日志参数是否正确,点击文件播放是否正常
ffmpeg -i ikun_video1.ts -hide_banner
四、FFmpeg基础命令 ----- 音频格式转换
1. 使用 FFmpeg 从视频中获取音频
常见的音频种类有以下:
MP3: 最常见的音频格式,兼容性最强,体积小
AAC: 比 MP3 更高压缩率,常用于 YouTube、iPhone、MP4、HLS 等
OGG: 开源音频格式,压缩率高,常用于网页音频
WAV: 原始 PCM 数据,体积大、无压缩,兼容性强
FLAC: 开源无损压缩格式,音质无损、体积较小
PCM: 原始数字音频数据,WAV 的编码方式之一
其他的请你自行查询对应的获取音频命令需求.
提示:
-c:a 的语法等同于-acodec / -codec:a / -codec:audio
-c:v 的语法等同于 -vcodec / -codec:v / -codec:video
1-1. 使用 FFmpeg 从视频中获取mp3格式的音频
A. 直接使用的-vn命令:
ffmpeg -i ikun_video1.mp4 -vn ikun_video1.mp3 -hide_banner
上面的命令是原音频可为任何格式,FFmpeg会进行重新编码,指定转为MP3编码,会损失音质
B. 结合-vn 和 -c:a copy 进行获取mp3音频的命令
ffmpeg -i ikun_video1.mp4 -vn -c:a copy ikun_video1.mp3 -hide_banner
在使用上面的命令时候,我们可以使用下面的命令来查看音频编码格式
ffmpeg -i ikun_video1.mp4
上面的命令不会损失音质,注意原视频的音频的格式必须是MP3,不然会报错, 例如原视频的音频格式是aac,使用-c:a copy 的命令时候原视频的音频格式必须是aac, 使用如下命令后出现报错:
出现上面的错误提示,我们可以使用libmp3lame:使用 MP3 的音频编码器的命令来提取MP3格式的音频。
C. 使用 libmp3lame:使用 MP3 的音频编码器的命令来提取MP3格式的音频。
-b:a 192k, 设置音频比特率是192k
ffmpeg -i ikun_video1.mp4 -vn -c:a libmp3lame -b:a 192k ikun_video1.mp3 -hide_banner
同样适用下面的命令来检查获取的mp3文件来检查编码日志参数是否正确, 点击文件播放是否正常:
ffmpeg -i ikun_video1.mp3 -hide_banner
1-2. 使用 FFmpeg 从视频中获取aac格式的音频
A. 同样直接使用的-vn命令:
ffmpeg -i ikun_video1.mp4 -vn ikun_video1.aac -hide_banner
上面的命令是原音频可为任何格式,FFmpeg会进行重新编码,指定转为AAC编码,会损失音质
B. 同样结合-vn 和 -c:a copy 进行获取aac 音频的命令
ffmpeg -i ikun_video1.mp4 -vn -c:a copy ikun_video1.aac -hide_banner
在使用上面的命令时候,我们可以使用下面的命令来查看音频编码格式
ffmpeg -i ikun_video1.mp4
上面的命令不会损失音质,注意原视频的音频的格式必须是aac,不然会报错, 例如原视频的音频格式是aac,使用-c:a copy 的命令时候原视频的音频格式必须是aac。
同样适用下面的命令来检查获取的aac文件来检查编码日志参数是否正确, 点击文件播放是否正常:
ffmpeg -i ikun_video1.aac -hide_banner
1-3. 使用 FFmpeg 从视频中获取wav格式的音频
A. 同样直接使用的-vn命令:
ffmpeg -i ikun_video1.mp4 -vn ikun_video1.wav -hide_banner
上面的命令是原音频可为任何格式,FFmpeg会进行重新编码,指定转为PCM编码,会损失音质
B. 使用pcm_s16le: PCM 编码的格式获取wav格式的音频
参数使用:
-c:a pcm_s16le:使用无损 PCM 编码(WAV 常用)
-ar 44100: 采样率 44.1kHz(CD 标准)
-ac 2: 双声道(立体声)输出
-b:a 192k, 设置音频比特率是192k
ffmpeg -i ikun_video1.mp4 -vn -c:a pcm_s16le -ar 44100 -ac 2 ikun_video1.wav -hide_banner
同样适用下面的命令来检查获取的wav文件来检查编码日志参数是否正确, 点击文件播放是否正常:
ffmpeg -i ikun_video1.wav -hide_banner
1-4. 使用 FFmpeg 从视频中获取flac格式的音频
-c:a flac:音频使用 FLAC 编码
-ar 44100: 采样率 44.1kHz(CD 标准)
-ac 2: 双声道(立体声)输出
注意: -b:a 这里不需要设置音频比特率,因为flac属于无损编码
使用命令:
ffmpeg -i ikun_video1.mp4 -vn -c:a flac -ar 44100 -ac 2 1.flac -hide_banner
同样适用下面的命令来检查获取的flac文件来检查编码日志参数是否正确, 点击文件播放是否正常:
ffmpeg -i ikun_video1.flac -hide_banner
1-5. 使用 FFmpeg 从视频中获取ogg格式的音频
A. 同样直接使用的-vn命令:
ffmpeg -i ikun_video1.mp4 -vn ikun_video1.ogg -hide_banner
上面的命令是原音频可为任何格式,FFmpeg会进行重新编码,指定转为libvorbis编码,会损失音质
B. 使用libvorbis: 指定音频编码器为 libvorbis(OGG 常用的音频编码器)
参数使用:
-c:a libvorbis:指定音频编码器为 libvorbis(OGG 常用的音频编码器)
-ar 44100: 采样率 44.1kHz(CD 标准)
-ac 2: 双声道(立体声)输出
-b:a 192k, 设置音频比特率是192k
ffmpeg -i ikun_video1.mp4 -vn -c:a libvorbis -ar 44100 -ac 2 -b:a 192k ikun_video1.ogg -hide_banner
同样适用下面的命令来检查获取的ogg文件来检查编码日志参数是否正确, 点击文件播放是否正常:
ffmpeg -i ikun_video1.ogg -hide_banner
2. 使用 FFmpeg 转换音频文件格式
这里用的文件是mp3文件转为其他音频文件格式作为参考, 其他也是类似一样的转换格式命令。
例如你也可以用aac, wav, flac, ogg, pcm 的格式音频文件转为其他类型的视频格式文件,根据自己的需要来进行处理。
2-1. 使用 FFmpeg 把mp3音频文件格式转为aac音频文件格式
A. 直接转换命令:
ffmpeg -i ikun_video1.mp3 ikun_video1.aac -hide_banner
B. 指定音频编码器为 AAC
参数使用:
-c:a aac: 指定音频编码器为 AAC (FFmpeg 内建的 AAC 编码器,兼容性好)
-b:a 192k: 设置音频比特率为192kb
ffmpeg -i ikun_video1.mp3 -c:a aac -b:a 192k ikun_video1.aac -hide_banner
C: 指定音频编码器为 Fraunhofer FDK AAC 编码器
参数使用:
-c:a libfdk_aac: 指定音频编码器为 Fraunhofer FDK AAC 编码器 (更高质量的 AAC 编码器(需自行编译 FFmpeg 时启用))
-b:a 192k: 设置音频比特率为192kb
注意:需要安装 libfdk-aac 和编译依赖 才能使用,并且在FFmpeg编译的时候在configure里面加上下面的属性编译:
./configure
--enable-libfdk-aac
--enable-nonfree
然后进行下面的命令:
ffmpeg -i ikun_video1.mp3 -c:a libfdk_aac -b:a 192k ikun_video1.aac -hide_banner
同样适用下面的命令来检查获取的aac文件来检查编码日志参数是否正确, 点击文件播放是否正常:
ffmpeg -i ikun_video1.aac -hide_banner
2-2. 使用 FFmpeg 把mp3音频文件格式转为wav音频文件格式
A. 直接转换命令:
ffmpeg -i ikun_video1.mp3 ikun_video1.wav -hide_banner
B. 指定音频编码器为 PCM
使用参数:
-c:a pcm_s16le:使用无损 PCM 编码(WAV 常用)
-ar 44100 采样率 44.1kHz
-ac 2 双声道
ffmpeg -i ikun_video1.mp3 -c:a pcm_s16le -ar 44100 -ac 2 ikun_video1.wav -hide_banner
同样适用下面的命令来检查获取的wav文件来检查编码日志参数是否正确, 点击文件播放是否正常:
ffmpeg -i ikun_video1.wav -hide_banner
2-3. 使用 FFmpeg 把mp3音频文件格式转为flac音频文件格式
A. 直接转换命令:
ffmpeg -i ikun_video1.mp3 ikun_video1.flac -hide_banner
B. 指定音频编码器为 FLAC
-c:a flac:音频使用 FLAC 编码
-ar 44100: 采样率 44.1kHz(CD 标准)
-ac 2: 双声道(立体声)输出
注意: -b:a 这里不需要设置音频比特率,因为flac属于无损编码
使用命令:
ffmpeg -i ikun_video1.mp3 -c:a flac -ar 44100 -ac 2 ikun_video1.flac -hide_banner
同样适用下面的命令来检查获取的flac文件来检查编码日志参数是否正确, 点击文件播放是否正常:
ffmpeg -i ikun_video1.flac -hide_banner
2-4. 使用 FFmpeg 把mp3音频文件格式转为ogg音频文件格式
A. 直接转换命令:
ffmpeg -i ikun_video1.mp3 ikun_video1.ogg -hide_banner
B. 使用libvorbis: 指定音频编码器为 libvorbis(OGG 常用的音频编码器)
参数使用:
-c:a libvorbis:指定音频编码器为 libvorbis(OGG 常用的音频编码器)
-ar 44100: 采样率 44.1kHz(CD 标准)
-ac 2: 双声道(立体声)输出
-b:a 192k, 设置音频比特率是192k
ffmpeg -i ikun_video1.mp3 -c:a libvorbis -ar 44100 -ac 2 -b:a 192k ikun_video1.ogg -hide_banner
同样适用下面的命令来检查获取的ogg文件来检查编码日志参数是否正确, 点击文件播放是否正常:
ffmpeg -i ikun_video1.ogg -hide_banner
五、更多FFmpeg查询命令链接地址
上面部分命令的参数可以按照自己的需求去进行添加或者修改。
上面知识列举了部分的命令,如果没有合适的话,可以根据自己的需求到该网址进行查询并使用。
FFmpeg文档地址