ffmpeg拉流分段存储到文件-笔记

通过ffmpeg可以从rtsp网络流拉取数据并存储到本地文件里,如下命令。做个笔记

bash 复制代码
ffmpeg -rtsp_transport tcp -i rtsp://192.168.1.168:6880/live -c copy -f segment -segment_time 60 stream_piece_%d.mp4

//码流包含音频时用下面命令:
ffmpeg -rtsp_transport tcp -i rtsp://192.168.1.200:554/stream0 -c:v copy -c:a aac -b:a 128k -f segment -segment_time 60 stream_piece_%d.mp4

这条 ffmpeg 命令的作用是从一个 RTSP 流中捕获视频,并将其分割成一系列的视频文件,每个文件持续时间为60秒。下面是命令中每个参数的详细解释:

ffmpeg:这是调用 ffmpeg 程序的命令。

-rtsp_transport tcp:这个选项指定 ffmpeg 使用 TCP 协议来传输 RTSP 流数据。这是必要的,因为默认情况下 ffmpeg 使用 UDP 协议,而 UDP 在网络质量不佳时可能会导致数据丢失。

-i rtsp://192.168.1.168:6880/live:这是输入流的 URL。-i 表示输入,rtsp://192.168.1.168:6880/live 是 RTSP 流的地址和端口。

-c copy:这个选项告诉 ffmpeg 直接复制输入流的编码数据,不进行重新编码。这样可以减少处理时间,但生成的文件需要与原始流相同的编码器才能播放。

-f segment:这个选项指定输出格式为分段文件。

-segment_time 60:这个选项设置每个分段文件的长度为60秒。

stream_piece_%d.mp4:这是输出文件的命名模式。%d 会被替换为一个递增的数字,以区分不同的分段文件。例如,输出文件名可能是 stream_piece_1.mp4、stream_piece_2.mp4 等。

ffmpeg 在处理流媒体时,会使用内部缓冲机制来平滑网络延迟和抖动。这意味着 ffmpeg 会缓存一小部分数据,以便在网络状况不佳时仍然能够持续写入文件。这个缓冲区的大小可以通过 -buffer_size 和 -max_buffer_size 选项来调整。

在拉流和写文件之间,ffmpeg 会尽量确保数据的连续性和完整性。如果网络流中断或出现错误,ffmpeg 会尝试从错误中恢复,并继续写入下一个分段文件。这样可以确保即使在网络不稳定的情况下,也能够捕获尽可能多的视频数据。

使用了 -segment_time 选项,ffmpeg 会在每个时间段结束时自动创建一个新的分段文件,即使当前的网络流还在继续。这样可以确保视频文件的时长符合指定的分段时间,但也可能意味着最后一个分段文件的时长会少于60秒,如果流在时间段结束前停止了。

相关推荐
β添砖java8 小时前
2025最新快速构建企业级虚拟专用网络环境学习笔记
笔记·学习
qianpeng48 小时前
IDA PRO笔记
笔记
Yang_jie_0312 小时前
笔记:数据结构(顺序表)
数据结构·windows·笔记
Tom@敲代码15 小时前
js学习笔记-01
javascript·笔记·学习
坐望云起15 小时前
FFmpeg.wasm 纯浏览器端视频压缩与格式转换实战:零服务器、零上传、100% 隐私
服务器·ffmpeg·wasm
巴巴媛66616 小时前
STM32学习笔记【32.BKP + RTC】
笔记·stm32·学习
能摆一天是一天17 小时前
Spring ai vectorstore 使用本地模型导致只能匹配可行度为1.0的内容的解决方法笔记
java·笔记·spring
进阶的DW17 小时前
Wiki + Graph + RAG 知识库建设笔记2
笔记
AOwhisky17 小时前
Linux(CentOS)系统管理入门笔记(第四期)——文件系统(下篇):文件与目录操作实战——cpmvmkdirrmln
linux·运维·笔记·centos·云计算·文件系统
bmy-happy18 小时前
网安专业课程笔记sale
笔记