(1)ffmpeg基础操作
生成m3u8切片(1)
ffmpeg -i input.mp4 -c:v libx264 -c:a copy -f hls -hls_time 10 -hls_list_size 0 -hls_start_number 0 input/index.m3u8
解析:-hls_time n: 设置每片的长度,默认值为2,单位为秒
-hls_list_size n:设置播放列表保存的最多条目,设置为0会保存所有片信息,默认值为5
-hls_start_number n:设置播放列表中sequence number的值为number,默认值为0
-hls_wrap n:设置多少片之后开始覆盖,如果设置为0则不会覆盖,默认值为0,这个选项能避免在磁盘上存储过多的片,且能限制写入磁盘的最多的片的数量。
生成m3u8切片(2)
ffmpeg -i input.mp4 --fflags flush_packets -max_delay 2 -flags -global_header -hls_time 5 -hls_list_size 0 -vcodec libx264 -acodec aac -r 30 -g 60 index.m3u8
指定码率转换:
ffmpeg -i input.mp4 -b:v 10M -b:a 10M -c:v libx264 -c:v aac out.mp4
备注:命令行设计编解码时,-c:v copy不使用,否则如果指定的码率参数,分辨率参数等就会失败,难找原因
-b:v 10M 指定视频重新编码的码率为10M/s
-b:a 10M 指定音频重新编码的码率为10M/s
指定时间段录制:
ffmpeg -i input.mp4 -c:v copy -c:a copy -ss 00:10:20 -to 00:30:20 out.mp4
指定录制时长:
ffmpeg -i input.mp4 -c:v copy -c:a copy -t 30 out.mp4
注:-t 30 表示指定30秒的录制时长
提取h264裸码流:
ffmpeg -i input.mp4 -c:v copy -bsf:v h264_mp4toannexb -an out.h264
播放h264裸码流:
ffplay -stats -f h264 out.h264
ffplay -i out.h264
提取aac裸码流
ffmpeg -i input.mp4 -acodec copy -vn out.aac
注: -vn(disable video)
播放aac裸码流
ffplay -i out.aac
视频倒放,音频不变
ffmpeg -i input.mp4 -vf reverse input_video_reversed.mp4
音频倒放,视频不变
ffmpeg -i input.mp4 -map 0 -c:v copy -af "areverse" input_audio_reversed.mp4
视频音频同时倒放
ffmpeg -i input.mp4 -vf reverse -af areverse input_reversed.mp4
提取h264裸码流(指定编码质量)
ffmpeg -i input.mp4 -an -c:v libx264 -crf 18 out.h264
注:-an (disable audio)
-c:v libx264(等价于-vcodec h264 或 -vcodec libx264)
-crf 18 (固定质量值18)
转码->AVC(指定转码的部分参数)
ffmpeg -i input.mp4 -c:v libx264 -preset slow -tune film -profile:v main out.mp4
注:-tune film(主要配合视频类型和视觉优化的参数)
-preset slow
编码预设,主要调节 编码速度和质量的平衡
10个选项如下 从快到慢:ultrafast、superfast、veryfast、faster、fast、medium、slow、slower、veryslow、placebo
-profile:v main
h264有四种画质级别,分别是baseline,extend,main,high:
1.Baseline Profile:基本画质。支持I/P帧,只支持无交错(Progressive)和CAVLC;
2.Extended Profile:进阶画质。支持I/P/B/SP/SI帧,只支持无交错(Progressive)和
3.Main profile:主流画质。提供I/P/B帧,支持无交错(Progressive)和交错(Inter)
4.High profile:高级画质。在main Profile的基础上增加8X8内部预测、自定义量化、
转码->HEVC
ffmpeg -i input.mp4 -c:v libx265 -c:a copy out.mp4
转码->AVC(指定转码的部分参数)
ffmpeg -i input.mp4 -c:v libx264 -b:v 2048k -vf scale=1280:-1 -y out.mp4
注:-vf scale=1280:-1(指定输出视频的宽高,高-1代表按照比例自动适应)
-b:v 2048k(指定输出视频的码率,即输出视频每秒的bit数)
查看当前支持的编码器
ffmpeg -codecs
查看当前支持的封装格式
ffmpeg -formats
查看当前支持的滤镜
ffmpeg -filters
使用指定解码器播放视频
ffplay -vcodec h264 -i out.mp4
查看指定解码器的相关参数
ffmpeg -h decoder=h264_cuvid
查看当前支持的硬件加速选项
ffmpeg -hwaccels
例如:mac核显支持的选项(videotoolbox)英伟达显卡支持的选项(cuvid)
使用cuvid进行解码和编码实现转码
ffmpeg -c:v h264_cuvid -i input.mp4 -c:v h264_nvenc -b:v 2048k -vf scale=1280:-1 -y out.mp4
注:-hwaccel cuvid(指定使用cuvid硬件加速)
-c:v h264_cuvid(使用h264_cuvid进行视频解码)
-c:v h264_nvenc(使用h264_nvenc进行视频编码)
-b:v 2048k(指定输出视频的码率,即输出视频每秒的bit数)
-vf scale=1280:-1 (指定输出视频的宽度,高-1代表按照比例自动适应)
使用videotoolbox进行编码实现转码
ffmpeg -i input.mp4 -vcodec h264_videotoolbox -b:v 2048k -vf scale=1280k:-1 -y out.mp4
注:-vcodec h264_videotoolbox(使用h264_videotoolbox进行视频编码)
-b:v 2048k(指定输出视频的码率,即输出视频每秒的bit数)
-vf scale=1280:-1(指定输出视频的宽高,高-1代表按照比例自动适应)