音视频相关

ffmpeg

安装

  1. 源码安装 git clone https://git.ffmpeg.org/ffmpeg.git
  1. 配置 编译 安装
bash 复制代码
./configure --prefix=/usr/local/ffmpeg --enable-debug=3 --enable-shared --disable-static --disable-x86asm --enable-ffplay

make -j`nproc` && make install

Q: 没有ffplay

A:安装 yum install libsdl2-dev -y

bash 复制代码
yum update
yum install SDL2 SDL2-devel
  1. 配置环境变量

Q: 缺少动态库

A: echo "/usr/local/ffmpeg/lib" >> /etc/ld.so.conf + ldconfig

命令

1. 视频转换为图片

ffmpeg -i test.mkv -r 1 -f image2 pic/image%3d.jpg

  • -i test.mkv:指定输入文件 test.mkv,这是你要从中提取帧的视频文件。

  • -r 1:设置帧率为每秒 1 帧。这意味着 FFmpeg 每秒从视频中提取一帧图像。你可以根据需要调整此参数,例如设置为 2 表示每秒提取两帧。

  • -f image2:指定输出格式为 image2,这是 FFmpeg 用于处理图片序列的格式。

  • pic/image%3d.jpg:指定输出图片的文件路径和命名模式。%3d 表示使用三位数字的文件名(例如 image001.jpgimage002.jpg 等)。pic/ 是输出图片的存放目录。

2. 将图片按顺序合并成视频

ffmpeg -r 25 -f image2 -i pic/image%3d.jpg -vcodec libx264 -s 1920x1080 -g 1 -keyint_min 1 -sc_threshold 0 -pix_fmt yuv420p output.mp4

  • -r 25:指定视频的帧率为每秒 25 帧。这意味着每秒钟将显示 25 张图片。
  • -f image2:指定输入格式为图片序列。image2 是 FFmpeg 处理图片序列的格式。
  • -i pic/image%3d.jpg:指定输入图片文件的路径和命名模式。%3d 表示使用三位数字的文件名(例如,image001.jpgimage002.jpg 等)。
  • -vcodec libx264:指定使用 H.264 编解码器进行视频编码。
  • -s 1920x1080:设置输出视频的分辨率为 1920x1080。
  • -g 1:设置 GOP(Group of Pictures)大小为 1。这表示每一帧都是关键帧,适合于某些特定应用场景(如视频流的实时预览),但可能会导致更大的文件大小。
  • -keyint_min 1:指定最小关键帧间隔为 1 帧。配合 -g 1 使用,确保每一帧都是关键帧。
  • -sc_threshold 0:设置场景变化阈值为 0。场景变化阈值为 0 表示无论是否检测到场景变化,FFmpeg 都会尝试在每一帧设置关键帧。
  • -pix_fmt yuv420p:指定像素格式为 YUV 4:2:0。这是常见的视频像素格式,兼容性良好。

3. 捕获摄像头

ffmpeg -list_devices true -f dshow -i dummy

  • -list_devices true:此选项用于指示 FFmpeg 列出所有可用的设备,而不是实际捕获或处理媒体流。
  • -f dshow:指定输入格式为 DirectShow。DirectShow 是 Windows 平台上的多媒体框架,用于捕获和处理音视频数据。
  • -i dummy:提供一个虚拟的输入文件名 dummy。这个参数的目的是为了满足 FFmpeg 的输入要求,但实际上并不使用这个虚拟输入。

ffmpeg -f dshow -i video="Camera 1" -t 10 output.mp4

"Camera 1" 是你从 -list_devices 命令中获得的视频设备名称,-t 10 表示录制 10 秒钟的视频。

4. 捕获桌面,推流到流媒体服务器

ffmpeg -f gdigrab -framerate 30 -i desktop -f rtsp rtsp://192.168.0.103/live/streamkey

  • -f gdigrab:指定输入格式为 gdigrab。这是 Windows 上用于捕获桌面内容的输入格式。如果你使用的是其他操作系统,可能需要使用不同的输入格式。

  • -framerate 30:设置捕获的帧率为 30 帧每秒。你可以根据需要调整这个值,通常 30 帧每秒是比较常见的选择。

  • -i desktop:指定输入来源为桌面。这告诉 FFmpeg 从整个桌面捕获视频。

  • -f flv:指定输出格式为 FLV,这是一种常用于视频流的格式。许多流媒体服务器和平台(如 YouTube、Twitch)都支持这种格式。

  • rtmp://your.streaming.server/live/streamkey:指定流媒体服务器的 URL 和流密钥。你需要将其替换为你的实际服务器地址和流密钥。例如,对于 YouTube,你可以在 YouTube 的直播设置中找到这个信息。

使用ffplay拉流

ffplay -i rtsp://192.168.0.103/live/streamkey

ffmpeg -i rtsp://your.rtsp.server/live/stream -c copy output.mp4

ffmpeg -i rtsp://your.rtsp.server/live/stream -c:v libx264 -c:a aac output.mp4

ffmpeg -rtsp_transport tcp -i rtsp://your.rtsp.server/live/stream -c copy output.mp4

  • -i rtsp://your.rtsp.server/live/stream:指定 RTSP 服务器的 URL 作为输入源。
  • -c copy:直接拷贝视频和音频流,而不进行转码,这样可以保持原始质量并提高处理速度。
  • output.mp4:保存拉取到的流的文件名和格式。在这里是 MP4 格式,你可以根据需要更改文件名和格式。
  • 如果你需要将流转码为不同的格式或编码,你可以使用 -c:v-c:a 参数
  • -rtsp_transport tcp 强制使用 TCP 传输协议,这可以改善在不稳定网络条件下的流稳定性

5.

RTSP

相关推荐
金博客3 小时前
QT进行音频录制
c++·qt·音视频
cuijiecheng20183 小时前
音视频入门基础:AAC专题(1)——AAC官方文档下载
音视频·aac
FutureUniant3 小时前
GitHub每日最火火火项目(9.13)
人工智能·python·计算机视觉·github·音视频
gomogomono5 小时前
【FFMPEG】FFplay音视频同步分析(下)
ffmpeg·音视频
念威7 小时前
unity导入半透明webm + AE合成半透明视频
unity·游戏引擎·音视频·web
陆地鲨鱼-彻10 小时前
C++ 音频
c++·音视频
soso196810 小时前
借助大模型将文档转换为视频
音视频
羚通科技10 小时前
视频监控管理平台LntonAIServer视频智能分析抖动检测算法应用场景
大数据·人工智能·算法·音视频
Java搬砖组长10 小时前
快手视频怎么去水印保存到手机?
智能手机·音视频
EasyCVR11 小时前
视频监控平台是如何运作的?EasyCVR视频汇聚平台的高效策略与实践
人工智能·音视频·视频编解码·视频监控·监控视频接入