ffmpeg - ffmpeg 可能随着时间的推移进行下采样,服务 RTSP?

标签 ffmpeg

我想带一个 RSTP 网络摄像头,将视频下采样到较低的速率(比如每 5 秒一帧)并将结果作为 RTSP 流提供。
是否可以配置 ffmpeg(或 libffmpeg)来做这样的事情?

最佳答案

是的,我们所要做的就是添加 -r 0.2参数,并重新编码视频。
也建议加-tune zerolatency-g 1确保每一帧都是关键帧(在视频延迟相关的情况下需要)。

例子:
从 localhost 接收 RTSP 流,并以 0.2fps 流式传输(到具有不同端口的 localhost):

ffmpeg -rtsp_flags listen -rtsp_transport tcp -stimeout 1000000 -i rtsp://127.0.0.1:10000/live.stream -r 0.2 -vcodec libx264 -tune zerolatency -pix_fmt yuv420p -rtsp_transport tcp -f rtsp rtsp://127.0.0.1:20000/live.stream

测试:
为了进行测试,我使用 FFmpeg(以 25fps 传输合成视频)模拟了​​ RTSP 摄像机。
RTSP 流由另一个 FFmpeg 进程捕获,该进程将速率降低到 0.2fps。
使用 FFprobe 捕获和显示 0.2fps 视频。
测试以批处理文件的形式实现:
::Play the video for testing
start ffplay -rtsp_flags listen -rtsp_transport tcp -flags low_delay -vf setpts=0 -listen_timeout 1000000 rtsp://127.0.0.1:20000/live.stream

::Wait 5 seconds
ping 127.0.0.1 -n 5 > nul

::Capture the RTSP camera at 25fps, convert to 0.2fps (with re-encoding)
start ffmpeg -rtsp_flags listen -rtsp_transport tcp -stimeout 1000000 -i rtsp://127.0.0.1:10000/live.stream -r 0.2 -vcodec libx264 -tune zerolatency -pix_fmt yuv420p -rtsp_transport tcp -f rtsp rtsp://127.0.0.1:20000/live.stream

::Wait 5 seconds
ping 127.0.0.1 -n 5 > nul

::Simulate an RTSP camera at 25fps
ffmpeg -re -f lavfi -i testsrc=size=192x108:rate=25 -vcodec libx264 -pix_fmt yuv420p -g 30 -rtsp_transport tcp -f rtsp -muxdelay 0.1 rtsp://127.0.0.1:10000/live.stream

它开始尴尬并在几帧后变得稳定。
(我们使用 select 过滤器来解决它)。
示例框架:
enter image description here
enter image description here
enter image description here
enter image description here
enter image description here
enter image description here

关于ffmpeg - ffmpeg 可能随着时间的推移进行下采样,服务 RTSP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71774828/

相关文章:

java - 进程正在暂停,直到我关闭程序

ffmpeg - HW Accel 转码 Intel 快速同步视频 QSV h264_qsv 和 CRF 质量

ffmpeg - 生成 moov 原子

bash - 如何在 ffmpeg 中创建随机通行证名称?

ffmpeg –i/data/1.mp4/data/2.mp4 找不到适合 '–i' 的输出格式

ffmpeg - 在不知道视频长度的情况下使用 ffmpeg 淡出音频

Ffmpeg 将视频拆分为多个 block ,但持续时间长度不同

video - 使用 ffmpeg 进行 GPU 加速视频处理

android - 如何使用android-ndk-r10d在windows上编译ffmpeg-2.5.3

java - 如何设置 FFmpeg 在完成工作后向 java 代码发送信号?