diff options
| author | Luke <luke.pulverenti@gmail.com> | 2015-01-11 15:57:40 -0500 |
|---|---|---|
| committer | Luke <luke.pulverenti@gmail.com> | 2015-01-11 15:57:40 -0500 |
| commit | 76edf138de9f746738dcf107c51b558b7df0de21 (patch) | |
| tree | dd1b7494b4610250a798a0bcc2c4ab3608c6572b /MediaBrowser.MediaEncoding | |
| parent | 3e1131dbad1f7c72e75cce4de1821546cc2d84e1 (diff) | |
| parent | 518119d9cd8a54eb0fbe018d826f7d379b30f057 (diff) | |
Merge pull request #974 from MediaBrowser/dev
3.0.5490.0
Diffstat (limited to 'MediaBrowser.MediaEncoding')
3 files changed, 60 insertions, 34 deletions
diff --git a/MediaBrowser.MediaEncoding/Encoder/BaseEncoder.cs b/MediaBrowser.MediaEncoding/Encoder/BaseEncoder.cs index 3c30d7cd8..ecf5d72d5 100644 --- a/MediaBrowser.MediaEncoding/Encoder/BaseEncoder.cs +++ b/MediaBrowser.MediaEncoding/Encoder/BaseEncoder.cs @@ -317,32 +317,7 @@ namespace MediaBrowser.MediaEncoding.Encoder return Math.Max(Environment.ProcessorCount - 1, 2); } - // Use more when this is true. -re will keep cpu usage under control - if (job.ReadInputAtNativeFramerate) - { - if (isWebm) - { - return Math.Max(Environment.ProcessorCount - 1, 2); - } - - return 0; - } - - // Webm: http://www.webmproject.org/docs/encoder-parameters/ - // The decoder will usually automatically use an appropriate number of threads according to how many cores are available but it can only use multiple threads - // for the coefficient data if the encoder selected --token-parts > 0 at encode time. - - switch (GetQualitySetting()) - { - case EncodingQuality.HighSpeed: - return 2; - case EncodingQuality.HighQuality: - return 2; - case EncodingQuality.MaxQuality: - return isWebm ? Math.Max(Environment.ProcessorCount - 1, 2) : 0; - default: - throw new Exception("Unrecognized MediaEncodingQuality value."); - } + return 0; } protected EncodingQuality GetQualitySetting() @@ -467,7 +442,7 @@ namespace MediaBrowser.MediaEncoding.Encoder { if (job.SubtitleStream.IsExternal && !job.SubtitleStream.IsTextSubtitleStream) { - arg += " -i " + job.SubtitleStream.Path; + arg += " -i \"" + job.SubtitleStream.Path + "\""; } } @@ -650,29 +625,36 @@ namespace MediaBrowser.MediaEncoding.Encoder if (string.Equals(videoCodec, "libx264", StringComparison.OrdinalIgnoreCase)) { + param = "-preset superfast"; + switch (qualitySetting) { case EncodingQuality.HighSpeed: - param = "-preset superfast"; + param += " -crf 23"; break; case EncodingQuality.HighQuality: - param = "-preset superfast"; + param += " -crf 20"; break; case EncodingQuality.MaxQuality: - param = "-preset superfast"; + param += " -crf 18"; break; } + } + + else if (string.Equals(videoCodec, "libx265", StringComparison.OrdinalIgnoreCase)) + { + param = "-preset fast"; switch (qualitySetting) { case EncodingQuality.HighSpeed: - param += " -crf 23"; + param += " -crf 28"; break; case EncodingQuality.HighQuality: - param += " -crf 20"; + param += " -crf 25"; break; case EncodingQuality.MaxQuality: - param += " -crf 18"; + param += " -crf 21"; break; } } diff --git a/MediaBrowser.MediaEncoding/MediaBrowser.MediaEncoding.csproj b/MediaBrowser.MediaEncoding/MediaBrowser.MediaEncoding.csproj index 38d8fa138..72dc0feac 100644 --- a/MediaBrowser.MediaEncoding/MediaBrowser.MediaEncoding.csproj +++ b/MediaBrowser.MediaEncoding/MediaBrowser.MediaEncoding.csproj @@ -50,6 +50,9 @@ <Reference Include="Microsoft.CSharp" /> <Reference Include="System.Data" /> <Reference Include="System.Xml" /> + <Reference Include="UniversalDetector"> + <HintPath>..\ThirdParty\UniversalDetector\UniversalDetector.dll</HintPath> + </Reference> </ItemGroup> <ItemGroup> <Compile Include="..\SharedVersion.cs"> diff --git a/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs b/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs index 67c9123f5..3b8663b61 100644 --- a/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs +++ b/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs @@ -17,6 +17,7 @@ using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; +using UniversalDetector; namespace MediaBrowser.MediaEncoding.Subtitles { @@ -611,7 +612,7 @@ namespace MediaBrowser.MediaEncoding.Subtitles } catch (FileNotFoundException) { - + } catch (DirectoryNotFoundException) { @@ -699,6 +700,18 @@ namespace MediaBrowser.MediaEncoding.Subtitles /// <returns>System.String.</returns> public string GetSubtitleFileCharacterSet(string path, string language) { + var charset = DetectCharset(path); + + if (!string.IsNullOrWhiteSpace(charset)) + { + if (string.Equals(charset, "utf-8", StringComparison.OrdinalIgnoreCase)) + { + //return null; + } + + //return charset; + } + if (GetFileEncoding(path).Equals(Encoding.UTF8)) { return string.Empty; @@ -743,6 +756,34 @@ namespace MediaBrowser.MediaEncoding.Subtitles } } + private string DetectCharset(string path) + { + try + { + using (var file = new FileStream(path, FileMode.Open)) + { + var detector = new CharsetDetector(); + detector.Feed(file); + detector.DataEnd(); + + var charset = detector.Charset; + + if (!string.IsNullOrWhiteSpace(charset)) + { + _logger.Info("UniversalDetector detected charset {0} for {1}", charset, path); + } + + return charset; + } + } + catch (IOException ex) + { + _logger.ErrorException("Error attempting to determine subtitle charset from {0}", ex, path); + } + + return null; + } + private static Encoding GetFileEncoding(string srcFile) { // *** Detect byte order mark if any - otherwise assume default |
