aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.MediaEncoding
diff options
context:
space:
mode:
authorLuke <luke.pulverenti@gmail.com>2015-01-11 15:57:40 -0500
committerLuke <luke.pulverenti@gmail.com>2015-01-11 15:57:40 -0500
commit76edf138de9f746738dcf107c51b558b7df0de21 (patch)
treedd1b7494b4610250a798a0bcc2c4ab3608c6572b /MediaBrowser.MediaEncoding
parent3e1131dbad1f7c72e75cce4de1821546cc2d84e1 (diff)
parent518119d9cd8a54eb0fbe018d826f7d379b30f057 (diff)
Merge pull request #974 from MediaBrowser/dev
3.0.5490.0
Diffstat (limited to 'MediaBrowser.MediaEncoding')
-rw-r--r--MediaBrowser.MediaEncoding/Encoder/BaseEncoder.cs48
-rw-r--r--MediaBrowser.MediaEncoding/MediaBrowser.MediaEncoding.csproj3
-rw-r--r--MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs43
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