Jump to content

[SOLVED] Shuffle Problems w/ External Player + Tweaking ET's Native Player + Enabling SVP in Native Player


Invader115
Go to solution Solved by Invader115,

Recommended Posts

Guest asrequested

But you should probably start with this:

hwdec=d3d11va
hwdec-codecs=all

deband
interpolation
video-sync=display-vdrop

log-file="C:\Users\{my name}\Desktop\mpv log.txt"
Edited by Doofus
Link to comment
Share on other sites

Guest asrequested

If you want to get an idea of how to write an mpv.conf, here is mine with some auto-profiles:

gpu-api=auto
hwdec=d3d11va
opengl-pbo
scale=ewa_lanczossharp
dither-depth=10
icc-profile=C:\Windows\System32\spool\drivers\color\My profile 4.icm
deband
deband-iterations=2
saturation=0
brightness=-2
contrast=0
vf=d3d11vpp=deint=no

hwdec-codecs=all

force-seekable=yes

sub-create-cc-track=yes
sub-pos=90
sub-ass-override=no

audio-stream-silence=yes
audio-device=wasapi/marantz (NVIDIA High Definition Audio)
audio-exclusive=yes
af=lavcac3enc=yes:640:2

log-file="D:\mpv logs\Theater mpv log.txt"

[Interlaced]
profile-desc=cond:p["video-frame-info/interlaced"]
vf=d3d11vpp=deint=yes:interlaced-only=yes:mode=adaptive

[720p]
profile-desc=cond:p["video-params/w"]==1280
vf=d3d11vpp=deint=no

[HDR]
profile-desc=cond:p["video-params/primaries"]=="bt.2020"
hdr-compute-peak=no
tone-mapping=mobius
tone-mapping-param=0.2
tone-mapping-desaturate=1
icc-profile=C:\Windows\System32\spool\drivers\color\Adobe RGB (1998) D65 WP 2.2 Gamma.icc
target-peak=200
hwdec=d3d11va
scale=bilinear
vf=d3d11vpp=deint=no
deband
deband-iterations=1
video-sync=audio
contrast=0
saturation=0
brightness=-2
Edited by Doofus
Link to comment
Share on other sites

Invader115

"hqdn3d" is a denoising filter I found in FFMPEG's documentation - which leads me to where I think I went wrong. I was unaware of MPV's own GPU-oriented settings. At some point in MPV's documentation it linked to FFMPEG's video filters and I'd taken that to mean I had to mix and match my settings from there.

 

A simple CTRL+F in MPV's docs led me to the settings you put in the starter mpv.conf you made, revealing the vast supply of settings I should have been using all these hours. Better yet, applying your .conf contents worked like a charm. The enhancements set in without tanking the performance. I should reiterate that 24 hours ago I had literally no experience tinkering with MPV...

 

It's quite late and I'm tired, but at some point tomorrow I'll restart the endeavor with this new knowledge in mind.

 

EDIT: Just saw your new reply. Having a template to go off of will be immensely helpful! That'll give me some direction when I get back to it tomorrow.

Edited by Invader115
Link to comment
Share on other sites

Invader115

It's been a couple days and I've been a lot more successful with my experimentation. I've got a lot of artifact removal working, although the forced noise effect MPV's "Deband" option always applies is annoying. Even setting "deband-grain=0" doesn't totally remove it. "Deband" does everything I want and then messes things up in its own way; I'm still looking for ways around that.

 

Interpolation and upscaling have shown progress, but both still have issues I've yet to smooth out. Interpolation is just going to take some trial-and-error experimenting, and upscaling's pretty great aside from some aliasing. Each of those will get some attention later. A MadVR effect I used to use, "Thin Edges", has yet to be replicated in my configuration for MPV, but I haven't done much research into that yet. It was an important effect, especially for standard-def content (trimming off parts of the image let MadVR replace it with something sharper and better-looking) but I expect it's possible.

 

That's progress so far. The tinkering goes on.

Link to comment
Share on other sites

Invader115

EDIT: Turns out the 7 MB, 4K screenshots I posted got compressed when I attached them to the post. They're mostly useless now... gotta see them pristine and uncompressed for it to make sense.

 

 

It's way too late for me to be awake, but that also means it's too late for anything to distract me from comparing subtle differences between video frames.

 

 

So, the first attachment is my "goal" frame, which was originally 1920x1080 with fairly pronounced compression artifacts. The attached frame was rendered with my tried-and-true MPC-BE + MadVR combo, with it set to my "maximum effectiveness" preset. This is my configuration of MadVR at its best. Ideally, MPV would match this as closely as possible. (Note: motion smoothing is disabled here, as none is present in my MPV yet. No artifacts from that, then.)

 

It just looks "right", doesn't it? What little artifacting is still there exists only because my hardware can't be pushed that far. It doesn't really matter, though, because the whole frame looks sharp and clean. That level of artifacting will only be noticed on occasion by a trained eye.

 

--------------------

 

Now, the second attachment. This is my best attempt with MPV so far, but there's a pretty substantial gulf between this and the goal -- by my exacting standards, anyway. Disregarding the black bars on the sides, which are just a goof-up from when I took the screenshot, you can see much more visible compression artifacts on the flat-colored wall in the background, and the rest of the image is generally softer. The way I'd describe it is "out of focus".

 

I'll admit that I get used to this configuration when I stop staring at an individual frame and let the video roll, but when I later return to MadVR and watch something, the higher picture quality is immediately clear. Since this is using MPV, I'll share the mpv.conf used to render this below:

 

 

hwdec=d3d11va-copy
hwdec-codecs=all
opengl-pbo


deband
deband-iterations=4
deband-threshold=128
deband-range=1
deband-grain=0


vf=hqdn3d:luma_spatial=20.0:chroma_spatial=20.0:chroma_tmp=0.01:luma_tmp=0.01


sigmoid-upscaling
sigmoid-center=1.0
sigmoid-slope=19
scale=ewa_lanczossharp
scale-radius=1


force-seekable=yes
video-sync=display-vdrop

log-file="C:\Users\{my name}\Desktop\mpv log.txt"

 

 

There are two separate artifact removal tools in use there, but that's deliberate. Their combined effect is noticeably better than either on its own, and the FFMPEG-based tool is necessary to remove the stupid noise effect MPV's tool adds. Some of the rest is just me spitballing, and I'm only loosely aware what most of these things actually do; configuring MPV has been more about picking a frame to judge by, and going back-and-forth between Notepad++ and Emby Theater judging what helps and what doesn't.

 

 

My confidence in MPV is somewhat shaken. I've put in several hours total messing with this, and I've yet to get the scaling on MadVR's level of unaliased sharpness. The "thin edges" effect I mentioned before is in use in the MadVR frame I shared, and it's responsible for much of the sharpness. My research has yet to reveal a way to replicate this in MPV; FFMPEG has a filter along these lines, but activating it annihilates MPV's performance.

 

Artifact removal would already be solved if I could find a way to avoid adding grain with the "Deband" MPV setting. Unfortunately, the artifact removal strength in the attached MPV frame is the best I can manage, based on around an hour of tinkering solely with those settings. In my experience, pushing them further than this only results in new artifacts.

 

Interpolation hasn't been tinkered with yet, but I generally consider that a lower priority than the rest.

 

 

Anyway, I'm not done messing with this but I'm steadily running out of ideas. More research will reveal more options, I'm sure, but it's not going great so far. Better than it was a couple days ago, but still far from the finish line.

post-240514-0-12485300-1569828907_thumb.png

post-240514-0-04947100-1569829504_thumb.png

Edited by Invader115
Link to comment
Share on other sites

Guest asrequested

For this level of testing, you should be using mpv as a standalone. You can use frame advance to force a redraw and be able to take a capture of the rendered frame, instead of the desktop. Maybe post a question for the mpv guys?

Link to comment
Share on other sites

Guest asrequested

And I don't agree with you on noise removal. You're testing with animation, which is a poor source to test with. If you smooth out the image that much with  skin on actual people, it doesn't look very good. Some grain, is desirable. More texture, more life-like.

Link to comment
Share on other sites

Invader115

I'm sure you're right about that; with MadVR I have several presets mapped to different keys, geared for different types of content. I chose animation as my testbed because many of the shows I watch on a regular basis are animated, and I'm particularly fond of the improvements I was able to apply to them in my old setup.

 

I can pick some live-action content to test with as well, but my intention was to nail down animated content before doing it all over again for live-action stuff. Perhaps I should flip that around, though, because with the MPV tools I've already figured out it's probably far easier to match MPV's live-action enhancements with what I'm used to.

 

 

Also, I'll take your advice and test using standalone MPV. I was going through Emby Theater because all my content is on a separate machine, but it won't be hard to transfer over some samples for testing.

Link to comment
Share on other sites

Guest asrequested

Ah, yeah, having different configs for different media types would make sense. Then you can set up some auto-profiles, if there is a property that matches. I've done that for a few. I was just looking at the list of filters available. So many to choose from:

  addroi           Add region of interest to frame.
  amplify          Amplify changes between successive video frames.
  ass              Render ASS subtitles onto input video using the libass library.
  atadenoise       Apply an Adaptive Temporal Averaging Denoiser.
  avgblur          Apply Average Blur filter.
  bbox             Compute bounding box for each frame.
  bench            Benchmark part of a filtergraph.
  bitplanenoise    Measure bit plane noise.
  blackdetect      Detect video intervals that are (almost) black.
  blackframe       Detect frames that are (almost) black.
  boxblur          Blur the input.
  bwdif            Deinterlace the input image.
  chromahold       Turns a certain color range into gray.
  chromakey        Turns a certain color into transparency. Operates on YUV colors.
  chromashift      Shift chroma.
  ciescope         Video CIE scope.
  codecview        Visualize information about some codecs.
  colorbalance     Adjust the color balance.
  colorchannelmixer Adjust colors by mixing color channels.
  colorkey         Turns a certain color into transparency. Operates on RGB colors.
  colorhold        Turns a certain color range into gray. Operates on RGB colors.
  colorlevels      Adjust the color levels.
  colormatrix      Convert color matrix.
  colorspace       Convert between colorspaces.
  convolution      Apply convolution filter.
  copy             Copy the input video unchanged to the output.
  cover_rect       Find and cover a user specified object.
  crop             Crop the input video.
  cropdetect       Auto-detect crop size.
  cue              Delay filtering to match a cue.
  curves           Adjust components curves.
  datascope        Video data analysis.
  dctdnoiz         Denoise frames using 2D DCT.
  deband           Debands video.
  deblock          Deblock video.
  dedot            Reduce cross-luminance and cross-color.
  deflate          Apply deflate effect.
  deflicker        Remove temporal frame luminance variations.
  deinterlace_qsv  QuickSync video deinterlacing
  dejudder         Remove judder produced by pullup.
  delogo           Remove logo from input video.
  derain           Apply derain filter to the input.
  deshake          Stabilize shaky video.
  despill          Despill video.
  detelecine       Apply an inverse telecine pattern.
  dilation         Apply dilation effect.
  doubleweave      Weave input video fields into double number of frames.
  drawbox          Draw a colored box on the input video.
  drawgraph        Draw a graph using input video metadata.
  drawgrid         Draw a colored grid on the input video.
  drawtext         Draw text on top of video frames using libfreetype library.
  edgedetect       Detect and draw edge.
  elbg             Apply posterize effect, using the ELBG algorithm.
  entropy          Measure video frames entropy.
  eq               Adjust brightness, contrast, gamma, and saturation.
  erosion          Apply erosion effect.
  fade             Fade in/out input video.
  fftdnoiz         Denoise frames using 3D FFT.
  fftfilt          Apply arbitrary expressions to pixels in frequency domain.
  field            Extract a field from the input video.
  fieldhint        Field matching using hints.
  fieldorder       Set the field order.
  fillborders      Fill borders of the input video.
  find_rect        Find a user specified object.
  floodfill        Fill area with same color with another color.
  format           Convert the input video to one of the specified pixel formats.
  fps              Force constant framerate.
  framerate        Upsamples or downsamples progressive source between specified frame rates.
  framestep        Select one frame every N frames.
  freezedetect     Detects frozen video input.
  fspp             Apply Fast Simple Post-processing filter.
  gblur            Apply Gaussian Blur filter.
  geq              Apply generic equation to each pixel.
  gradfun          Debands video quickly using gradients.
  graphmonitor     Show various filtergraph stats.
  greyedge         Estimates scene illumination by grey edge assumption.
  hflip            Horizontally flip the input video.
  histeq           Apply global color histogram equalization.
  histogram        Compute and draw a histogram.
  hqdn3d           Apply a High Quality 3D Denoiser.
  hqx              Scale the input by 2, 3 or 4 using the hq*x magnification algorithm.
  hue              Adjust the hue and saturation of the input video.
  hwdownload       Download a hardware frame to a normal frame
  hwmap            Map hardware frames
  hwupload         Upload a normal frame to a hardware frame
  hwupload_cuda    Upload a system memory frame to a CUDA device.
  idet             Interlace detect Filter.
  il               Deinterleave or interleave fields.
  inflate          Apply inflate effect.
  interlace        Convert progressive video into interlaced.
  kerndeint        Apply kernel deinterlacing to the input.
  lagfun           Slowly update darker pixels.
  lenscorrection   Rectify the image by correcting for lens distortion.
  limiter          Limit pixels components to the specified range.
  loop             Loop video frames.
  lumakey          Turns a certain luma into transparency.
  lut              Compute and apply a lookup table to the RGB/YUV input video.
  lut1d            Adjust colors using a 1D LUT.
  lut3d            Adjust colors using a 3D LUT.
  lutrgb           Compute and apply a lookup table to the RGB input video.
  lutyuv           Compute and apply a lookup table to the YUV input video.
  maskfun          Create Mask.
  mcdeint          Apply motion compensating deinterlacing.
  mestimate        Generate motion vectors.
  metadata         Manipulate video frame metadata.
  minterpolate     Frame rate conversion using Motion Interpolation.
  mpdecimate       Remove near-duplicate frames.
  negate           Negate input video.
  nlmeans          Non-local means denoiser.
  nnedi            Apply neural network edge directed interpolation intra-only deinterlacer.
  noformat         Force libavfilter not to use any of the specified pixel formats for the input to the next filter.
  noise            Add noise.
  normalize        Normalize RGB video.
  null             Pass the source unchanged to the output.
  oscilloscope     2D Video Oscilloscope.
  owdenoise        Denoise using wavelets.
  pad              Pad the input video.
  palettegen       Find the optimal palette for a given stream.
  perms            Set permissions for the output video frame.
  perspective      Correct the perspective of video.
  phase            Phase shift fields.
  pixdesctest      Test pixel format definitions.
  pixscope         Pixel data analysis.
  pp               Filter video using libpostproc.
  pp7              Apply Postprocessing 7 filter.
  prewitt          Apply prewitt operator.
  pseudocolor      Make pseudocolored video frames.
  pullup           Pullup from field sequence to frames.
  qp               Change video quantization parameters.
  random           Return random frames.
  readeia608       Read EIA-608 Closed Caption codes from input video and write them to frame metadata.
  readvitc         Read vertical interval timecode and write it to frame metadata.
  realtime         Slow down filtering to match realtime.
  removegrain      Remove grain.
  removelogo       Remove a TV logo based on a mask image.
  repeatfields     Hard repeat fields based on MPEG repeat field flag.
  reverse          Reverse a clip.
  rgbashift        Shift RGBA.
  roberts          Apply roberts cross operator.
  rotate           Rotate the input image.
  sab              Apply shape adaptive blur.
  scale            Scale the input video size and/or convert the image format.
  scale_qsv        QuickSync video scaling and format conversion
  selectivecolor   Apply CMYK adjustments to specific color ranges.
  sendcmd          Send commands to filters.
  separatefields   Split input video frames into fields.
  setdar           Set the frame display aspect ratio.
  setfield         Force field for the output video frame.
  setparams        Force field, or color property for the output video frame.
  setpts           Set PTS for the output video frame.
  setrange         Force color range for the output video frame.
  setsar           Set the pixel sample aspect ratio.
  settb            Set timebase for the video output link.
  showinfo         Show textual information for each video frame.
  showpalette      Display frame palette.
  shuffleframes    Shuffle video frames.
  shuffleplanes    Shuffle video planes.
  sidedata         Manipulate video frame side data.
  signalstats      Generate statistics from video analysis.
  smartblur        Blur the input video without impacting the outlines.
  sobel            Apply sobel operator.
  spp              Apply a simple post processing filter.
  sr               Apply DNN-based image super resolution to the input.
  stereo3d         Convert video stereoscopic 3D view.
  subtitles        Render text subtitles onto input video using the libass library.
  super2xsai       Scale the input by 2x using the Super2xSaI pixel art algorithm.
  swaprect         Swap 2 rectangular objects in video.
  swapuv           Swap U and V components.
  tblend           Blend successive frames.
  telecine         Apply a telecine pattern.
  thumbnail        Select the most representative frame in a given sequence of consecutive frames.
  tile             Tile several successive frames together.
  tinterlace       Perform temporal field interlacing.
  tlut2            Compute and apply a lookup table from two successive frames.
  tmix             Mix successive video frames.
  tonemap          Conversion to/from different dynamic ranges.
  tpad             Temporarily pad video frames.
  transpose        Transpose input video.
  trim             Pick one continuous section from the input, drop the rest.
  unsharp          Sharpen or blur the input video.
  uspp             Apply Ultra Simple / Slow Post-processing filter.
  v360             Convert 360 projection of video.
  vaguedenoiser    Apply a Wavelet based Denoiser.
  vectorscope      Video vectorscope.
  vflip            Flip the input video vertically.
  vfrdet           Variable frame rate detect filter.
  vibrance         Boost or alter saturation.
  vignette         Make or reverse a vignette effect.
  vmafmotion       Calculate the VMAF Motion score.
  vpp_qsv          Quick Sync Video VPP.
  w3fdif           Apply Martin Weston three field deinterlace.
  waveform         Video waveform monitor.
  weave            Weave input video fields into frames.
  xbr              Scale the input using xBR algorithm.
  yadif            Deinterlace the input image.
  zoompan          Apply Zoom & Pan effect.
  zscale           Apply resizing, colorspace and bit depth conversion.
  fifo             Buffer input images and send them when they are requested.

If libavfilter filters clash with builtin mpv filters,
prefix them with lavfi- to select the libavfilter one.
Link to comment
Share on other sites

Guest asrequested

Interesting note at the end, there. Might be worth trying the lavfi- prefix

vf=lavfi-hqdn3d
Edited by Doofus
Link to comment
Share on other sites

Invader115

I've made substantial progress toward artifact reduction for animation. This progress was made in part with the help of an anime enthusiast's blog, in which he goes in-depth with settings he uses. I don't watch anime, but the settings seem valid for animation in general. Here's a link for those who are interested: https://iamscum.wordpress.com/guides/videoplayback-guide/mpv-conf/ (Much more helpful than the blog's name would suggest...)

 

In the blog are links and references to user-maintained shaders that can be applied to MPV. I'm using some of them now, but so far I'm unable to quantify their effect. Artifacting has still been my main priority, and the shaders are mostly geared toward scaling.

 

 

Here's my current mpv.conf:

 

 


# These are for ease of use while testing
volume=0
sub=no

# Lets SVP "catch" MPV's playback
input-ipc-server=mpvpipe

profile=gpu-hq
gpu-api=vulkan

hwdec=nvdec-copy
hwdec-codecs=all



dither-depth=auto
dither=error-diffusion
error-diffusion=jarvis-judice-ninke

deband
deband-iterations=4
deband-threshold=32
deband-range=1
deband-grain=0

vf=lavfi-hqdn3d:luma_spatial=5.0:chroma_spatial=5.0:chroma_tmp=1.75:luma_tmp=1.75



scale=ewa_lanczossharp
scale-radius=6

cscale=ewa_lanczossharp
cscale-radius=6

dscale=ewa_lanczossharp


glsl-shader="C:\MPV Shaders\mpv-prescalers-master\vulkan\ravu-lite-r4.hook"
glsl-shader="C:\MPV Shaders\mpv-prescalers-master\vulkan\ravu-zoom-r4-chroma.hook"


fbo-format=rgba16hf
no-scaler-resizes-only



force-seekable=yes
video-sync=display-vdrop

log-file="C:\Users\{name}\Desktop\MPV\mpv log.txt"

 

 

Using the same scene I posted screenshots of before, the artifacting in MPV is massively reduced. The only significant "artifacts" are the bits of grain that get added, but I've reduced that to the best of my ability. I have a hunch that whatever solution I find for scaling may help alleviate that, especially if I can get the "thin edges" thing replicated.

 

I've got to start figuring out scaling now, but that may be the last stage. It's possible I've made progress toward interpolation via SVP; if I have in fact found a solution that can be used within Emby Theater, this will be an infinitely easier solution than replicating SVP on my own. That needs more testing, though.

 

 

The "lavfi-" prefix that you spotted, Doofus, has a visible impact. It reduced extra artifacts created by "hqdn3d" enough that I was able to reconfigure the balance between it and MPV's own filter, essentially erasing the problems it once introduced.

Edited by Invader115
Link to comment
Share on other sites

Guest asrequested

You won't be able to use gpu-api=vulkan in Theater in fullscreen. It requires exclusivity, and the UI doesn't allow that. The UI will disappear and it will screw with the window.

 

You can only use d3d11

Edited by Doofus
Link to comment
Share on other sites

Invader115

You won't be able to use gpu-api=vulkan in Theater in fullscreen. It requires exclusivity, and the UI doesn't allow that. The UI will disappear and it will screw with window.

 

You can only use d3d11

 

Oof, that's a big problem for me. Vulkan gives a massive performance boost that I need to run these enhancements. Changing to d3d11 seems to cut the output framerate at least in half.

 

Also, I have stopped using sharpened lanczos scaling. The sharpness did seem to be excessive.

 

 

EDIT: Final thought before I finally go to sleep: borderless windowed mode.

 

Many PC games have the option to use a faux-fullscreen mode where the game runs in a window, scaled to fill the display and set to always be in focus (and, of course, without the border most windows have). Such games cover the Windows taskbar and everything else, providing an identical user experience to running in true fullscreen -- but with improvements like easy, reliable ALT+TAB usage (fullscreen games struggle with this), better recoverability after a major game error, and other such benefits.

 

Since programs running in this mode are technically windowed, that would totally sidestep the fullscreen compatibility problem with Vulkan. The issue is that ET doesn't have this feature, as far as I'm aware.

Edited by Invader115
Link to comment
Share on other sites

Guest asrequested

There's a history of issues with Theater around it's window management. The way it is now is actually an improvement over what was, but there are still issues. I believe a rework of the UI is planned. I'm hoping that Luke finds a way to allow full screen exclusivity, because looking at mpv's planned development, they are going to have all GPU API's use require full screen exclusivity. Certain functionalities will require it. You can't use cuda or nvdec without using vulkan or opengl. I always used opengl, but when the present change was made, I could no longer use it. Of course you can still run mpv as an external player, but that's a trade off, too.

Link to comment
Share on other sites

Invader115

Well, I'm glad it's on the development radar. I can shift my effort over to live-action content enhancements for now, but I imagine I'll focus a lot less on tweaking MPV until it's possible to get my configuration working smoothly with Emby Theater.

 

I could use MPV as an external player, but I've already got MPC-BE and MadVR fully configured for use that way, so I'll probably just continue using that for now until I can continue the transition to the native player.

 

 

By the way, I messed with SVP motion smoothing some more and got it working reliably with MPV, but it stops working when Emby Theater is put into the mix.

 

My testbed copy of MPV is the one compiled by SVP's developers. It works with SVP just fine, but when I copy/paste that MPV (and all its related files) into Emby Theater and use it in place of what ET shipped with, the SVP motion smoothing goes away. I've got no idea what inner workings are causing this behavior; all I know is that running MPV via Emby Theater is pinned down as what makes the smoothing stop kicking in.

 

That makes it look like Emby Theater's the culprit, but I also imagine these things are far more complicated than they seem.

Edited by Invader115
Link to comment
Share on other sites

Guest asrequested

It might be because Theater also uses a pipe. There are few open issues with vapoursynth. I've never messed with SVP, but I believe that @jscoys uses it???

Link to comment
Share on other sites

  • Solution
Invader115

FIRST, the work-around that made shuffling with an external player tolerable:

 

It's a slight adjustment to how I was already using the external player with shuffling. My complaint was that ET would relaunch my external player and shuffle episodes after I was done watching, and there was no elegant way to stop it shuffling into infinity. Well, get this: all I had to do was keep the external player open. Incredible.

 

After watching the shuffled episode, keeping the player open and paused lets me navigate back to Emby Theater and browse my library for something different to watch, rather than fighting an infinite loop of episodes. When I find and play a separate, non-shuffled media item, the external player's still-open instance will cleanly unload the unwanted episode and load in the new one, no problem! Closing the player after this new non-shuffled item is loaded works normally, no infinite loops or anything.

 

              Some problems that still exist after doing this:

 

 

IT'S NOT ALL GOOD, though. You can NEVER run two shuffles on the same instance of an external player. Say I shuffle Show A, then I pause the external player (leaving it open) and browse to Show B. Were I to manually select an episode from Show B, it would load into the player just fine. If I were to instead shuffle Show B, things go haywire. I'm not sure how to explain what goes wrong other than "chaos". At one point tinkering with this I got ET to open and run two separate instances of the external player that each had different episodes, both of which were subject to infinite looping. When this happens, I have to close ET to reset everything.

 

What does work is shuffling Show A, pausing the player and leaving it open while I pick and run a non-shuffled episode from Show B, and then closing the player when I'm done with Show B's episode. I can then browse the same instance of ET that's been open this whole time and shuffle Show C without issue. That's because Show C is running on a different external player instance than Show A and Show B were.

 

 

So, shuffling more than once isn't the easiest thing in the world, but I have a hunch I could smooth the process out a little. A hotkey to briefly load a small video file from the local machine before closing and restarting the external player, maybe? Anyway, I'm calling this firmly "good enough". Huge thanks to Doofus and Luke, who were incredibly helpful and attentive trying to make Emby Theater work for me.

 

--------------------------------------------------

 

SECOND, the MPV configuration I created while trying to transition to Emby Theater's native player:    (Updated Oct. 6, 2019)

 

My adventures with MPV were a mix of fun and tedious, and even though I didn't end up using what I created I'll share my final mpv.conf's contents for those who are interested. I got artifact removal and scaling impressively close to MadVR with a select few media items, and I'm confident it's possible to get MPV a lot closer to MadVR than I did.

 

PREVIOUSLY, I THOUGHT these enhancements couldn't be run without setting MPV to use the Vulkan API, but it seems that was my relative lack of knowledge showing. Doofus suggested adding a simple line to the config, "opengl-pbo", to improve performance. That may very well have helped, and you'll see it in my updated config below, but after tinkering some more I made other changes that got performance where it needed to be without Vulkan.

 

The quality still isn't on par with MadVR, but it's about where it was before, albeit with some settings removed that should never have been there.

 

 

# These are for ease of use while testing
volume=0
sub=no

# Lets SVP "catch" MPV's playback
input-ipc-server=mpvpipe


profile=gpu-hq
gpu-api=d3d11

hwdec=nvdec-copy
hwdec-codecs=all

opengl-pbo


dither-depth=auto
dither=error-diffusion
error-diffusion=sierra-lite

deband
deband-iterations=4
deband-threshold=32
deband-range=1
deband-grain=0

vf=lavfi-hqdn3d:luma_spatial=5.0:chroma_spatial=5.0:chroma_tmp=1.75:luma_tmp=1.75,lavfi-dilation:12:.8:.8:.8


sigmoid-upscaling
sigmoid-center=1.0
sigmoid-slope=10

scale=ewa_lanczos
scale-radius=10

cscale=ewa_lanczos
cscale-radius=10

dscale=ewa_lanczos


glsl-shader="C:\MPV Shaders\mpv-prescalers-master\vulkan\ravu-lite-r4.hook"
glsl-shader="C:\MPV Shaders\mpv-prescalers-master\vulkan\ravu-zoom-r4-chroma.hook"


fbo-format=rgba16hf
no-scaler-resizes-only



force-seekable=yes
video-sync=display-vdrop

log-file="C:\mpv log.txt"

 

 

Major changes between this and the config I originally posted: the sharpen filter has been removed, because it was never supposed to be there -- I was messing around with it at the same time I learned how to use external players properly, so it wasn't removed before posting -- and it's been changed to use D3D11 instead of Vulkan, with the aforementioned "opengl-pbo" setting added.
 

The video filter for "dilation" is how I accomplished the "thin edges" effect I mentioned numerous times in this thread. Tweaking the "dilation" filter can be difficult, as it's easy to leave an annoying halo around the edges, but the values in the above config seemed very good to me.

 

 

Remember this config was solely geared toward animated content, which requires very aggressive filtering to reach the standard I wanted. Live-action content will not look right with these values set.

 

ABOVE ALL ELSE, remember that I DO NOT consider the above config "finished" and that it's only there for use as a foundation. Anyone interested in pushing MPV's limits will have to do a lot of tinkering and testing of their own. Moreover, I do not intend to keep messing around with this because I've got my old MPC-BE + MadVR + SVP configuration working without the problem I made this thread for.

 

The main lingering problems are bits of ringing around animated edges and incredibly persistent blocking artifacts in the same places. Live-action content is probably well within reach of MPV, but animation was always my goal specifically because it's more difficult to enhance than live-action.

 

 

It's important to consider system specs, because performance WILL vary. My GPU is an Nvidia RTX 2080 Ti, which is about king of the hill right now. My CPU, on the other hand, is what I'd call "upper-mid range", or "lower-upper range". It's an AMD Ryzen 7 2700X, and even though it's a fantastic processor there are still models out there that blow it away.

 

The point is that performance will vary wildly between computers, and the "horsepower" of your computer is what determines the level of enhancements you can achieve. My previous GPU was an Nvidia GTX 1080 Ti - another hugely powerful video card - but there are many enhancements I can use now that I couldn't use with even that serious piece of hardware. Unless you have exactly the same specs as my computer, your experience WILL be different from what this post is based around.

 

--------------------------------------------------

 

THIRD AND LAST, how I got SVP motion smoothing working with Emby Theater's native player:

 

In my MPC-BE + MadVR setup, I also use SVP motion smoothing for powerful and highly-configurable interpolation. It seemed for a while that it wouldn't be possible to use this with Emby Theater's native player, but Doofus found some information online that got this working.

 

Follow the instructions provided by SVP developer Chainik in this thread: https://www.svp-team.com/forum/viewtopic.php?pid=65221#p65221 using information provided in this (Plex-oriented) documentation page: https://www.svp-team.com/wiki/SVP:Plex_Media_Player to get SVP to detect and process your Emby Theater native player.

Edited by Invader115
Link to comment
Share on other sites

Invader115

 

Hey, that worked! I was planning to restructure the post I marked as the solution for easier readability (mainly for people who find this thread through Google). I'll add this solution to it for anyone looking to amp up the default player.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...