音视频相关

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

相关推荐
MediaTea6 小时前
Pr 视频过渡:沉浸式视频 - VR 色度泄漏
音视频·vr
LNTON羚通6 小时前
算法定制LiteAIServer摄像机实时接入分析平台烟火检测算法的主要功能
音视频·视频监控
EasyCVR11 小时前
EHOME视频平台EasyCVR视频融合平台使用OBS进行RTMP推流,WebRTC播放出现抖动、卡顿如何解决?
人工智能·算法·ffmpeg·音视频·webrtc·监控视频接入
冷凝女子13 小时前
【QT】海康视频及openCv抓拍正脸接口
qt·opencv·音视频·海康
安步当歌14 小时前
【WebRTC】视频编码链路中各个类的简单分析——VideoStreamEncoder
音视频·webrtc·视频编解码·video-codec
顾北川_野14 小时前
Android CALL关于电话音频和紧急电话设置和获取
android·音视频
顶呱呱程序14 小时前
2-143 基于matlab-GUI的脉冲响应不变法实现音频滤波功能
算法·matlab·音视频·matlab-gui·音频滤波·脉冲响应不变法
EasyCVR16 小时前
萤石设备视频接入平台EasyCVR多品牌摄像机视频平台海康ehome平台(ISUP)接入EasyCVR不在线如何排查?
运维·服务器·网络·人工智能·ffmpeg·音视频
runing_an_min16 小时前
ffmpeg 视频滤镜:屏蔽边框杂色- fillborders
ffmpeg·音视频·fillborders
我喜欢就喜欢1 天前
基于qt vs下的视频播放
开发语言·qt·音视频