Macos 从ffmpeg获取不正确的输出分辨率或FPS
我正在从安全摄像头捕获一个RTSP流,并使用OSX作为编码平台将其转换为(实时流媒体)到iphone。 我让它正常工作,我正在调整它。 然而,它似乎没有输出所要求的决议。这是我的剧本Macos 从ffmpeg获取不正确的输出分辨率或FPS,macos,ffmpeg,h.264,libx264,Macos,Ffmpeg,H.264,Libx264,我正在从安全摄像头捕获一个RTSP流,并使用OSX作为编码平台将其转换为(实时流媒体)到iphone。 我让它正常工作,我正在调整它。 然而,它似乎没有输出所要求的决议。这是我的剧本 /Applications/SecurityCamera/openRTSP -v -c -t rtsp://10.0.1.118/ch1-s1 | \ /Applications/SecurityCamera/ffmpeg \ -r 10 -i - \ -y -an -ab 64000 -f
/Applications/SecurityCamera/openRTSP -v -c -t rtsp://10.0.1.118/ch1-s1 | \
/Applications/SecurityCamera/ffmpeg \
-r 10 -i - \
-y -an -ab 64000 -f mpegts -vcodec copy -s 960x640 \
-flags +loop -cmp +chroma -partitions +parti4x4+partp8x8+partb8x8 \
-subq 5 -trellis 1 -refs 1 -coder 0 -me_range 16 -keyint_min 25 \
-sc_threshold 40 -i_qfactor 0.71 -bt 400k -maxrate 524288 -bufsize 524288 \
-qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -level 30 \
-aspect 960:640 -r 10 -g 10 -async 2 -\
|/Applications/SecurityCamera/mediastreamsegmenter -b http://localhost:8080/\
-f /Library/WebServer/Documents/ -i stream.m3u8 -t 10 -s 4 -D
这是状态报告:
Input #0, h264, from 'pipe:':
Duration: N/A, bitrate: N/A
Stream #0.0: Video: h264, yuv420p, 1600x1200, 10 fps, 10 tbr, 1200k tbn, 20 tbc
[mpegts @ 0x10100c200] muxrate VBR, pcr every 1 pkts, sdt every 200, pat/pmt every 40 pkts
Output #0, mpegts, to 'pipe:':
Metadata:
encoder : Lavf52.93.0
Stream #0.0: Video: libx264, yuv420p, 1600x1200 [PAR 1:1 DAR 4:3], q=2-31, 90k tbn, 10 tbc
Stream mapping:
Stream #0.0 -> #0.0
您可以看到它正在工作,但出于某种原因,它正在输出1600x1200。(可能-vcodec copy
复制所有编解码器参数,而不仅仅是编解码器类型?)
如果我将-vcodec copy
更改为-vcodec libx264
,则我会得到正确的状态报告(说明960x640,正确),但流媒体切换为2 FPS(为什么?我强制输入和输出!),并在54帧后停止(参见下面的输出)
正如您所猜测的,
-vcodec copy
并不意味着“使用相同类型的编码”,而是意味着“通过未更改的方式传递数据”。当codec设置为copy
时,您正在设置的无数其他选项中没有一个能起到任何作用
我假设将其设置为libx264
,从而实际转码视频,会降低速度,因为现在它需要做大量工作。特别是如果输入视频为1600x1200 h264
根据您的需要,显示点的缩放肯定比转码快,否则请继续调整。正如您所猜测的,
-vcodec copy
并不意味着“使用相同类型的编码”,而是意味着“通过未更改的方式传递数据”。当codec设置为copy
时,您正在设置的无数其他选项中没有一个能起到任何作用
我假设将其设置为libx264
,从而实际转码视频,会降低速度,因为现在它需要做大量工作。特别是如果输入视频为1600x1200 h264
根据您的需要,在显示点进行缩放肯定比转码快,否则请继续调整。绝对正确。由于没有解释缓冲区下溢/溢出的错误,这使得它有点神秘。我终于让它工作了,但不得不在源代码处降低分辨率,导致大约800x600x100fps是Atom 330 CPU所能处理的。我确实更进一步,因为我几乎不想要一台全天候100%的机器。伙计,我多么希望主板上有一个H264编码器。或者FPGA!我在这里有进一步的讨论:绝对正确。由于没有解释缓冲区下溢/溢出的错误,这使得它有点神秘。我终于让它工作了,但不得不在源代码处降低分辨率,导致大约800x600x100fps是Atom 330 CPU所能处理的。我确实更进一步,因为我几乎不想要一台全天候100%的机器。伙计,我多么希望主板上有一个H264编码器。或者FPGA!我在这里有一个进一步的讨论:请注意任何试图做同样事情的人:如果您使用的是OpenRTSP,请使用-t强制源代码通过TCP而不是UDP传递数据。如果您使用的是ffmpeg,请将?tcp附加到RTSP url的末尾,这将提示ffmpeg通过tcp请求数据流。这消除了解码过程中的许多错误源。请注意,任何试图执行相同操作的人:如果您使用的是OpenRTSP,请使用-t强制源通过TCP而不是UDP传递数据。如果您使用的是ffmpeg,请将?tcp附加到RTSP url的末尾,这将提示ffmpeg通过tcp请求数据流。这消除了解码过程中的许多错误源。
Seems stream 0 codec frame rate differs from container frame rate: 20.00 (20/1) -> 10.00 (20/2)
Input #0, h264, from 'pipe:':
Duration: N/A, bitrate: N/A
Stream #0.0: Video: h264, yuv420p, 1600x1200, 10 fps, 10 tbr, 1200k tbn, 20 tbc
[buffer @ 0x100d02420] w:1600 h:1200 pixfmt:yuv420p
[scale @ 0x100d026f0] w:1600 h:1200 fmt:yuv420p -> w:960 h:640 fmt:yuv420p flags:0x4
[libx264 @ 0x10100d400] using SAR=1/1
[libx264 @ 0x10100d400] frame MB size (60x40) > level limit (1620)
[libx264 @ 0x10100d400] using cpu capabilities: MMX2 SSE2Fast SSSE3 Cache64 SlowCTZ SlowAtom
[libx264 @ 0x10100d400] profile Constrained Baseline, level 3.0
[mpegts @ 0x10100c200] muxrate VBR, pcr every 1 pkts, sdt every 200, pat/pmt every 40 pkts
Output #0, mpegts, to 'pipe:':
Metadata:
encoder : Lavf52.93.0
Stream #0.0: Video: libx264, yuv420p, 960x640 [PAR 1:1 DAR 3:2], q=10-51, 200 kb/s, 90k tbn, 10 tbc
Stream mapping:
Stream #0.0 -> #0.0
read pmap fffps= 3 q=37.0 size= 37kB time=0.10 bitrate=3008.0kbits/s bits/s
video pid set at 100
found sequence start
next segment value 1026000
written bytes 376 skipped 0
frame= 54 fps= 2 q=-1.0 Lsize= 160kB time=5.40 bitrate= 242.0kbits/s
video:141kB audio:0kB global headers:0kB muxing overhead 12.872737%
frame I:6 Avg QP:34.68 size: 23524
[libx264 @ 0x10100d400] frame P:48 Avg QP:41.53 size: 75
[libx264 @ 0x10100d400] mb I I16..4: 63.9% 0.0% 36.1%
[libx264 @ 0x10100d400] mb P I16..4: 0.1% 0.0% 0.0% P16..4: 0.8% 0.1% 0.0% 0.0% 0.0% skip:99.0%
[libx264 @ 0x10100d400] final ratefactor: 38.54
[libx264 @ 0x10100d400] coded y,uvDC,uvAC intra: 57.7% 22.3% 2.0% inter: 0.0% 0.1% 0.0%
[libx264 @ 0x10100d400] i16 v,h,dc,p: 23% 35% 27% 15%
[libx264 @ 0x10100d400] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 23% 32% 16% 4% 3% 3% 7% 4% 8%
[libx264 @ 0x10100d400] i8c dc,h,v,p: 83% 11% 5% 0%
[libx264 @ 0x10100d400] kb/s:214.43