如何将流(协议rtsp,编解码器h264)保存在文件(容器mp4)中?也就是说,在输入无尽的流(用CCTV摄像机)时,输出文件的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秒的直播视频)。
答案 0 :(得分:22)
请参阅this question并回答“服务器故障”。简而言之,切换工具。 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"
答案 1 :(得分:8)
Alexander Garden解决方案适用于ffmpep
使用以下版本。将avconv
替换为ffmpeg
。
./ 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. 0.101 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
答案 2 :(得分:0)
团队合作:拆分视频源并让两个进程交替记录时间范围。您将要测试启动时间的变量以及它的变量。您可能希望将进程优先级设置为实时以减少开始时间差异。会有一些重叠,但听起来就像我推断的应用程序可能没问题。例如:
p1: sRRRRRRRRRwwwwwwwwsRRRRRRRRRwwwwwwwwsRRRRRRRRR...
p2: wwwwwwwwwsRRRRRRRRRwwwwwwwwsRRRRRRRRRwwwwwwwww...
time -->
s: startup
R: running
w: wait