一、音视频转码、转封装
ffmpeg [第一个输入文件对应的解析参数] -i 第一个输入文件名 [第二个输入文件对应的解析参数 ] -i 第二个输入文件名 [如果有第三个文件输入] [-i] [如果有第三个文件] [第一个输出文件对应的参数] [第一个输出文件名] [第二个输出文件对应的参数] [第二个输出文件名] [第三个输出文件对应的参数] [第三个输出文件名]
/**
ffmpeg 不需要指定 -o 输出
-i i.mp4 :指定输入的文件
a.mp4:输出文件a.mp4,并使用默认编码
-vcodec mpeg4 b.mp4: 输出文件b.mp4,并制定视频流使用 mpeg4 编码
输出完成后,可查询a.mp4、b.mp4的视频流格式信息来验证
$ ffprobe -i a.mp4 -show_streams
encoder : Lavf60.3.100 (编码器)
a.mp4 的 Streams 信息:codec_name=H.264
b.mp4 的 Streams 信息:codec_name=mpeg4
也可以只转封装不转码,但如果视频的音频流不是 wav格式,那么这种只转封装不转码的方式会,会造成信息的缺失
ffmpeg -i i.mp4 -acodec copy a_audio.wav
正确的转码:pcm_s16le 是一种无损音频编码格式。-ar 选项指定音频采样率,44100 表示 44.1 kHz
ffmpeg -i i.mp4 -acodec pcm_s16le -ar 44100 ai.wav
*/
ffmpeg -i i.mp4 a.mp4 -vcodec mpeg4 b.mp4
二、查看帮助信息
ffmpeg --help
// 输出全部帮助信息
ffmpeg -h full
// type=name 的方式查看帮助信息
// 只输出 flv格式封装相关的格式信息
ffmpeg -h muxer=flv
// 只查看编码的对应信息
ffmpeg -h encoder=libx264
// 查找 name $ ffmpeg --help 输出信息中的 Print help / information / capabilities: -muxers , 然后 ffmpeg -muxers 就可以看到所有支持的封装格式
// 确认机器上当前安装的 FFmpeg 中是否涵盖了 nvidia 的 H.264 编码器。
ffmpeg -encoders|grep H.264
三、FFmpeg 公共基础参数
- 输出日志: $ffmpeg -report // ffmpeg -report -v debug 在调试模式下运行 FFmpeg,输出详细的调试信息,以便用户诊断和解决问题
- -ss 来定位文件的开始时间,指定的位置最好是关键帧对应的 pts 位置
-ss 放在 -i 参数左侧,快,但是定位通常不准确,但如果我们把 -ss 的时间点位设置为关键帧对应的点位,那定位就是准确的。
- -t 来规定输出文件时间长度,-t 设置为下一个关键帧减去当前关键帧位置的时间长度,这样就能完成切片了
- 使用 -codec:v copy -an 去掉音频,从而达到分离音视频的目的。
- -metadata 参数来设置 metadata。
$ ffmpeg -f lavfi -i testsrc=s=176x144 -metadata title="This Is A Test" -t 2 out.mp4
-
-filter_complex 参数可以将音视频混合在一条参数字符串里进行操作,也可以输入、输出多个视频流和音频流。如果滤镜字符串太长的话,一条命令行可能会遇到很多麻烦,例如命令行支持的输入内容长度有最长限制,从而导致无法输入完整的 FFmpeg 命令参数,这时我们可以考虑使用外挂 filter 脚本来处理,使用参数 -filter_script 能够解决这些问题。
-
-copytb 参数设定 timebase 与输入的相同,确保时间戳不会跳变,当然这么做会有一定的风险,毕竟视频的 MPEGTS 封装格式与 MP4 的封装格式对应的 timebase 还是有差别的,如果强制使用相同的 timebase 则会引起时间戳间隔相关问题,严重的话甚至会引起丢帧。-force_key_frames 在做编码的时候可以根据这个参数做强制关键帧设定,-force_key_frames 支持表达式方式处理。
四、视频操作部分
- -r:v 设置视频的帧率;
- -vb 设置视频码率;
- -vframes 设置视频输出的帧数;
- -aspect 设置视频的宽高比;
- -vn 关闭视频流处理操作,也就是屏蔽视频流;
- -vf 给视频做简单滤镜处理,简单滤镜处理一般不支持多图层、多输入、多输出的滤镜。
五、音频操作部分
- -ar 设置音频采样率;
- -ab 设置音频码率;
- -aframes 设置音频输出的帧数;
- -ac 设置音频的声道数量-an 关闭音频流处理操作,也就是屏蔽音频流
- -af 给音频做简单滤镜处理,简单滤镜处理一般不支持多图层、多输入、多输出的滤镜;
- -vol 设置音频的音量。
网友评论