Windows Entertainment and Connected Home

How to organize, access and enjoy all of your media in and around your home

Transcode360 and updated VLCtranscoder.cs

  • rated by 0 users
  • This post has 68 Replies |
  • 7 Followers
Page 1 of 5 (69 items) 12345
  •  
    Has anybody updated or found the latest VLCtranscoder.cs file?  I can't seem to get VLC to work.  I can get MEncoder to work, but that hasn't been updated in a LONG time and I'm getting tired of the jitters when transcoding .iso files...


  •  
    Try the latest mencoder-mt.exe builds.  They are multithreaded and work great with multi-core processors.

    The easiest way to get the latest version is to download the latest PS3 media server here:

    http://code.google.com/p/ps3mediaserver/downloads/list

    Extract the exe for the windows version using 7-zip to a folder.  Inside the folder, you should find FFMPEG and MENCODER-MT.exe.  Rename mencoder-mt.exe to just mencoder.exe and replace the one used by transcode 360.  Also, replace FFPEG.exe.

    After you do that, alter the mencodertranscoder.cs file in the transcode 360 program files folder to enable multi-thread decoding.  (use the lavdopts option with the desired number of threads):

    -lavdopts fast:threads=4:skiploopfilter=all

    After that, you should have a much better experience with transcode 360 and mencoder. 
  •  

    i looked thorugh the mencodertranscoder.cs file and cant find the lavdopts option, am i supposed to add it? Thanks,

    and im trying to update mencoder because on certain avi files when i try to play them i get a blank screen WITH sound. do u think this would fix that issue?

  •  
    leonowski:
    Try the latest mencoder-mt.exe builds.  They are multithreaded and work great with multi-core processors.

    The easiest way to get the latest version is to download the latest PS3 media server here:

    http://code.google.com/p/ps3mediaserver/downloads/list

    Extract the exe for the windows version using 7-zip to a folder.  Inside the folder, you should find FFMPEG and MENCODER-MT.exe.  Rename mencoder-mt.exe to just mencoder.exe and replace the one used by transcode 360.  Also, replace FFPEG.exe.

    After you do that, alter the mencodertranscoder.cs file in the transcode 360 program files folder to enable multi-thread decoding.  (use the lavdopts option with the desired number of threads):

    -lavdopts fast:threads=4:skiploopfilter=all

    After that, you should have a much better experience with transcode 360 and mencoder. 


    Any chance of posting the full contents of your mencodertranscoder.cs file?
  •  
    sure - here you go.  I removed the other lavdopts and only used threads=4 now:

    /************************************************************************
     * Transcode 360                                                        *
     * Copyright (c) 2006 Albert Griscti-Soler                              *
     * Patches by: Bernard Maltais                                          *
     *                                                                      *
     * This program is free software; you can redistribute it and/or modify *
     * it under the terms of the GNU General Public License as published by *
     * the Free Software Foundation; either version 2 of the License, or    *
     * (at your option) any later version.                                  *
     *                                                                      *
     * This program is distributed in the hope that it will be useful, but  *
     * WITHOUT ANY WARRANTY; without even the implied warranty of           *
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the        *
     * GNU General Public License for more details.                         *
     *                                                                      *
     * You should have received a copy of the GNU General Public License    *
     * along with this program; if not, write to the Free Software          *
     * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.            *
     ************************************************************************/

    namespace Transcode360.MEncoderTranscoder
    {
        #region References
        using System;
        using System.IO;
        using System.Globalization;
        using Transcode360.Interface;
        #endregion

        #region Helper Types
       
        public class OutputResolution
        {
            #region Member variables

            private String _displayAspectRatio = "16/9";
            private Single _width = 0;
            private Single _height = 0;

            #endregion

            #region Constructors
           
            public OutputResolution()
            {
            }

            public OutputResolution(Int32 width, Int32 height, String displayAspectRatio)
            {
                this.Width = width;
                this.Height = height;
                _displayAspectRatio = displayAspectRatio;
            }

            #endregion

            #region Properties

            #region Width
            public Int32 Width
            {
                get { return (Int32)_width; }
                set { _width = (Single) value; }
            }
            #endregion

            #region Height
            public Int32 Height
            {
                get { return (Int32)_height; }
                set    { _height = (Single) value; }
            }
            #endregion

            #region Pixels
            public Int32 Pixels
            {
                get
                {
                    return (Int32)_width * (Int32)_height;
                }
            }
            #endregion

            #region AspectRatio
            public Single AspectRatio
            {
                get
                {
                    return (_height>0) ? _width / _height : 0f;
                }
            }
            #endregion

            #region DisplayAspectRatio
            public String DisplayAspectRatio
            {
                get { return _displayAspectRatio; }
                set { _displayAspectRatio = value; }
            }
            #endregion

            #endregion
        }

        #endregion

        /// <summary>
        /// Summary description for MEncoderTranscoder.
        /// </summary>
        public class MEncoderTranscoder : ITranscoder
        {
            #region Member variables
            private ITranscoderHost _host = null;
            private OutputResolution[] _safe_resolutions = null;
            #endregion

            #region Constructor
            public MEncoderTranscoder(ITranscoderHost host)
            {
                _host = host;
                _host.WriteLog( String.Format("{0} loaded", GetName()), ErrorLevel.Verbose );

                _safe_resolutions = new OutputResolution[]
                {
                    new OutputResolution(960,704, "4/3"),
                    new OutputResolution(960,1152, "4/3"),
                    new OutputResolution(1152,640,"16/9"),
                    new OutputResolution(1216,672,"16/9"),
                    new OutputResolution(1248,672,"16/9"),
                    new OutputResolution(1248,704,"16/9"),
                    new OutputResolution(1248,928, "4/3"),
                    new OutputResolution(1280,704,"16/9"),
                    new OutputResolution(1280,736,"16/9"),
                    new OutputResolution(1440,768,"16/9"),
                    new OutputResolution(1440,800,"16/9"),
                    new OutputResolution(1440,832,"16/9"),
                    new OutputResolution(1440,960,"16/9"),
                    new OutputResolution(1440,1152,"16/9"),
                };
            }
            #endregion

            #region ITranscoder Members

            #region GetName
            public String GetName()
            {
                return "MEncoderTranscoder";
            }
            #endregion

            #region Transcode

            public bool Transcode(FileSource source, string bufferFolderPath, out string bufferFilePath)
            {
                String fileNameWithoutExtension = Path.GetFileNameWithoutExtension(source._path);
                String destFilePath = String.Format(@"{0}\{1}.360", bufferFolderPath, fileNameWithoutExtension);

                string arguments = GetArguments(source,ref destFilePath);
                if (_host.SpawnAndManageProcess( String.Format(@"{0}\mencoder.exe",_host.GetTranscoderSetting("Path")), arguments))
                {
                    bufferFilePath = destFilePath;
                    return true;   
                }

                bufferFilePath = null;
                return false;
            }
           
            #endregion

            #region IsTranscoding
            public TranscoderStatus IsTranscoding()
            {
                // You're managing the process, how should I know? I just set 'em up :)
                return TranscoderStatus.Unknown;       
            }
            #endregion

            #region StopTranscoding
            public void StopTranscoding(FileSource source)
            {
                // Thanks for the notification but I don't really care, like I said before
                // the host is managing the process :)
            }
            #endregion

            #endregion

            #region Helper methods

            #region GetArguments
            String GetArguments(FileSource source, ref String bufferFilePath)
            {
                String arguments = null;
                String fileExtension = Path.GetExtension(source._path.ToLower());
                Boolean isDvd = fileExtension == ".iso" ||  fileExtension == ".vol";

                OutputResolution output = null;
                if (_host.GetGlobalSettingAsBoolean("ForceSafeResolution",true))
                {
                    _host.WriteLog( "Using safe best match resolutions", ErrorLevel.Verbose );
                    GetSafeResolution(source,out output);
                }
                else
                {
                    _host.WriteLog( "Using optimal resolutions", ErrorLevel.Verbose );
                    GetOptimalResolution(source,out output);
                }
     
                String fps = null;
                if (source._framerate >= 30.0f)
                {
                      fps = "30";
                }
                else if (source._framerate >= 29.0f && source._framerate < 30.0f)
                {
                      fps = isDvd ? "24000/1001" : "30000/1001";
                }
                else if (source._framerate >= 25.0f && source._framerate < 29.0f)
                {
                      fps = "25";
                }
                else if (source._framerate >= 24.0f && source._framerate < 25.0f)
                {
                      fps = "24";
                }
                else
                {
                      fps = "24000/1001";
                }

                //Override the resolution to a safe resolution if we have a low definition stream this
                //prevents the audio and no picture issues.
                if (output.Height <= 480 && output.Width <= 640)
                {
                    if (output.DisplayAspectRatio == "16/9")
                    //Ok we have what looks to be a 16/9 aspect ratio stream override to safe 16/9 settings
                    {
                        output.Height = 352;
                        output.Width = 640;
                    }
                    else
                    {
                        output.Height = 480;
                        output.Width = 576;
                    }
                }

                String fontPath = String.Format(@"{0}\Fonts\{1}",
                    Directory.GetParent(Environment.SystemDirectory).FullName,
                    _host.GetGlobalSetting("SubtitleFont","arial.ttf") );

                String subtitles = (source._subtitles!=null) ?
                    String.Format("-sub \"{0}\" -font \"{1}\" -subpos {2} -subfont-text-scale {3} -subalign 2 -subfont-outline {4} ",
                    source._subtitles, fontPath,
                    _host.GetGlobalSetting("SubtitlePosition"),
                    _host.GetGlobalSetting("SubtitleSize"),
                    _host.GetGlobalSetting("SubtitleOutline")) : "";

                // Profile specific overrides/settings
                String volume = (source._audio_type==AudioType.AC3 || (!_host.GetGlobalSettingAsBoolean("BoostVolumeOnlyIfAc3",true)))
                    ? String.Format(",volume={0}", _host.GetGlobalSetting("BoostVolume","7.0")) : "";

                String delAVSync     = _host.GetGlobalSetting("AudioVideoSync","0.2");
                String avgVidBitrate = _host.GetProfileSetting("VideoAverageBitrate", source._force_profile_name);
                String maxVidBitrate = _host.GetProfileSetting("VideoMaximumBitrate", source._force_profile_name);
                String cbrAudBitrate = _host.GetProfileSetting("AudioConstantBitrate", source._force_profile_name);
                Boolean downmix         = _host.GetProfileSettingAsBoolean("DownMixAc3ToStereo", source._force_profile_name) ||
                    (!_host.GetGlobalSettingAsBoolean("Ac3DecoderPresent",true));

                // Audio
                String audioArgs = "-oac copy";
                String audioOpts = null;

                if (source._audio_type != AudioType.AC3 || downmix)
                {
                    audioArgs = String.Format("-delay {0} -oac lavc -srate 48000 -af lavcresample=48000{1}", delAVSync, volume );
                    audioOpts = String.Format(":acodec=mp2:abitrate={0}",cbrAudBitrate);
                }
                else
                {
                    _host.SetupAc3Output(source,ref bufferFilePath);

                    if (source._audio_channels == 6 && !isDvd)
                    {
                        // 0 - left, 1 - center, 2 - right, 3 - surround left, 4 - surround right, 5 = lfe
                        audioArgs = String.Format("-delay {0} -oac lavc -channels 6 -af channels=6:6:0:0:4:1:1:2:2:3:3:4:5:5", delAVSync);
                        audioOpts = ":acodec=ac3:abitrate=448";
                    }
                }

                if (source._audio_id>=0)
                {
                    audioArgs += String.Format(" -aid {0}", source._audio_id);               
                }

                // Video
                String videoArgs = null;
                if ((fileExtension == ".vol" || fileExtension == ".iso") && source._subtitle_id<0)
                {
                    videoArgs = String.Format("-ovc copy ");
                }
                else
                {
                videoArgs = String.Format("-lavdopts threads=4 -ovc lavc -vf scale={0}:{1},expand={2}:{3},harddup -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate={4}:vbitrate={5}:keyint=15:aspect={6}{7}:threads=4 {8}-ofps {9}",
                source._width, source._height, output.Width, output.Height, maxVidBitrate, avgVidBitrate, output.DisplayAspectRatio, (audioOpts != null) ? audioOpts : "", subtitles, fps);

                 
                    if (source._subtitle_id>=0)
                    {
                        videoArgs += String.Format(" -sid {0}", source._subtitle_id);               
                    }
                }

                // Source
                String sourceArgs = null;
                switch (fileExtension)
                {
                    case ".vol":
                    case ".iso":
                        sourceArgs = String.Format("dvd://1 -dvd-device \"{0}\"",
                            (source._volume!=null) ? source._volume : source._path);
                        break;

                    default:
                        sourceArgs = String.Format("\"{0}\"", source._path);
                        break;
                }

                arguments = String.Format("-quiet {0} -of mpeg -mpegopts format=dvd -o \"{1}\" {2} {3}", audioArgs, bufferFilePath, videoArgs, sourceArgs);
                return arguments;
            }
            #endregion

            #region GetOptimalResolution
            void GetOptimalResolution(FileSource source, out OutputResolution output)
            {
                String displayAspectRatioTag = _host.GetProfileSetting("DisplayAspectRatio", source._force_profile_name);
                Single overscan = (Single) _host.GetProfileSettingAsInt("DisplayOverscan", source._force_profile_name);
                output = new OutputResolution();

                if (source._threshold_exceeded)
                {
                    // Reduce picture size of HD content for faster encoding
                    source._width = 720;
                    source._height = (int)((float)source._width / source._ratio);
                }
                           
                // Add required black bars to fight overscan (if the percentage overscan is 0, then
                // no correction is made)          
                int expheight = source._height + (int)((float)source._height * overscan / 100);
                int expwidth = source._width + (int)((float)source._width * overscan / 100);
                int pad = 0;
               
               
                if (source._ratio >= 1.9)
                {
                    float divisor = (displayAspectRatioTag == "16/9") ? 1.79f : 1.35f;
                    pad = (int)System.Math.Floor((((float)source._width / divisor) - (float)source._height) / 2);

                    // Content is stretched to fill whole screen so we set fileAspectRatioTag to displayAspectRatioTag
                    output.DisplayAspectRatio = displayAspectRatioTag;
                   
                    if (pad % 2 != 0)
                    {
                        --pad;
                    }

                    expheight = expheight + (pad * 2);
                }
                else if (source._ratio >= 1.70 && source._ratio < 1.8)
                {
                    while (source._ratio >= 1.77 && source._ratio < 1.79)
                    {
                        source._height += 2;
                        expheight += 2;
                        source._ratio = (float)source._width / (float)source._height;
                    }

                    output.DisplayAspectRatio = "16/9";
                }
                else if (source._ratio >= 1.30 && source._ratio < 1.40)
                {
                    while (source._ratio >= 1.33 && source._ratio < 1.35)
                    {
                        source._height += 2;
                        expheight += 2;
                        source._ratio = (float)source._width / (float)source._height;
                    }

                    output.DisplayAspectRatio = "4/3";
                }

                output.Width = expwidth;
                output.Height = (expheight / 16) * 16;;
            }
            #endregion

            #region GetSafeResolution
            void GetSafeResolution(FileSource source, out OutputResolution output)
            {
                String displayAspectRatioTag = _host.GetProfileSetting("DisplayAspectRatio", source._force_profile_name);
                Single displayAspectRatio = ("16/9"==displayAspectRatioTag) ? 1.78f : 1.33f;
                Single overscan = (Single) _host.GetProfileSettingAsInt("DisplayOverscan", source._force_profile_name);
                output = new OutputResolution();

                if (source._threshold_exceeded)
                {
                    // Reduce picture size of HD content for faster encoding
                    source._width = 720;
                    source._height = (int)((float)source._width / source._ratio);
                }

                // Determine best safe output resolution based on aspect ratio and no. of pixels
                Single deltaBestMatchRatio = Single.MaxValue;
                Single deltaBestMatchPixels = Single.MaxValue;
                Single desiredOutputRatio = (source._ratio >= 1.9f) ? displayAspectRatio : source._ratio;
                Single desiredAccuracy = 0.03f;

                _host.WriteLog( String.Format("Select best resolution {0}x{1} ({2}f)",
                    source._width, source._height, desiredOutputRatio.ToString("0.00", CultureInfo.InvariantCulture)),
                    ErrorLevel.Verbose );

                foreach(OutputResolution resolution in _safe_resolutions)
                {
                    Single deltaRatio = Math.Abs(resolution.AspectRatio - desiredOutputRatio);
                    Single deltaPixels = Math.Abs(resolution.Pixels - source._pixels);
                   
                    // First and foremost do we have an identical match?
                    if (resolution.Width == source._width && resolution.Height == source._height)
                    {
                        _host.WriteLog( String.Format("Found identical match {0}x{1} ({2}f)",
                            resolution.Width, resolution.Height, resolution.AspectRatio.ToString("0.00")),
                            ErrorLevel.Verbose );

                        // We can stop searching - it doesn't get any better than this!
                        output = resolution;
                        break;
                    }
                    // Ok, is it a better match than we currently have based on aspect ratio?
                    else if (deltaRatio < deltaBestMatchRatio && deltaRatio > desiredAccuracy)
                    {
                        _host.WriteLog( String.Format("Found resolution {0}x{1} ({2}f)",
                            resolution.Width, resolution.Height, resolution.AspectRatio.ToString("0.00")),
                            ErrorLevel.Verbose );

                        deltaBestMatchRatio = deltaRatio;
                        deltaBestMatchPixels = deltaPixels;
                        output = resolution;
                    }
                    // Aspect ratio is within desired accuracy, so choose the best match on pixels
                    else if (deltaRatio <= desiredAccuracy)
                    {
                        if (deltaPixels < deltaBestMatchPixels)
                        {
                            _host.WriteLog( String.Format("Found resolution {0}x{1} ({2}px)",
                                resolution.Width, resolution.Height, resolution.Pixels),
                                ErrorLevel.Verbose );

                            deltaBestMatchRatio = deltaRatio;
                            deltaBestMatchPixels = deltaPixels;
                            output = resolution;
                        }
                    }
                }

                output.DisplayAspectRatio = (source._ratio >= 1.9f) ? displayAspectRatioTag : output.DisplayAspectRatio;

                if (overscan>0)
                {
                    output.Width  += (Int32) ((Single)output.Width  * overscan / 100);
                    output.Height += (Int32) ((Single)output.Height * overscan / 100);

                    // MPEG2 macro blocks are 16x16 so make sure we're aligned on a block boundary
                    output.Width  =  (output.Width  / 16) * 16;
                    output.Height =  (output.Height / 16) * 16;

                    _host.WriteLog( String.Format("After overscan compensation {0}x{1}",
                        output.Width, output.Height), ErrorLevel.Verbose );
                }   
            }
            #endregion

            #endregion
        }
    }

  •  

    Massive thanks!
  •  
    leonowski:
    Try the latest mencoder-mt.exe builds.  They are multithreaded and work great with multi-core processors.

    The easiest way to get the latest version is to download the latest PS3 media server here:

    http://code.google.com/p/ps3mediaserver/downloads/list

    Extract the exe for the windows version using 7-zip to a folder.  Inside the folder, you should find FFMPEG and MENCODER-MT.exe.  Rename mencoder-mt.exe to just mencoder.exe and replace the one used by transcode 360.  Also, replace FFPEG.exe.

    After you do that, alter the mencodertranscoder.cs file in the transcode 360 program files folder to enable multi-thread decoding.  (use the lavdopts option with the desired number of threads):

    -lavdopts fast:threads=4:skiploopfilter=all

    After that, you should have a much better experience with transcode 360 and mencoder. 


    I might try this does it really improve transcode 360 ? I have a Dual Core processor.

    I always just used the mencoder.exe version in MPlayer v1.0rc2 from here
  •  
    THIS IS THE SINGLE GREATEST THREAD IN THE HISTORY OF THIS FORUM!!!!!!!!!!!!!!!!!!!!!!

    PLEASE MAKE THIS A STICKY SOMEWHERE, SOMEHOW!!!!!!!!!!!!!!!!

    I have been at my wits end with mkv playback on my 360 for months now.  My best friend has a HTPC that I setup and he and his wife are always complaining that the 360 in their bedroom doesnt work well.

    THIS FIXED IT FOR ME PERFECTLY!!!  ( I have a quad core athlon with 4gigs of ram)

    I had to hunt for the part in the MEncoderTranscoder.cs file, but I just replaced the two lines as follows:

     videoArgs = String.Format("-lavdopts threads=4 -ovc lavc -vf scale={0}:{1},expand={2}:{3},harddup -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate={4}:vbitrate={5}:keyint=15:aspect={6}{7}:threads=4 {8}-ofps {9}",
                source._width, source._height, output.Width, output.Height, maxVidBitrate, avgVidBitrate, output.DisplayAspectRatio, (audioOpts != null) ? audioOpts : "", subtitles, fps);

    and viola!!!!




    I honestly cannot express how much better this is making my extender experience.....Thank you so much for this info, everyone needs to know this, it would make so many people enjoy this setup.


  •  

    Outstanding thread, I have updated as per the above instructions and am now able to play content that previously threw problems at my extender.

    Hopefully I will notic a performance increase utilising my quad core processor as well :->

    Thanks guys
  •  
    ColeAudio:


     videoArgs = String.Format("-lavdopts threads=4 -ovc lavc -vf scale={0}:{1},expand={2}:{3},harddup -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate={4}:vbitrate={5}:keyint=15:aspect={6}{7}:threads=4 {8}-ofps {9}",
                source._width, source._height, output.Width, output.Height, maxVidBitrate, avgVidBitrate, output.DisplayAspectRatio, (audioOpts != null) ? audioOpts : "", subtitles, fps);




    Sorry I was vague in my original post.  Yes, this is the part of the script you need to alter.  This basically creates the command line that eventually runs mencoder.  You can look at the transcode360 logs to verify that these options are being passed.

    I too had problems with trancoding which led me to explore these solutions.  I had tried things like overclocking but I could never get the performance I need for "real-time" transcoding.  These settings certainly let me transcode in real time 1080p x264 content.

    For more information on the mencoder switches, visit:  http://www.mplayerhq.hu/DOCS/man/en/mplayer.1.html#DECODING/FILTERING%20OPTIONS

    There is also a second threads switch later in that line for encoding (lavcopts).  I believe that multi-threaded encoding has always been in mencoder, but multi-threaded decoding is new.  You might have better luck with even newer builds at http://kovensky.project357.com/.  I haven't tried these builds but they may improve or degrade your experience with certain codecs.

    What I have noticed with the builds included in ps3 media server is that VC-1 decoding does not work.  I'm not sure if this is supported by mencoder at the moment.  Also, I cannot decode True-HD or DTS-HD audio tracks.  That might also be fixed in newer versions of mencoder.
  •  
    2 notable switches for lavdopts:

    fast AND skiploopfilter=all

    These can improve performance for slower CPUs at the cost of image quality.

    In the script, you would add it like this:  -lavdopts fast:threads=4:skiploopfilter=all
  •  
    another thought:

    I remember having strange problems with the script if I had similar file names in the same directory.  I had similar file names because I was simply adding "backup" or "test" to the end of the file name so I could make quick backups.

    Having these similar filenames or .cs extensions in that same directory might cause you problems too.  I suggest having a clean directory in there with only the required files.  The same goes for mencoder and ffmpeg.  It's probably best to move backups while your testing to a new directory somewhere.

    Also, after you make the changes, restart the transcoder service.
  •  

    I posted this in another thread:

    OK... Have you tried: Vader504's Transcoder v2.3?.. I have had success with this file in both Vista and W7...  I have seen post about additional tweaks and plan to try them also... Since viewing this thread, I have uninstalled Transcode360 and the Vader504's Transcoder v2.4 ($40 version, only played for 5 minutes) and all is well... Again this is just for DVDs...

    Give this article a look-see: http://iandixon.co.uk/Podcast/wikis/mediacenter/dvd-library-on-extenders-using-vader-s-transcoder.aspx

    leonowski:
    another thought:

    I remember having strange problems with the script if I had similar file names in the same directory.  I had similar file names because I was simply adding "backup" or "test" to the end of the file name so I could make quick backups.

    Having these similar filenames or .cs extensions in that same directory might cause you problems too.  I suggest having a clean directory in there with only the required files.  The same goes for mencoder and ffmpeg.  It's probably best to move backups while your testing to a new directory somewhere.

    Also, after you make the changes, restart the transcoder service.

  •  
    vader504's transcoder also uses mencoder so these tweaks would also work.  The only difference would be if you had access to change the switches passed to the mencoder.exe command.

    Since I'm a frugal person (AKA cheap ***), I stuck with transcode360.  :)
  •  
    This is so amazing to finally have MKV playback work properly!  I never could figure out how my computer was lagging so much and now it is obvious I just didnt have it all configured properly.

    After installing the versions of mencoder and ffmpeg from the ps3 streamer, I got great results, but some files caused the mencoder.exe to crash on my HTPC.  I was able to solve this problem by downloading a different mencoder from http://kovensky.project357.com/  I am unsure if it is the multi thread version, but it works just as well.  As mentioned before, perhaps mencoder has always supported MT encoding.

    I noticed that with all these updates I still had some files that were slightly off on lip sync, but after correcting the delay on my receiver everything works great.  I think the delay was always there but I didnt notice it because it was great compared to the 2-3 second delay I was getting on my poorer playback!!!
Page 1 of 5 (69 items) 12345