mirror of
https://github.com/ShareX/ShareX.git
synced 2024-10-02 18:26:27 +13:00
Change screenshots wording to thumbnails
This commit is contained in:
parent
1e524be67e
commit
7f20b7c1ab
7 changed files with 69 additions and 52 deletions
|
@ -56,6 +56,10 @@
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
<HintPath>..\packages\QrCode.Net.0.4.0.0\lib\net40\Gma.QrCodeNet.Encoding.dll</HintPath>
|
<HintPath>..\packages\QrCode.Net.0.4.0.0\lib\net40\Gma.QrCodeNet.Encoding.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="MegaApiClient, Version=1.1.1.44, Culture=neutral, PublicKeyToken=0480d311efbeb4e2, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\..\TDMaker\packages\MegaApiClient.1.1.1\lib\net40\MegaApiClient.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
<Reference Include="Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
<Reference Include="Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Newtonsoft.Json.7.0.1\lib\net40\Newtonsoft.Json.dll</HintPath>
|
<HintPath>..\packages\Newtonsoft.Json.7.0.1\lib\net40\Newtonsoft.Json.dll</HintPath>
|
||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
|
@ -906,6 +910,7 @@
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<None Include="app.config" />
|
||||||
<None Include="packages.config" />
|
<None Include="packages.config" />
|
||||||
<None Include="Resources\Icon.png" />
|
<None Include="Resources\Icon.png" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
11
ShareX.HelpersLib/app.config
Normal file
11
ShareX.HelpersLib/app.config
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
<runtime>
|
||||||
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="7.0.0.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
</assemblyBinding>
|
||||||
|
</runtime>
|
||||||
|
</configuration>
|
|
@ -1,6 +1,7 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="Newtonsoft.Json" version="7.0.1" targetFramework="net40" />
|
<package id="MegaApiClient" version="1.1.1" targetFramework="net4" />
|
||||||
<package id="QrCode.Net" version="0.4.0.0" targetFramework="net40" />
|
<package id="Newtonsoft.Json" version="7.0.1" targetFramework="net4" />
|
||||||
<package id="SevenZipSharp" version="0.64" targetFramework="net40" />
|
<package id="QrCode.Net" version="0.4.0.0" targetFramework="net4" />
|
||||||
|
<package id="SevenZipSharp" version="0.64" targetFramework="net4" />
|
||||||
</packages>
|
</packages>
|
|
@ -58,7 +58,7 @@ private void btnStart_Click(object sender, EventArgs e)
|
||||||
Options.LastVideoPath = mediaPath;
|
Options.LastVideoPath = mediaPath;
|
||||||
|
|
||||||
pbProgress.Value = 0;
|
pbProgress.Value = 0;
|
||||||
pbProgress.Maximum = Options.ScreenshotCount;
|
pbProgress.Maximum = Options.ThumbnailCount;
|
||||||
pbProgress.Visible = true;
|
pbProgress.Visible = true;
|
||||||
btnStart.Visible = false;
|
btnStart.Visible = false;
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#region License Information (GPL v3)
|
#region License Information (GPL v3)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
ShareX - A program that allows you to take screenshots and share any file type
|
ShareX - A program that allows you to take thumbnails and share any file type
|
||||||
Copyright © 2007-2015 ShareX Developers
|
Copyright © 2007-2015 ShareX Developers
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or
|
This program is free software; you can redistribute it and/or
|
||||||
|
@ -31,58 +31,58 @@ namespace ShareX.MediaLib
|
||||||
{
|
{
|
||||||
public class VideoThumbnailOptions
|
public class VideoThumbnailOptions
|
||||||
{
|
{
|
||||||
[Category("Screenshots"), DefaultValue(ThumbnailLocationType.DefaultFolder), Description("Create screenshots in default screenshot folder, same folder as the media file or in a custom folder.")]
|
[Category("Thumbnails"), DefaultValue(ThumbnailLocationType.DefaultFolder), Description("Create thumbnails in default screenshot folder, same folder as the media file or in a custom folder.")]
|
||||||
public ThumbnailLocationType OutputLocation { get; set; }
|
public ThumbnailLocationType OutputLocation { get; set; }
|
||||||
|
|
||||||
[Category("Screenshots"), DefaultValue(""), Description("Output folder where screenshots will get saved."), Editor(typeof(DirectoryNameEditor), typeof(UITypeEditor))]
|
[Category("Thumbnails"), DefaultValue(""), Description("Output folder where thumbnails will get saved."), Editor(typeof(DirectoryNameEditor), typeof(UITypeEditor))]
|
||||||
public string CustomOutputDirectory { get; set; }
|
public string CustomOutputDirectory { get; set; }
|
||||||
|
|
||||||
[Category("Screenshots"), DefaultValue(EImageFormat.PNG), Description("Thumbnail image format to save.")]
|
[Category("Thumbnails"), DefaultValue(EImageFormat.PNG), Description("Thumbnail image format to save.")]
|
||||||
public EImageFormat ImageFormat { get; set; }
|
public EImageFormat ImageFormat { get; set; }
|
||||||
|
|
||||||
[Category("Screenshots"), DefaultValue(9), Description("Total number of screenshots to take.")]
|
[Category("Thumbnails"), DefaultValue(9), Description("Total number of thumbnails to take.")]
|
||||||
public int ScreenshotCount { get; set; }
|
public int ThumbnailCount { get; set; }
|
||||||
|
|
||||||
[Category("Screenshots"), DefaultValue("_Thumbnail"), Description("Suffix to append to the screenshot filename.")]
|
[Category("Thumbnails"), DefaultValue("_Thumbnail"), Description("Suffix to append to the thumbnail filename.")]
|
||||||
public string FilenameSuffix { get; set; }
|
public string FilenameSuffix { get; set; }
|
||||||
|
|
||||||
[Category("Screenshots"), DefaultValue(false), Description("Choose random frame each time a media file is processed.")]
|
[Category("Thumbnails"), DefaultValue(false), Description("Choose random frame each time a media file is processed.")]
|
||||||
public bool RandomFrame { get; set; }
|
public bool RandomFrame { get; set; }
|
||||||
|
|
||||||
[Category("Screenshots"), DefaultValue(true), Description("Upload screenshots.")]
|
[Category("Thumbnails"), DefaultValue(true), Description("Upload thumbnails.")]
|
||||||
public bool UploadScreenshots { get; set; }
|
public bool UploadThumbnails { get; set; }
|
||||||
|
|
||||||
[Category("Screenshots"), DefaultValue(false), Description("After combine screenshots keep single image files.")]
|
[Category("Thumbnails"), DefaultValue(false), Description("After combine thumbnails keep single image files.")]
|
||||||
public bool KeepScreenshots { get; set; }
|
public bool KeepScreenshots { get; set; }
|
||||||
|
|
||||||
[Category("Screenshots"), DefaultValue(false), Description("After all screenshots taken open output directory automatically.")]
|
[Category("Thumbnails"), DefaultValue(false), Description("After all thumbnails taken open output directory automatically.")]
|
||||||
public bool OpenDirectory { get; set; }
|
public bool OpenDirectory { get; set; }
|
||||||
|
|
||||||
[Category("Screenshots"), DefaultValue(512), Description("Maximum thumbnail width size, 0 means don't resize.")]
|
[Category("Thumbnails"), DefaultValue(512), Description("Maximum thumbnail width size, 0 means don't resize.")]
|
||||||
public int MaxThumbnailWidth { get; set; }
|
public int MaxThumbnailWidth { get; set; }
|
||||||
|
|
||||||
[Category("Screenshots / Combined"), DefaultValue(true), Description("Combine all screenshots to one large screenshot.")]
|
[Category("Thumbnails / Combined"), DefaultValue(true), Description("Combine all thumbnails to one large thumbnail.")]
|
||||||
public bool CombineScreenshots { get; set; }
|
public bool CombineScreenshots { get; set; }
|
||||||
|
|
||||||
[Category("Screenshots / Combined"), DefaultValue(10), Description("Space between border and content as pixel.")]
|
[Category("Thumbnails / Combined"), DefaultValue(10), Description("Space between border and content as pixel.")]
|
||||||
public int Padding { get; set; }
|
public int Padding { get; set; }
|
||||||
|
|
||||||
[Category("Screenshots / Combined"), DefaultValue(10), Description("Space between screenshots as pixel.")]
|
[Category("Thumbnails / Combined"), DefaultValue(10), Description("Space between thumbnails as pixel.")]
|
||||||
public int Spacing { get; set; }
|
public int Spacing { get; set; }
|
||||||
|
|
||||||
[Category("Screenshots / Combined"), DefaultValue(3), Description("Number of screenshots per row.")]
|
[Category("Thumbnails / Combined"), DefaultValue(3), Description("Number of thumbnails per row.")]
|
||||||
public int ColumnCount { get; set; }
|
public int ColumnCount { get; set; }
|
||||||
|
|
||||||
[Category("Screenshots / Combined"), DefaultValue(true), Description("Add video information to the combined screenshot.")]
|
[Category("Thumbnails / Combined"), DefaultValue(true), Description("Add video information to the combined thumbnail.")]
|
||||||
public bool AddVideoInfo { get; set; }
|
public bool AddVideoInfo { get; set; }
|
||||||
|
|
||||||
[Category("Screenshots / Combined"), DefaultValue(true), Description("Add timestamp of screenshot at corner of image.")]
|
[Category("Thumbnails / Combined"), DefaultValue(true), Description("Add timestamp of thumbnail at corner of image.")]
|
||||||
public bool AddTimestamp { get; set; }
|
public bool AddTimestamp { get; set; }
|
||||||
|
|
||||||
[Category("Screenshots / Combined"), DefaultValue(true), Description("Draw rectangle shadow behind thumbnails.")]
|
[Category("Thumbnails / Combined"), DefaultValue(true), Description("Draw rectangle shadow behind thumbnails.")]
|
||||||
public bool DrawShadow { get; set; }
|
public bool DrawShadow { get; set; }
|
||||||
|
|
||||||
[Category("Screenshots / Combined"), DefaultValue(true), Description("Draw border around thumbnails.")]
|
[Category("Thumbnails / Combined"), DefaultValue(true), Description("Draw border around thumbnails.")]
|
||||||
public bool DrawBorder { get; set; }
|
public bool DrawBorder { get; set; }
|
||||||
|
|
||||||
public string DefaultOutputDirectory, LastVideoPath;
|
public string DefaultOutputDirectory, LastVideoPath;
|
||||||
|
|
|
@ -57,9 +57,9 @@ public VideoThumbnailer(string mediaPath, string ffmpegPath, VideoThumbnailOptio
|
||||||
|
|
||||||
public List<VideoThumbnailInfo> TakeThumbnails()
|
public List<VideoThumbnailInfo> TakeThumbnails()
|
||||||
{
|
{
|
||||||
List<VideoThumbnailInfo> tempScreenshots = new List<VideoThumbnailInfo>();
|
List<VideoThumbnailInfo> tempThumbnails = new List<VideoThumbnailInfo>();
|
||||||
|
|
||||||
for (int i = 0; i < Options.ScreenshotCount; i++)
|
for (int i = 0; i < Options.ThumbnailCount; i++)
|
||||||
{
|
{
|
||||||
string mediaFileName = Path.GetFileNameWithoutExtension(MediaPath);
|
string mediaFileName = Path.GetFileNameWithoutExtension(MediaPath);
|
||||||
|
|
||||||
|
@ -71,70 +71,70 @@ public List<VideoThumbnailInfo> TakeThumbnails()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
timeSliceElapsed = GetTimeSlice(Options.ScreenshotCount) * (i + 1);
|
timeSliceElapsed = GetTimeSlice(Options.ThumbnailCount) * (i + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
string filename = string.Format("{0}-{1}.{2}", mediaFileName, timeSliceElapsed, Options.ImageFormat.GetDescription());
|
string filename = string.Format("{0}-{1}.{2}", mediaFileName, timeSliceElapsed, Options.ImageFormat.GetDescription());
|
||||||
string tempScreenshotPath = Path.Combine(GetOutputDirectory(), filename);
|
string tempThumbnailPath = Path.Combine(GetOutputDirectory(), filename);
|
||||||
|
|
||||||
using (Process p = new Process())
|
using (Process p = new Process())
|
||||||
{
|
{
|
||||||
ProcessStartInfo psi = new ProcessStartInfo(FFmpegPath);
|
ProcessStartInfo psi = new ProcessStartInfo(FFmpegPath);
|
||||||
psi.WindowStyle = ProcessWindowStyle.Hidden;
|
psi.WindowStyle = ProcessWindowStyle.Hidden;
|
||||||
psi.Arguments = string.Format("-ss {0} -i \"{1}\" -f image2 -vframes 1 -y \"{2}\"", timeSliceElapsed, MediaPath, tempScreenshotPath);
|
psi.Arguments = string.Format("-ss {0} -i \"{1}\" -f image2 -vframes 1 -y \"{2}\"", timeSliceElapsed, MediaPath, tempThumbnailPath);
|
||||||
p.StartInfo = psi;
|
p.StartInfo = psi;
|
||||||
p.Start();
|
p.Start();
|
||||||
p.WaitForExit(1000 * 30);
|
p.WaitForExit(1000 * 30);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (File.Exists(tempScreenshotPath))
|
if (File.Exists(tempThumbnailPath))
|
||||||
{
|
{
|
||||||
VideoThumbnailInfo screenshotInfo = new VideoThumbnailInfo(tempScreenshotPath)
|
VideoThumbnailInfo screenshotInfo = new VideoThumbnailInfo(tempThumbnailPath)
|
||||||
{
|
{
|
||||||
Timestamp = TimeSpan.FromSeconds(timeSliceElapsed)
|
Timestamp = TimeSpan.FromSeconds(timeSliceElapsed)
|
||||||
};
|
};
|
||||||
|
|
||||||
tempScreenshots.Add(screenshotInfo);
|
tempThumbnails.Add(screenshotInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
OnProgressChanged(i + 1, Options.ScreenshotCount);
|
OnProgressChanged(i + 1, Options.ThumbnailCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Finish(tempScreenshots);
|
return Finish(tempThumbnails);
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<VideoThumbnailInfo> Finish(List<VideoThumbnailInfo> tempScreenshots)
|
private List<VideoThumbnailInfo> Finish(List<VideoThumbnailInfo> tempThumbnails)
|
||||||
{
|
{
|
||||||
List<VideoThumbnailInfo> screenshots = new List<VideoThumbnailInfo>();
|
List<VideoThumbnailInfo> thumbnails = new List<VideoThumbnailInfo>();
|
||||||
|
|
||||||
if (tempScreenshots != null && tempScreenshots.Count > 0)
|
if (tempThumbnails != null && tempThumbnails.Count > 0)
|
||||||
{
|
{
|
||||||
if (Options.CombineScreenshots)
|
if (Options.CombineScreenshots)
|
||||||
{
|
{
|
||||||
using (Image img = CombineScreenshots(tempScreenshots))
|
using (Image img = CombineScreenshots(tempThumbnails))
|
||||||
{
|
{
|
||||||
string tempFilepath = Path.Combine(GetOutputDirectory(), Path.GetFileNameWithoutExtension(MediaPath) + Options.FilenameSuffix + "." + Options.ImageFormat.GetDescription());
|
string tempFilepath = Path.Combine(GetOutputDirectory(), Path.GetFileNameWithoutExtension(MediaPath) + Options.FilenameSuffix + "." + Options.ImageFormat.GetDescription());
|
||||||
ImageHelpers.SaveImage(img, tempFilepath);
|
ImageHelpers.SaveImage(img, tempFilepath);
|
||||||
screenshots.Add(new VideoThumbnailInfo(tempFilepath));
|
thumbnails.Add(new VideoThumbnailInfo(tempFilepath));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Options.KeepScreenshots)
|
if (!Options.KeepScreenshots)
|
||||||
{
|
{
|
||||||
tempScreenshots.ForEach(x => File.Delete(x.Filepath));
|
tempThumbnails.ForEach(x => File.Delete(x.Filepath));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
screenshots.AddRange(tempScreenshots);
|
thumbnails.AddRange(tempThumbnails);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Options.OpenDirectory && screenshots.Count > 0)
|
if (Options.OpenDirectory && thumbnails.Count > 0)
|
||||||
{
|
{
|
||||||
Helpers.OpenFolderWithFile(screenshots[0].Filepath);
|
Helpers.OpenFolderWithFile(thumbnails[0].Filepath);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return screenshots;
|
return thumbnails;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void OnProgressChanged(int current, int length)
|
protected void OnProgressChanged(int current, int length)
|
||||||
|
@ -168,16 +168,16 @@ private int GetRandomTimeSlice(int start)
|
||||||
{
|
{
|
||||||
List<int> mediaSeekTimes = new List<int>();
|
List<int> mediaSeekTimes = new List<int>();
|
||||||
|
|
||||||
for (int i = 1; i < Options.ScreenshotCount + 2; i++)
|
for (int i = 1; i < Options.ThumbnailCount + 2; i++)
|
||||||
{
|
{
|
||||||
mediaSeekTimes.Add(GetTimeSlice(Options.ScreenshotCount + 2) * i);
|
mediaSeekTimes.Add(GetTimeSlice(Options.ThumbnailCount + 2) * i);
|
||||||
}
|
}
|
||||||
|
|
||||||
Random random = new Random();
|
Random random = new Random();
|
||||||
return (int)(random.NextDouble() * (mediaSeekTimes[start + 1] - mediaSeekTimes[start]) + mediaSeekTimes[start]);
|
return (int)(random.NextDouble() * (mediaSeekTimes[start + 1] - mediaSeekTimes[start]) + mediaSeekTimes[start]);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Image CombineScreenshots(List<VideoThumbnailInfo> screenshots)
|
private Image CombineScreenshots(List<VideoThumbnailInfo> thumbnails)
|
||||||
{
|
{
|
||||||
List<Image> images = new List<Image>();
|
List<Image> images = new List<Image>();
|
||||||
Image finalImage = null;
|
Image finalImage = null;
|
||||||
|
@ -197,9 +197,9 @@ private Image CombineScreenshots(List<VideoThumbnailInfo> screenshots)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (VideoThumbnailInfo screenshot in screenshots)
|
foreach (VideoThumbnailInfo thumbnail in thumbnails)
|
||||||
{
|
{
|
||||||
Image img = Image.FromFile(screenshot.Filepath);
|
Image img = Image.FromFile(thumbnail.Filepath);
|
||||||
|
|
||||||
if (Options.MaxThumbnailWidth > 0 && img.Width > Options.MaxThumbnailWidth)
|
if (Options.MaxThumbnailWidth > 0 && img.Width > Options.MaxThumbnailWidth)
|
||||||
{
|
{
|
||||||
|
@ -273,7 +273,7 @@ private Image CombineScreenshots(List<VideoThumbnailInfo> screenshots)
|
||||||
|
|
||||||
using (Font font = new Font("Arial", 10, FontStyle.Bold))
|
using (Font font = new Font("Arial", 10, FontStyle.Bold))
|
||||||
{
|
{
|
||||||
ImageHelpers.DrawTextWithShadow(g, screenshots[i].Timestamp.ToString(),
|
ImageHelpers.DrawTextWithShadow(g, thumbnails[i].Timestamp.ToString(),
|
||||||
new Point(offsetX + timestampOffset, offsetY + timestampOffset), font, Color.White, Color.Black);
|
new Point(offsetX + timestampOffset, offsetY + timestampOffset), font, Color.White, Color.Black);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -630,7 +630,7 @@ public static void OpenVideoThumbnailer(TaskSettings taskSettings = null)
|
||||||
VideoThumbnailerForm thumbnailerForm = new VideoThumbnailerForm(taskSettings.CaptureSettings.FFmpegOptions.CLIPath, Program.Settings.VideoThumbnailOptions);
|
VideoThumbnailerForm thumbnailerForm = new VideoThumbnailerForm(taskSettings.CaptureSettings.FFmpegOptions.CLIPath, Program.Settings.VideoThumbnailOptions);
|
||||||
thumbnailerForm.ThumbnailsTaken += thumbnails =>
|
thumbnailerForm.ThumbnailsTaken += thumbnails =>
|
||||||
{
|
{
|
||||||
if (Program.Settings.VideoThumbnailOptions.UploadScreenshots)
|
if (Program.Settings.VideoThumbnailOptions.UploadThumbnails)
|
||||||
{
|
{
|
||||||
foreach (VideoThumbnailInfo thumbnailInfo in thumbnails)
|
foreach (VideoThumbnailInfo thumbnailInfo in thumbnails)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue