音视频相关

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

相关推荐
REDcker4 天前
WebCodecs VideoDecoder 的 hardwareAcceleration 使用
前端·音视频·实时音视频·直播·webcodecs·videodecoder
gihigo19984 天前
基于TCP协议实现视频采集与通信
网络协议·tcp/ip·音视频
山河君5 天前
四麦克风声源定位实战:基于 GCC-PHAT + 最小二乘法实现 DOA
算法·音视频·语音识别·信号处理·最小二乘法·tdoa
音视频牛哥5 天前
Android平台RTMP/RTSP超低延迟直播播放器开发详解——基于SmartMediaKit深度实践
android·人工智能·计算机视觉·音视频·rtmp播放器·安卓rtmp播放器·rtmp直播播放器
qq_416276425 天前
通用音频表征的对比学习
学习·音视频
美狐美颜sdk5 天前
Android全局美颜sdk实现方案详解
人工智能·音视频·美颜sdk·视频美颜sdk·美狐美颜sdk
EasyDSS5 天前
私有化部署EasyDSS视频点播能力:全链路视频技术赋能,打造企业级视听新体验
音视频·hls·m3u8·点播技术·智能转码
qq_416276425 天前
DeLoRes——一种通用的音频表征学习新方法(DeLoRes(基于 Barlow Twins 的冗余最小化方法)
学习·音视频
Q_4582838685 天前
从定位到视频:808 + 1078 在各行业的落地实践
音视频
山顶望月川5 天前
实测MiniMax-Hailuo-02:当“开工大吉“变成“无字天书“,国产AI视频模型的能与之不能
人工智能·音视频