Skip to content

Commit fb98918

Browse files
committed
Added button to sort tracks by lang/title/codec, ommit encoder args for stream types if none of that type are mapped
1 parent 5b86676 commit fb98918

File tree

7 files changed

+248
-69
lines changed

7 files changed

+248
-69
lines changed

ff-utils-winforms/Forms/MainForm.Designer.cs

Lines changed: 151 additions & 62 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ff-utils-winforms/Forms/MainForm.StreamList.cs

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,8 @@ private void streamList_Leave(object sender, EventArgs e)
122122
QuickConvertUi.LoadMetadataGrid();
123123
}
124124

125+
#region Move Buttons
126+
125127
private void trackListMoveUpBtn_Click(object sender, EventArgs e)
126128
{
127129
UiUtils.MoveListViewItem(streamList, UiUtils.MoveDirection.Up);
@@ -132,6 +134,10 @@ private void trackListMoveDownBtn_Click(object sender, EventArgs e)
132134
UiUtils.MoveListViewItem(streamList, UiUtils.MoveDirection.Down);
133135
}
134136

137+
#endregion
138+
139+
#region Auto-Check
140+
135141
private void trackListCheckTracksBtn_Click(object sender, EventArgs e)
136142
{
137143
checkItemsContextMenu.Show(Cursor.Position);
@@ -176,5 +182,46 @@ private void checkFirstTrackOfEachLanguagePerTypeToolStripMenuItem_Click(object
176182
{
177183
TrackList.CheckFirstOfEachLangOfEachType();
178184
}
185+
186+
#endregion
187+
188+
#region Sort
189+
190+
private void trackListSortTracksBtn_Click(object sender, EventArgs e)
191+
{
192+
sortTracksContextMenu.Show(Cursor.Position);
193+
}
194+
195+
private void sortTracksByLanguageAZToolStripMenuItem_Click(object sender, EventArgs e)
196+
{
197+
TrackList.SortTracks(TrackList.TrackSort.Language, false);
198+
}
199+
200+
private void sortTracksByLanguageZAToolStripMenuItem_Click(object sender, EventArgs e)
201+
{
202+
TrackList.SortTracks(TrackList.TrackSort.Language, true);
203+
}
204+
205+
private void sortTracksByTitleAZToolStripMenuItem_Click(object sender, EventArgs e)
206+
{
207+
TrackList.SortTracks(TrackList.TrackSort.Title, false);
208+
}
209+
210+
private void sortTracksByTitleZAToolStripMenuItem_Click(object sender, EventArgs e)
211+
{
212+
TrackList.SortTracks(TrackList.TrackSort.Title, true);
213+
}
214+
215+
private void sortTracksByCodecAZToolStripMenuItem_Click(object sender, EventArgs e)
216+
{
217+
TrackList.SortTracks(TrackList.TrackSort.Codec, false);
218+
}
219+
220+
private void sortTracksByCodecZAToolStripMenuItem_Click(object sender, EventArgs e)
221+
{
222+
TrackList.SortTracks(TrackList.TrackSort.Codec, true);
223+
}
224+
225+
#endregion
179226
}
180227
}

ff-utils-winforms/Forms/MainForm.resx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,9 @@
124124
<value>Here you can modify more advanced encoder settings. If a field is too small, hover over it to show the full text.
125125
Cells in the "Value" column can be edited by either pressing F2 or typing while a cell is selected.</value>
126126
</data>
127+
<metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
128+
<value>17, 17</value>
129+
</metadata>
127130
<metadata name="checkItemsContextMenu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
128131
<value>107, 17</value>
129132
</metadata>
@@ -134,13 +137,16 @@ Cells in the "Value" column can be edited by either pressing F2 or typing while
134137
<data name="runBtn.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
135138
<value>
136139
iVBORw0KGgoAAAANSUhEUgAAADAAAAAgCAYAAABU1PscAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
137-
wAAADsABataJCQAAAOZJREFUWEftl7ENwjAQRSNR0cIAjMAO7EDBFoyQji3YgiWyAhNQ01EQ3pfPHUIY
140+
vAAADrwBlbxySQAAAOZJREFUWEftl7ENwjAQRSNR0cIAjMAO7EDBFoyQji3YgiWyAhNQ01EQ3pfPHUIY
138141
nMQHftJXFOd8+l9KHLupVH6Evu9bJFob8oWMB/81wHNovEQzu82OjMu9rjaUFxpvUYfWNpQVGUdi0ADi
139142
hg5obo+yQL/RAkTOaGOPv4ZeowcQd3RECyv7GHpMEiByQTtk1ekwd9IAkRNa2ZQkmFdEAHFFe5S05FJf
140143
TIBI0pJLbXEBxNtLLjU1wEto/DevkOuP2O0y6vZH5nor4XYz53o77fpA4/tIOTQyHvzXANMg48G/0wAV
141144
nzTNA2Frs24HzQdqAAAAAElFTkSuQmCC
142145
</value>
143146
</data>
147+
<metadata name="sortTracksContextMenu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
148+
<value>463, 23</value>
149+
</metadata>
144150
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
145151
<value>
146152
AAABAA0AAAAAAAEAIAAFnQAA1gAAAICAAAABACAAKAgBANudAACAgAAAAQAIAChMAAADpgEAQEAAAAEA

ff-utils-winforms/Media/FfmpegUtils.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ public static async Task<string> GetCurrentAutoCrop(string path, bool quiet)
201201
string mostCommon = detectedCrops.GroupBy(i => i).OrderByDescending(grp => grp.Count()).Select(grp => grp.Key).First();
202202
string largest = detectedCrops.First();
203203
int commonCertainty = (((float)detectedCrops.CountOccurences(mostCommon) / (float)detectedCrops.Count) * 100f).RoundToInt();
204-
string chosen = commonCertainty > 85 ? mostCommon : largest; // Use most common if it's >85% common, otherwise use largest to be safe (thanks Nolan)
204+
string chosen = commonCertainty > 80 ? mostCommon : largest; // Use most common if it's >80% common, otherwise use largest to be safe (thanks Nolan)
205205
Logger.Log($"GetCurrentAutoCrop - Largest: {largest} - Smallest: {detectedCrops.Last()} - Most Common: {mostCommon} ({commonCertainty}%) - Chosen: {chosen} [T = {sw}]", true);
206206
string[] cropVals = chosen.Split(':');
207207
bool repl = Logger.LastUiLine.Contains(msg);

ff-utils-winforms/UI/Tasks/Av1an.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ public static async Task Run(bool resume = false, string overrideTempDir = "", s
9999
}
100100

101101
int totalThreads = w.GetInt() * thr.GetInt();
102-
Logger.Log($"Using {w} workers with {thr} threads each = {totalThreads} threads total. {(totalThreads <= Environment.ProcessorCount ? "Thread pinning enabled." : "")}");
102+
Logger.Log($"Using {w} workers with {thr.GetInt()} threads each = {totalThreads} threads total. {(totalThreads <= Environment.ProcessorCount ? "Thread pinning enabled." : "")}");
103103
}
104104
else
105105
{

ff-utils-winforms/UI/Tasks/QuickConvert.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22
using System.Collections.Generic;
33
using System.Linq;
44
using System.Threading.Tasks;
5+
using System.Windows.Forms;
56
using System.Windows.Input;
67
using Nmkoder.Data;
78
using Nmkoder.Data.Codecs;
9+
using Nmkoder.Data.Ui;
810
using Nmkoder.Extensions;
911
using Nmkoder.Forms;
1012
using Nmkoder.IO;
@@ -35,14 +37,16 @@ public static async Task Run()
3537
IEncoder vCodec = CodecUtils.GetCodec(GetCurrentCodecV());
3638
CodecUtils.AudioCodec aCodec = GetCurrentCodecA();
3739
CodecUtils.SubtitleCodec sCodec = GetCurrentCodecS();
40+
bool anyVideoStreams = Program.mainForm.streamList.CheckedItems.Cast<ListViewItem>().Where(x => ((MediaStreamListEntry)x.Tag).Stream.Type == Data.Streams.Stream.StreamType.Video).Count() > 0;
41+
bool anyAudioStreams = Program.mainForm.streamList.CheckedItems.Cast<ListViewItem>().Where(x => ((MediaStreamListEntry)x.Tag).Stream.Type == Data.Streams.Stream.StreamType.Audio).Count() > 0;
3842
bool crf = (QualityMode)Program.mainForm.encQualModeBox.SelectedIndex == QualityMode.Crf;
39-
bool twoPass = vCodec.SupportsTwoPass && (vCodec.ForceTwoPass || !crf);
43+
bool twoPass = anyVideoStreams && vCodec.SupportsTwoPass && (vCodec.ForceTwoPass || !crf);
4044
Dictionary<string, string> videoArgs = vCodec.DoesNotEncode ? new Dictionary<string, string>() : GetVideoArgsFromUi(!crf);
4145

4246
string inFiles = TrackList.GetInputFilesString();
4347
string outPath = GetOutPath(vCodec);
4448
string map = TrackList.GetMapArgs();
45-
string a = CodecUtils.GetCodec(aCodec).GetArgs(GetAudioArgsFromUi(), TrackList.current.File).Arguments;
49+
string a = anyAudioStreams ? CodecUtils.GetCodec(aCodec).GetArgs(GetAudioArgsFromUi(), TrackList.current.File).Arguments : "";
4650
string s = CodecUtils.GetCodec(sCodec).GetArgs().Arguments;
4751
string meta = GetMetadataArgs();
4852
string custIn = Program.mainForm.customArgsInBox.Text.Trim();
@@ -64,8 +68,8 @@ public static async Task Run()
6468
else
6569
{
6670
CodecArgs codecArgs = vCodec.GetArgs(videoArgs, TrackList.current.File, Pass.OneOfOne);
67-
string v = codecArgs.Arguments;
68-
string vf = vCodec.DoesNotEncode ? "" : await GetVideoFilterArgs(vCodec, codecArgs);
71+
string v = anyVideoStreams ? codecArgs.Arguments : "";
72+
string vf = anyVideoStreams && !vCodec.DoesNotEncode ? await GetVideoFilterArgs(vCodec, codecArgs) : "";
6973

7074
args = $"{custIn} {inFiles} {map} {v} {vf} {a} {s} {meta} {custOut} {muxing} {outPath.Wrap()}";
7175
}

ff-utils-winforms/UI/TrackList.cs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,5 +335,38 @@ public static void CheckFirstOfEachLangOfEachType()
335335
}
336336

337337
#endregion
338+
339+
#region Sort Tracks
340+
341+
public enum TrackSort { Language, Title, Codec }
342+
343+
public static void SortTracks(TrackSort sort, bool reverse)
344+
{
345+
ListView list = Program.mainForm.streamList;
346+
List<ListViewItem> itemsCopy = new List<ListViewItem>(list.Items.Cast<ListViewItem>());
347+
Program.mainForm.ignoreStreamListCheck = true;
348+
list.Items.Clear();
349+
List<Stream.StreamType> streamTypes = itemsCopy.Select(x => ((MediaStreamListEntry)x.Tag).Stream.Type).Distinct().ToList();
350+
351+
foreach (Stream.StreamType streamType in streamTypes)
352+
{
353+
var items = itemsCopy.Where(x => ((MediaStreamListEntry)x.Tag).Stream.Type == streamType);
354+
var sorted = new List<ListViewItem>();
355+
356+
if(sort == TrackSort.Language)
357+
sorted = items.OrderBy(x => ((MediaStreamListEntry)x.Tag).Stream.Language).ToList();
358+
else if (sort == TrackSort.Title)
359+
sorted = items.OrderBy(x => ((MediaStreamListEntry)x.Tag).Stream.Title).ToList();
360+
else if (sort == TrackSort.Codec)
361+
sorted = items.OrderBy(x => ((MediaStreamListEntry)x.Tag).Stream.Codec).ToList();
362+
363+
list.Items.AddRange(reverse ? sorted.AsEnumerable().Reverse().ToArray() : sorted.ToArray());
364+
}
365+
366+
Program.mainForm.ignoreStreamListCheck = false;
367+
Program.mainForm.OnCheckedStreamsChange();
368+
}
369+
370+
#endregion
338371
}
339372
}

0 commit comments

Comments
 (0)