ffmpeg: Using tee with segmenter
我正在尝试使用T恤将我的流同时输出为1分钟的片段和文件。这是我的命令:
1 2 3 | ffmpeg -i"rtsp://${cameraIp}:554/axis-media/media.amp?videocodec=h264&resolution=1280x720&fps=15" -c copy -map 0 \\ -f tee"[f=ssegment:segment_time=60:segment_format=mp4:reset_timestamps=1:r=15] ${rootPath}/${storeId}-${location}-%03d.mp4 \\ | /tmp/${cameraIp}.mkv" |
分别(没有tee)两个输出都可以正常工作。因此,我既可以输出为分段文件,也可以输出为非分段文件。但是使用T恤我会收到以下错误:
[stream_segment,ssegment @ 0x217ece0] Failed to open segment '
/etc/cida/diagnostics/vid/780801-99-000.mp4' [tee @ 0x217d820] Slave
'[f=ssegment:segment_time=60:segment_format=mp4:reset_timestamps=1:r=15]
/etc/cida/diagnostics/vid/780801-99-%03d.mp4': error writing header:
No such file or directory
请参阅下面的完整命令输出。有什么建议吗?
ffmpeg version 3.3 Copyright (c) 2000-2017 the FFmpeg developers
built with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04.3) configuration:
--extra-libs=-ldl --prefix=/opt/ffmpeg --mandir=/usr/share/man --enable-avresample --disable-debug --enable-nonfree --enable-gpl --enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb --disable-decoder=amrnb --disable-decoder=amrwb --enable-libpulse --enable-libfreetype --enable-gnutls --enable-libx264 --enable-libx265 --enable-libfdk-aac --enable-libvorbis --enable-libmp3lame --enable-libopus --enable-libvpx --enable-libspeex --enable-libass --enable-avisynth --enable-libsoxr --enable-libxvid --enable-libvidstab --enable-libwavpack --enable-nvenc libavutil 55. 58.100 / 55. 58.100 libavcodec 57. 89.100 / 57. 89.100 libavformat 57. 71.100 / 57. 71.100 libavdevice 57. 6.100 / 57. 6.100 libavfilter 6. 82.100 / 6. 82.100 libavresample 3. 5. 0 /
3. 5. 0 libswscale 4. 6.100 / 4. 6.100 libswresample 2. 7.100 / 2. 7.100 libpostproc 54. 5.100 / 54. 5.100 Input #0, rtsp, from 'rtsp://10.83.245.7:554/axis-media/media.amp?videocodec=h264&resolution=1280x720&fps=15':
Metadata:
title : Session streamed with GStreamer
comment : rtsp-server Duration: N/A, start: 0.080011, bitrate: N/A
Stream #0:0: Video: h264 (Main), yuvj420p(pc, bt709, progressive), 1280x720 [SAR 1:1 DAR 16:9], 25 tbr, 90k tbn, 180k tbc
[stream_segment,ssegment @ 0x217ece0] Failed to open segment '
/etc/cida/diagnostics/vid/780801-99-000.mp4' [tee @ 0x217d820] Slave
'[f=ssegment:segment_time=60:segment_format=mp4:reset_timestamps=1:r=15]
/etc/cida/diagnostics/vid/780801-99-%03d.mp4': error writing header:
No such file or directory [tee @ 0x217d820] Slave muxer #0 failed,
aborting. Could not write header for output file #0 (incorrect codec
parameters ?): No such file or directory Stream mapping: Stream #0:0
-> #0:0 (copy)
Last message repeated 1 times
这是一个可以帮助您或其他人的示例。
我正在将视频从vga录制到1小时的片段中,然后流传输到UDP,然后流传输到UDP,然后使用VLC(cvlc)作为rtp流将其流传输到多播地址。这样,如果需要,多人可以观看实时视频(大约5秒钟的延迟)。
这是命令行:
1 2 3 4 5 | ffmpeg -rtbufsize 500M -f v4l2 -video_size 1152x900 -i /dev/video0 \\ -vf"drawtext='fontfile=/usr/share/fonts/truetype/freefont/FreeSans.ttf:text=%{localtime}: x=10: y=10: fontcolor=white: box=1: boxcolor=black@1: fontsize=24'" \\ -c:v libx264 -preset veryslow -crf 28 \\ -pix_fmt yuv420p -an -r 15 -y \\ -f tee -map 0:v"[f=segment:segment_atclocktime=1:segment_time=3600:strftime=1]/videos/raw_video/video_%Y%m%d-%H%M%S.mp4|[f=mpegts]udp://127.0.0.1:1234/" |
操作系统为Ubuntu 16.04 MATE。