24

如何将流(协议 rtsp、编解码器 h264)保存在文件(容器 mp4)中?即在输入源源不断的流(带闭路电视摄像机)时,输出mp4格式的文件大小为5-10分钟的录制时间。

操作系统:debian、ubuntu 软件:vlc、ffmpeg (avconv)

目前使用此方案:

cvlc rtsp://admin:admin@10.1.1.1:554/ch1-s1 --sout=file/ts:stream.ts
ffmpeg -i stream.ts -vcodec copy -f mp4 stream.mp4

但它不能连续录制视频(在重新启动之间 vlc 会丢失大约 10 秒的实时视频)。

4

3 回答 3

26

请参阅有关服务器故障的此问题和答案。简而言之,切换工具。avconv 会做你想做的事。(ffmpeg 已经变成了 avconv。)

您正在寻找的功能称为分段。你的命令行看起来像这样:

avconv -i rtsp://10.2.2.19/live/ch01_0 -c copy -map 0 -f segment -segment_time 300 -segment_format mp4 "capture-%03d.mp4"

于 2012-08-18T12:35:04.280 回答
18

Alexander Garden 解决方案适用于ffmpep使用以下版本。替换avconvffmpeg

./ffmpeg -i rtsp://10.2.2.19/live/ch01_0 -c copy -map 0 -f segment -segment_time 300 -segment_format mp4 "capture-%03d.mp4"

由于 FFmpeg 对版本​​的混淆、ubuntu 的分裂和快速的开发,我包含了这个标题。

ffmpeg 版本 N-80023-gd55568d 版权所有 (c) 2000-2016 FFmpeg 开发人员使用 gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04.1) 构建配置:--prefix=/home/rhinchley/q10/ffmpeg_build --pkg -config-flags=--static --extra-cflags=-I/home/rhinchley/q10/ffmpeg_build/include --extra-ldflags=-L/home/rhinchley/q10/ffmpeg_build/lib --bindir=/home /rhinchley/q10/bin --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis -- enable-libvpx --enable-libx264 --enable-libx265 --enable-nonfree libavutil 55. 24.100 / 55. 24.100 libavcodec 57. 42.100 / 57. 42.100 libavformat 57. 36.100 / 57. 36.100 libavdevice 57. 0.101 / 57. libavfilter 6. 45.100 / 6. 45.100 libswscale 4. 1.100 / 4. 1.100 libswresample 2.0.101 / 2. 0.101 libpostproc 54. 0.100 / 54. 0.100

于 2016-06-23T23:21:38.083 回答
-2

团队合作:拆分视频源并让两个进程交替记录时间范围。您需要测试启动时间的可变性,以及它的可变性。您可能希望将流程优先级设置为实时以减少开始时间差异。会有一些重叠,但从我的推断来看,这听起来可能适合您的应用程序。例子:

p1: sRRRRRRRRRwwwwwwwwsRRRRRRRRRwwwwwwwwsRRRRRRRRR...
p2: wwwwwwwwwsRRRRRRRRRwwwwwwwwsRRRRRRRRRwwwwwwwww...

                    time -->

s: startup
R: running
w: wait
于 2012-05-12T11:51:47.650 回答