[MEncoder-users] Performance on multi core machines - a specific enquiry re avisynth mt input

Michael Rozdoba mroz at ukgateway.net
Sat Sep 29 04:18:18 CEST 2007


First off, I hope this is an appropriate place to post this query. My 
apologies if I'm mistaken.

I'm using mencoder under Windows XP as part of Megui. This is to encode 
to x264 2 pass, however as the input is an avisynth script which is very 
slow I'm performing a pre-render step where mencoder is used to 
transform the source via avisynth into an ffvhuff avi, which is itself 
subsequently passed into the 2 pass x264 encode.

As the avisynth script is slow & avisynth natively doesn't make use of 
multi core cpus I'm using the mt (0.7) extension, which enables 
multithreading & exploitation of all cores.

The script is fine. I can feed it to several players which will render 
it on my Q6600 box at about 11fps at 100% cpu utilisation. Without the 
mt extension I get 3fps at 25% cpu.

I can even used VirtualDubMod & FFDShow to create a huffy avi encode 
from it, again at about 11fps, 100% cpu.

However when I use mencoder it /all/ seems to be restricted to a single 
core & I only get 3fps 25% cpu.

Can anyone explain what's going on & if this problem is unavoidable?

Regardless of whether mencoder performs the huffy encode using multiple 
threads & cores, I did expect the framserving to its input to continue 
to exploit all four cores. Am I naively mistaken?

Any comments, solutions or workarounds gratefully appreciated.


For reference, though it's probably irrelevant, this is the mencoder cmd 
line:

C:\Program Files\megui\tools\mencoder>mencoder.exe 
"E:\Work\test\fm-deblock.avs"
  -o "E:\Work\test\hfyu_fm-deblock.avi" -of avi -forceidx -ovc lavc 
-lavcopts vco
dec=ffvhuff:vstrict=-2:pred=2:context=1


Here's the full output:

MEncoder dev-SVN-r23107-4.3.0 (C) 2000-2007 MPlayer Team
CPU: Intel(R) Core(TM)2 Quad CPU    Q6600  @ 2.40GHz (Family: 6, Model: 
15, Step
ping: 11)
CPUflags: Type: 6 MMX: 1 MMX2: 1 3DNow: 0 3DNow2: 0 SSE: 0 SSE2: 0
Compiled with runtime CPU detection.
success: format: 0  data: 0x0 - 0x605
AVS file format detected.
VIDEO:  [YV12]  720x576  12bpp  25.000 fps    0.0 kbps ( 0.0 kbyte/s)
[V] filefmt:38  fourcc:0x32315659  size:720x576  fps:25.00  ftime:=0.0400
Opening video filter: [expand osd=1]
Expand: -1 x -1, -1 ; -1, osd: 1, aspect: 0.000000, round: 1
==========================================================================
Opening video decoder: [raw] RAW Uncompressed Video
VDec: vo config request - 720 x 576 (preferred colorspace: Planar YV12)
VDec: using Planar YV12 as output csp (no 0)
Movie-Aspect is undefined - no prescaling applied.
videocodec: libavcodec (720x576 fourcc=48564646 [FFVH])
Selected video codec: [rawyv12] vfm: raw (RAW YV12)
==========================================================================
New_Face failed. Maybe the font path is wrong.
Please supply the text font file (~/.mplayer/subfont.ttf).
subtitle font: load_sub_face failed.
Writing header...
ODML: Aspect information not (yet?) available or unspecified, not 
writing vprp h
eader.
Writing header...
ODML: Aspect information not (yet?) available or unspecified, not 
writing vprp h
eader.
Pos:  18.7s    467f ( 0%)  2.89fps Trem:   0min   0mb  A-V:0.000 [33541:0]


And just for completion, here's the avisynth script:

SetMTMode(2,0)
# Set DAR in encoder to 37 : 20. The following line is for automatic 
signalling
global MeGUI_darx = 37
global MeGUI_dary = 20
DGDecode_mpeg2source("E:\Work\test\FM.d2v", info=3)
ColorMatrix(hints=true,interlaced=true)
#Not doing anything because the source is progressive
crop( 0, 0, 0, 0)
# from: http://forum.doom9.org/showthread.php?t=119486&page=2
# Purpose: clean up blocky/noisy mpeg2 source
source = last
backward_vec2 = source.MVAnalyse(isb = true, delta = 2, pel = 2, 
overlap=4, sharp=2, idx = 1, truemotion=true)
backward_vec1 = source.MVAnalyse(isb = true, delta = 1, pel = 2, 
overlap=4, sharp=2, idx = 1, truemotion=true)
forward_vec1 = source.MVAnalyse(isb = false, delta = 1, pel = 2, 
overlap=4, sharp=2, idx = 1, truemotion=true)
forward_vec2 = source.MVAnalyse(isb = false, delta = 2, pel = 2, 
overlap=4, sharp=2, idx = 1, truemotion=true)
mask = mvmask(kind=1, 
vectors=forward_vec1).UtoY().spline36resize(source.width(), source.height())
smooth = source.degrainmedian(mode=3).fft3dfilter(bw=16, bh=16, bt=3, 
sigma=4, plane=0)
source2 = mt_merge(source, smooth, mask)
source3 = 
source2.MVDegrain2(backward_vec1,forward_vec1,backward_vec2,forward_vec2,thSAD=400,idx=2)
source3.gradfun2db(1.5)
# Trim to a short clip for test purposes
__film = last
__t0 = __film.trim(120776, 122325)
__t0


-- 
Michael Rozdoba



More information about the MEncoder-users mailing list