1.下载FFmpeg
访问FFmpeg官方下载页面:https://ffmpeg.org/download.html
点击"Windows builds from gyan.dev"或"Windows builds by BtbN"
gyan.dev版本:https://www.gyan.dev/ffmpeg/builds/
BtbN版本:https://github.com/BtbN/FFmpeg-Builds/releases
2.解压FFmpeg
3.设置环境变量
4.验证安装
ffmpeg -version
5.简单转码测试
ffmpeg -i C:\Users\zcc\Videos\Captures\中心小学.mp4 output.mkv
源文件
转码
输出
6.生成HLS流
ffmpeg -i C:\Users\zcc\Videos\Captures\中心小学.mp4 -codec: copy -start_number 0 -hls_time 10 -hls_list_size 0 -f hls D:\out\out.m3u8
ffmpeg -i C:\Users\zcc\Videos\Captures\中心小学.mp4 -threads 10 开启多线程转码
输出
7.使用nvidia40系显卡硬件加速转码获得dash流的指令
x265编码器使用硬件加速后的名字hevc_nvenc,-profile:v的值与264编码器的不同
ffmpeg -i C:\Users\zcc\Downloads\Video\钢铁.mp4 -map 0:v -map 0:a -c:v hevc_nvenc -crf 22 -profile:v main10 -level 6.0 -keyint_min 60 -g 60 -sc_threshold 0 -b:v:0 1000k -s:v:0 1280x720 -b:v:1 5000k -s:v:1 1920x1080 -c:a aac -b:a 128k -f dash -seg_duration 4 -init_seg_name C:\Users\zcc\Downloads\Video\out\init_$RepresentationID$.m4s -media_seg_name C:\Users\zcc\Downloads\Video\out\segment_$RepresentationID$_$Number$.m4s C:\Users\zcc\Downloads\Video\out\manifest.mpd
生产级转码指令
ffmpeg -i input.mp4 \
# 视频编码参数(NVENC硬件加速)
-c:v h264_nvenc \
-profile:v high -level 4.1 \
-preset p6 \
-rc vbr -cq 23 \
-b:v:0 8000k -maxrate:0 12000k -bufsize:0 24000k -s:v:0 1920x1080 \ # 1080p轨道
-b:v:1 4000k -maxrate:1 6000k -bufsize:1 12000k -s:v:1 1280x720 \ # 720p轨道
-b:v:2 2000k -maxrate:2 3000k -bufsize:2 6000k -s:v:2 854x480 \ # 480p轨道
# 音频编码参数
-c:a aac -b:a 128k -ac 2 \
# DASH输出配置
-f dash \
-seg_duration 4 \ # 每个分片4秒
-use_template 1 \ # 使用模板URL
-use_timeline 1 \ # 使用时序信息
-init_seg_name init-\$RepresentationID\$.mp4 \ # 初始化片段命名
-media_seg_name chunk-\$RepresentationID\$-\$Number%05d\$.m4s \ # 分片命名
-adaptation_sets "id=0,streams=v id=1,streams=a" \ # 自适应集合
-hls_playlist 1 \ # 同时生成HLS播放列表
-window_size 20 \ # 滑动窗口保留20个分片
-extra_window_size 5 \ # 额外保留5个分片
-remove_at_exit 0 \ # 不删除临时文件
stream.mpd # 输出MPD清单文件
B站直播和点播使用的技术:
点播使用的dashjs:
直播使用hls: