ffmpeg h264 h265 视频格式操作
01.01 基本工具
H265 视频确认工具
参考: Win10系统如何安装64位ffmpeg
从 https://github.com/BtbN/FFmpeg-Builds/releases 下载win10 版本的static 版本的 ffmpeg 发布版本。
解压后把 ffmpeg.exe
的目录 ffmpeg-n5.0-latest-win64-gpl-5.0\bin
加入 PATH
环境变量。
注意:
A:文件名含shared
是动态库版本,为了测试方便,尽量使用静态库版本,就是不带shared
的。
B:gpl版本支持h264/h265,lgpl版本不支持h264/h265。
cmd
或者 Windows Terminal
中运行 ffmpeg -version
可以查看版本信息。
01.02 ffmpeg录屏
:: 1. 查看FFmpeg版本是否支持dshow设备
ffmpeg -formats | findstr dshow
:: 2 列举该计算机下所有视频捕捉设备(包括虚拟设备)
ffmpeg -list_devices true -f dshow -i dummy
:: 3 查看设备支持选项
ffmpeg -list_options true -f dshow -i video="Integrated Camera"
:: 4 直接播放笔记本电脑摄像头数据
ffplay -f dshow video="Integrated Camera"
# 录屏+声音,输出h264格式
# [麦克风阵列 (Realtek High Definition Audio)] 是麦克风的名称
ffmpeg -framerate 25 -thread_queue_size 4096 -f gdigrab -rtbufsize 670200k -i desktop -thread_queue_size 4096 -f dshow -i audio="麦克风阵列 (Realtek High Definition Audio)" -crf 18 -vf scale=iw*0.8:ih*0.8 -vcodec libx264 -pix_fmt yuv420p -preset:v ultrafast -tune:v zerolatency -y h264.mp4
# 录屏+声音,输出h265格式
ffmpeg -framerate 25 -thread_queue_size 4096 -f gdigrab -rtbufsize 670200k -i desktop -thread_queue_size 4096 -f dshow -i audio="麦克风阵列 (Realtek High Definition Audio)" -crf 18 -vf scale=iw*0.8:ih*0.8 -vcodec libx265 -pix_fmt yuv420p -preset:v ultrafast -tune:v zerolatency -y h265.mp4
# 给视频加水印
ffmpeg -i input.mp4 -i picture.jpg -filter_complex "overlay=20:20" output.mp4
[-i input.mp4]输入视频文件
[-i picture.jpg]输入图片文件
[-filter_complex “overlay=20:20”] -filter_complex这个参数是添加滤镜的,这里我们添加的滤镜是贴图,设置的位置是"overlay=20:20",意思就是距离顶部20个像素,距离左侧20个像素,也就是它会在左上角显示
# 用h265的 mp4 文件生成 h265的 m3u8 文件
ffmpeg -i panda265.mp4 -c:v libx265 -c:a aac -strict -2 -hls_time 4 -hls_list_size 6 -f hls pandah265.m3u8
# 查看可用设备
ffmpeg -hide_banner -devices
*********************************************************
Devices:
D. = Demuxing supported
.E = Muxing supported
--
D dshow DirectShow capture
D gdigrab GDI API Windows frame grabber
D lavfi Libavfilter virtual input device
E sdl,sdl2 SDL2 output device
D vfwcap VfW video capture
********************************************************
# 转换视频格式 h264 to h265
ffmpeg -i output.mp4 -vcodec libx265 -preset slow -b:v 2000k -crf 21 -strict -2 outh265.mp4
把一个 non-fragment MP4 转换成 fragment MP4。可以使用 FFmpeg 的 -movflags 来转换。
# 格式转换, 对于原始文件为非 MP4 文件:
ffmpeg -i trailer_1080p.mov -c:v copy -c:a copy -movflags frag_keyframe+empty_moov bunny_fragmented.mp4
# 格式转换,原始 MP4 转成 fragmented格式:
ffmpeg -i non_fragmented.mp4 -movflags frag_keyframe+empty_moov fragmented.mp4
# 也可以用 mp4fragment
mp4fragment --fragment-duration 1000 --force-i-frame-sync auto input.mp4 fragmented.mp4
# h264 mp4 转 fmp4,不能自动播放
ffmpeg -i non_fragmented.mp4 -movflags frag_keyframe+empty_moov fragmented.mp4
# h264 mp4 转 fmp4,可自动播放
mp4fragment --fragment-duration 1000 --force-i-frame-sync auto h265_mp4.mp4 h265_mse2.mp4
# h264 mp4 转 fmp4,(自动播放?)
ffmpeg -i panda264.mp4 -c copy -movflags frag_keyframe+faststart panda264mse.mp4
# h265 mp4 转 fmp4,(自动播放?)
ffmpeg -i panda265.mp4 -c copy -movflags frag_keyframe+faststart panda265mse.mp4
# 格式转换,fmp4 转 dash
ffmpeg -hide_banner -y -threads 0 -i hevc_ali_fragment.mp4 -c:v:0 libx265 -crf 25 -preset veryslow -c:v:1 libx265 -crf 27 -preset veryslow -g 150 -sc_threshold 0 -b_strategy 0 -seg_duration 2 -use_timeline 0 -use_template 1 -single_file 1 -adaptation_sets "id=0,streams=v id=1,streams=a" -f dash hevc_ali_dash5.mpd
# 格式转换 fmp4 转 dash
mp4dash fragmented.mp4
# 生成mp4 转换为 hls格式
ffmpeg -i panda264.mp4 -c:v libx264 -c:a aac -strict -2 -hls_time 4 -hls_list_size 6 -f hls pandah264hls.m3u8
ffmpeg -i panda265.mp4 -c:v libx265 -c:a aac -strict -2 -hls_time 4 -hls_list_size 6 -f hls pandah265hls.m3u8
参考
修改Chromium源码实现HEVC/H.265 4K视频播放
【FFmpeg】转码、压制、录屏、裁切、合并、提取、直播…(ffmpeg笔记)
流媒体视频基础 MSE 入门 & FFmpeg 制作视频预览缩略图和 fmp4
shaka-packager(分离音频和视频,支持 HLS 和 DASH)
三种 hevc 类型的demo文件
HEVC HLS with fMP4
HEVC HLS with TS (not supported by Apple)
HEVC MPEG-DASH
mp4parser(可以在线查看mp4的具体格式,可能需要vpn)
HTML 5 Audio/Video DOM canPlayType() 方法
H5直播系列二 MSE(Media Source Extensions)
mp4info(查看mp4 文件信息,可以直接下载编译好的工具)
mp4info download
mp4info download win
Chrome/Chromium HTML5 video 视频播放硬件加速
修改Chromium源码,实现HEVC/H.265 4K视频播放
Fragmented mp4(fmp4)
H5流式播放(FMP4转封装与mediaSource)
FMP4与DASH的概念理解
自适应流媒体传输(二)——为什么要使用fragmented MP4
在windows上使用ffmpeg命令行录制摄像头和桌面数据
mp4box 下载
mp4box winx64 下载
MP4Box wiki
项目记录:MPEG-DASH整理1
项目记录:MPEG-DASH整理2
项目记录:MPEG-DASH整理3
Nginx 搭建DASH服务器(从mp4文件生产dash的mpd,h265也可)
使用MediaCodec硬解码h.265视频及音频进行播放
mediacodec配置h265解码
Android音视频【七】H265硬编解码&视频通话
Android音视频【五】H265/HEVC&码流结构
未验证
Linux 下使用 ffmpeg 录屏
ffmpeg -f alsa -i pulse -f x11grab -r 30 -s 1920x1080 -i :0.0 -acodec aac -ac 1 -ar 44100 -qscale 0.01 -vcodec libx264 -preset ultrafast -crf 0 output.mp4
#-f alsa 指定录取声音的驱动
#-i pulse
#-f x11grab 指定录取的视频驱动,这里指屏幕
#-s 1920x1080 指定录制的像素
#-acodec aac 指定音频编码
#-vcodec libx264 指定视频编码
// 去掉视频中的音频
ffmpeg -i input.mp4 -vcodec copy -an output.mp4
// -an: 去掉音频;-vcodec:视频选项,一般后面加copy表示拷贝
ffmpeg -i h264_mp4.mp4 -vcodec copy -an h264_mp4_no_sound.mp4
fmp4 格式
fmp4 是基于 MPEG-4 Part 12 的流媒体格式。
D:\ffmpeg\bin>ffmpeg -re -i d:\test.264 -g 52 -acodec libvo_aacenc -ab 64k -vcodec libx264 -vb 448k -f mp4 -movflags frag_keyframe+empty_moov d:\output.mp4
D:\ffmpeg\bin>ffmpeg -i d:\test.264 -g 52 -vcodec copy -f mp4 -movflags frag_keyframe+empty_moov d:\output.mp4
frag_keyframe 导致碎片输出,
empty_moov将导致输出100%分段; 没有这个,第一个片段将被多路复用为短片(使用moov),其后是片段中的其余媒体,
-re 在实时流传输(在媒体比特率上输出)时很有用,如果您正在创建文件,不要使用它,
-g 52 强制(至少)每第52帧作为关键帧
https://ffmpeg.org/ffmpeg-formats.html#Examples-9