首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从ffmpeg获取错误的输出分辨率或FPS

从ffmpeg获取错误的输出分辨率或FPS
EN

Stack Overflow用户
提问于 2011-10-29 11:05:16
回答 1查看 1.8K关注 0票数 1

我正在从安全摄像头捕获RTSP流,并使用OSX作为编码平台将其转码为(直播)到iphone。我让它正常工作,我正在调优它。但是,它似乎没有输出所请求的分辨率。这是我的脚本

代码语言:javascript
复制
/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

这是状态报告:

代码语言:javascript
复制
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 (为什么?I‘m强制输入和输出!)并且它在54帧后停止(见下面的输出)

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-05 13:12:03

正如你所猜到的,-vcodec copy并不意味着“使用相同类型的编码”,它意味着“原封不动地传递数据”。您正在设置的无数其他选项都不会对设置为copy的编解码器执行任何操作。

我假设将它设置为libx264,从而实际对视频进行转码,会减慢它的速度,因为现在它必须做很多工作。特别是当输入视频为1600x1200 h264时。

根据您的需求,在显示点伸缩肯定比转码快,否则请继续调优。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7936738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档