使用ffmpeg加快流录制的开始

时间:2014-01-15 13:24:16

标签: stream ffmpeg video-capture

我尝试录制视频流(来自网络或本地网络摄像头流)并将其保存为.mp4 / .flv文件。我使用FFmpeg的版本为“N-59696-gc0a33c4”。

问题不在于录制流,而是记录开始录制所需的日志。

这是我用来捕获流的参数(流是我在网上找到的一些随机流):

ffmpeg.exe -i mmsh://live.camstreams.com/cscamscape?MSWMExt=.asf -r 25 -t 60 C:\temp\video.mp4

并导致此输出:

ffmpeg.exe -i mmsh://live.camstreams.com/cscams
cape?MSWMExt=.asf -r 25 -t 60 C:\temp\video.mp4
ffmpeg version N-59696-gc0a33c4 Copyright (c) 2000-2014 the FFmpeg developers
  built on Jan  8 2014 22:01:50 with gcc 4.8.2 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-av
isynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enab
le-iconv --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetyp
e --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --ena
ble-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-l
ibopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libsp
eex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aa
cenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavp
ack --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
  libavutil      52. 62.100 / 52. 62.100
  libavcodec     55. 47.100 / 55. 47.100
  libavformat    55. 22.102 / 55. 22.102
  libavdevice    55.  5.102 / 55.  5.102
  libavfilter     4.  0.103 /  4.  0.103
  libswscale      2.  5.101 /  2.  5.101
  libswresample   0. 17.104 /  0. 17.104
  libpostproc    52.  3.100 / 52.  3.100
[wmv3 @ 0275db40] Extra data: 8 bits left, value: 0
Input #0, asf, from 'mmsh://live.camstreams.com/cscamscape?MSWMExt=.asf':
  Metadata:
    title           : Live Fish Cam
    WMFSDKNeeded    : 0.0.0.0000
    DeviceConformanceTemplate: SP
    WMFSDKVersion   : 11.0.5721.5275
    IsVBR           : 0
  Duration: N/A, start: 3887858.274000, bitrate: 512 kb/s
    Stream #0:0(eng): Video: wmv3 (Simple) (WMV3 / 0x33564D57), yuv420p, 640x360
, 512 kb/s, 62.50 tbr, 1k tbn, 1k tbc
[libx264 @ 0275e400] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
[libx264 @ 0275e400] profile High, level 3.0
[libx264 @ 0275e400] 264 - core 140 r2377 1ca7bb9 - H.264/MPEG-4 AVC codec - Cop
yleft 2003-2013 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deb
lock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 m
e_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chro
ma_qp_offset=-2 threads=12 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1
interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1
 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scene
cut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin
=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
[wmv3 @ 0275db40] Extra data: 8 bits left, value: 0
Output #0, mp4, to 'C:\temp\video.mp4':
  Metadata:
    title           : Live Fish Cam
    WMFSDKNeeded    : 0.0.0.0000
    DeviceConformanceTemplate: SP
    WMFSDKVersion   : 11.0.5721.5275
    IsVBR           : 0
    encoder         : Lavf55.22.102
    Stream #0:0(eng): Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 6
40x360, q=-1--1, 12800 tbn, 25 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (wmv3 -> libx264)
Press [q] to stop, [?] for help
frame=  148 fps=0.0 q=28.0 size=     228kB time=00:00:03.60 bitrate= 518.3kbits/
frame=  151 fps=117 q=28.0 size=     236kB time=00:00:03.72 bitrate= 519.2kbits/
frame=  178 fps= 91 q=28.0 size=     298kB time=00:00:04.80 bitrate= 508.3kbits/
frame=  204 fps= 64 q=28.0 size=     347kB time=00:00:05.84 bitrate= 487.4kbits/
... 
... And so on ...

现在的问题是,在我输入命令后,录制开始需要大约6-10秒。

有没有办法加快这个过程?

1 个答案:

答案 0 :(得分:0)

如果你想做出像我一样的解决方案,你可以这样做:

  1. 创建一个应用程序(在我的例子中是 .NET),它使用来自 uniworks(一个 chrome 无头浏览器库)的库 CDP 并使用 ffmpeg。请注意,对于非 .net 解决方案,您也可以找到其他 Chrome Headless 浏览器库。
  2. 现在,通过 CDP 实例化的 chrome 实例加载 url。但是,同样,在加载 URL 之前,请启动 FFMpeg 进程(可能在加载 URL 之前大约 1 到 2 秒)。
  3. 如果操作正确,ffmpeg 进程将加载,然后等待 URL 加载完成,然后记录