1.图像的基本格式
opencv h264压缩视频_opencv 视频压缩-CSDN博客
2.图像采集
v4l2
实时监控系统/直播系统(一)- V4L2打开摄像头-CSDN博客
实时监控系统/直播系统(二)- 用H264对视频数据进行编码-CSDN博客
实时监控系统/直播系统(三)- 用RTMP推流到Nginx,并用VLC拉流显示到Qt界面-CSDN博客
和小白一起学习V4L2采集视频_v4l2视频采集详解-CSDN博客
基于ITOP4412开发板的实时视频监控系统实现_可以部署在itop4412的简单项目-CSDN博客
查看摄像头的属性
V4l2-ctl-CSDN博客
V4L2+单色USB摄像头编程实践1:遍历支持的图像格式信息_v4l2_cap_meta_capture-CSDN博客
3.图像压缩
ffmpeg
ubuntu 安装ffmpeg_ubuntu安装ffmpeg-CSDN博客
Ubuntu系统-FFmpeg安装及环境配置_ubuntu ffmpeg-CSDN博客
ubuntu ffmpeg6.0开发环境搭建_libvpx.git-CSDN博客
FFMPEG(一) 从V4L2捕获摄像头数据_ffmpeg v4l2-CSDN博客
FFMPEG(三) v4l2 数据编码H264_ffmpeg v4l2-CSDN博客
ffmpeg 常用命令汇总_ffmpeg命令大全-CSDN博客
ffmpeg基础操作
(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, extended, main, high:
1、Baseline Profile:基本画质。支持I/P 帧,只支持无交错(Progressive)和CAVLC;
2、Extended profile:进阶画质。支持I/P/B/SP/SI 帧,只支持无交错(Progressive)和CAVLC;(用的少)
3、Main profile:主流画质。提供I/P/B 帧,支持无交错(Progressive)和交错(Interlaced), 也支持CAVLC 和CABAC 的支持;
4、High profile:高级画质。在main Profile 的基础上增加了8x8内部预测、自定义量化、 无损视频编码和更多的YUV 格式;
转码->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=1280:-1 -y out.mp4
备注:-vcodec h264_videotoolbox (使用h264_videotoolbox 进行视频编码)
-b:v 2048k (指定输出视频的码率,即输出视频每秒的bit数)
-vf scale=1280:-1 (指定输出视频的宽高,高-1代表按照比例自动适应)
ffmpeg查看摄像头信息
查看摄像头列表
ffmpeg -list_devices true -f dshow -i dummy
播放摄像头
ffplay -f dshow -i video="FULL HD webcam" # FULL HD webcam 是通过查看列表的命令行获得的名称
查看摄像头的分辨率格式
ffmpeg -list_options true -f dshow -i video="FULL HD webcam"
ffmpeg摄像头推流RTSP&RTMP
摄像头推流到RTMP服务
ffmpeg -f dshow -i video="USB webcam" -vcodec libx264 -acodec aac -ar 44100 -ac 1 -r 25 -s 1920*1080 -f flv rtmp://192.168.1.3/live/desktop
摄像头推流到RTSP(rtp over tcp)
ffmpeg -f dshow -i video="FULL HD webcam" -rtsp_transport tcp -vcodec libx264 -preset ultrafast -acodec libmp3lame -ar 44100 -ac 1 -r 25 -f rtsp rtsp://192.168.0.1/webcam
windows桌面推流到RTMP服务
ffmpeg -f gdigrab -i desktop -vcodec libx264 -preset ultrafast -acodec libmp3lame -ar 44100 -ac 1 -r 25 -s 1920*1080 -f flv rtmp://127.0.0.1/live/desktop
windows桌面推流到RTSP服务(rtp over udp)
ffmpeg -f gdigrab -i desktop -vcodec libx264 -preset ultrafast -acodec libmp3lame -ar 44100 -ac 1 -r 25 -f rtsp rtsp://127.0.0.1/live/desktop
ffmpeg基本推拉流命令
RTMP推流
ffmpeg -re -i input.flv -f flv -r 25 -s 1920*1080 -an "rtmp://127.0.0.1/live/test"
RTSP拉流转RTMP推流
ffmpeg -rtsp_transport tcp -i "rtsp://admin:12345678@192.168.0.2" -f flv -c:v copy -a:v copy -r 25 -s 1920*1080 "rtmp://127.0.0.1/live/test"
本地视频文件RTSP推流 (tcp)
ffmpeg -re -i input.mp4 -rtsp_transport tcp -vcodec h264 -acodec copy -f rtsp rtsp://127.0.0.1/live/test
本地视频文件RTSP循环推流(tcp)
ffmpeg -re -stream_loop -1 -i input.mp4 -rtsp_transport tcp -c copy -f rtsp rtsp://127.0.0.1/live/test
本地视频文件RTSP推流 (udp)
ffmpeg -re -i input.mp4 -rtsp_transport udp -vcodec h264 -acodec copy -f rtsp rtsp://127.0.0.1/live/test
RTSP拉流并播放 (tcp)
ffplay -i -rtsp_transport tcp rtsp://127.0.0.1/live/test
RTSP拉流并播放 (udp)
ffplay -i rtsp://127.0.0.1/live/test
ffmpeg常见录制命令
指定时间段录制
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秒的录制时长
ffmpeg常见处理音频命令
ffmpeg命令行 从mp4视频文件提取aac 音频文件
ffmpeg -i test.mp4 -vn -acodec aac test.aac
备注:-i 表示输入文件
-vm disable video / 丢掉视频
-acodec 设置音频编码格式
ffmpeg 从aac音频文件解码为pcm音频文件
ffmpeg -i test.aac -f s16le test.pcm
备注:-i 表示输入文件
-f 表示输出格式
ffplay 播放.pcm音频文件
ffplay -ar 44100 -ac 2 -f s16le -i test.pcm
备注:-i 表示指定的输入文件
-f 表示强制使用的格式
-ar 表示播放的音频数据的采样率
-ac 表示播放的音频数据的通道数
60s长包含音频的video-60.mp4,和30s长的音频audio-30.mp3 合并。audio-30.mp3内的音频会替换到video-60.mp4的音频。
ffmpeg -i video-60.mp4 -i audio-30.mp3 -c:v copy -c:a aac -strict experimental -map 0:v:0 -map 1:a:0 out.mp4
60s长包含音频的video-60.mp4,和30s长的音频audio-30.mp3 合并。合并后的out.mp4包含两路音频。
ffmpeg -i video-60.mp4 -i audio-30.mp3 -filter_complex "amix=inputs=2:duration=first:dropout_transition=0" -c:v "libx264" -c:a "aac" -y out.mp4
看了一半,后面有点看不懂
x264
最简单的视频编码器:基于libx264(编码YUV为H.264)-CSDN博客
https://www.cnblogs.com/wainiwann/p/7477794.html
4.图像传输
live555
1、RTSP协议、ffmepeg、live555_live555 ffmpeg区别-CSDN博客
5 live555源码分析(五)——live555 RTSP工作流程(二)_live555解析rtsp码流类型-CSDN博客
live555mediaserver——探讨下live555用的编程设计模式_live555 用到的设计模式-CSDN博客
使用live555实现实时流的推流服务器_live555实现实时推流-CSDN博客
H.264帧结构和RTSP协议源码框架_h264协议-CSDN博客
Live555源码阅读笔记(一):源码介绍文档 及 源码目录结构_live555官网接口文档-CSDN博客
Live555源码阅读笔记(二):UsageEnvironment 目录详解_live555 basicusageenvironment.cpp-CSDN博客