Skip to content

Commit 5857fcf

Browse files
committed
2025.8.30.0
YT Add video trim Fix downloading error Add artist name when downloading audio Embed chapters SCrawler Add correct handling of 'webp' files API.Redgifs: hide 'Responser.Save' error
1 parent e09752a commit 5857fcf

29 files changed

+1920
-279
lines changed

Changelog.md

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,21 @@
1+
# 2025.8.30.0
2+
3+
*2025-08-30*
4+
5+
- Added
6+
- YouTube:
7+
- **video trim** *(button `Trim`)*
8+
- embed chapters into video file
9+
- add artist name when downloading audio
10+
- Correct handling of `webp` files
11+
- Minor improvements
12+
- Updated
13+
- yt-dlp up to version **2025.08.27**
14+
- gallery-dl up to version **1.30.5**
15+
- Fixed
16+
- **YouTube: downloading error**
17+
- Minor bugs
18+
119
# 2025.8.1.0
220

321
*2025-08-01*
@@ -8,7 +26,7 @@
826
- Twitter: **[large profile option](https://github.com/AAndyProgram/SCrawler/wiki/Settings#twitter-user-settings) in user settings**
927
- Minor improvements
1028
- Updated
11-
- yt-dlp up to version **2025.27.21**
29+
- yt-dlp up to version **2025.07.21**
1230
- gallery-dl up to version **1.30.2**
1331
- Fixed
1432
- Reddit: in some cases crossposts don't download

SCrawler.YouTube/Base/Structures.vb

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,4 +136,34 @@ Namespace API.YouTube.Base
136136
End If
137137
End Function
138138
End Structure
139+
Public Structure TrimOption : Implements IComparable(Of TrimOption)
140+
Public Name As String
141+
Public Start As Integer
142+
Public ReadOnly Property StartTime As TimeSpan
143+
Get
144+
Return TimeSpan.FromSeconds(Start)
145+
End Get
146+
End Property
147+
Public [End] As Integer
148+
Public ReadOnly Property EndTime As TimeSpan
149+
Get
150+
Return TimeSpan.FromSeconds([End])
151+
End Get
152+
End Property
153+
Public Shared Widening Operator CType(ByVal t As TrimOption) As String
154+
Return t.ToString
155+
End Operator
156+
Public Overrides Function ToString() As String
157+
Dim v$ = $"{Start} - {[End]}"
158+
If Not Name.IsEmptyString Then v = $"[{v}] - {Name}"
159+
Return v
160+
End Function
161+
Public Overrides Function Equals(ByVal Obj As Object) As Boolean
162+
Try : With DirectCast(Obj, TrimOption) : Return Start = .Start And [End] = .End : End With : Catch : End Try
163+
Return False
164+
End Function
165+
Private Function CompareTo(ByVal Other As TrimOption) As Integer Implements IComparable(Of TrimOption).CompareTo
166+
Return Start.CompareTo(Other.Start)
167+
End Function
168+
End Structure
139169
End Namespace

SCrawler.YouTube/Base/YouTubeSettings.vb

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -319,8 +319,11 @@ Namespace API.YouTube.Base
319319
Description("Convert non-AVC codecs (eg 'VP9') to AVC. Not recommended due to high CPU usage!")>
320320
Public ReadOnly Property DefaultVideoConvertNonAVC As XMLValue(Of Boolean)
321321
<Browsable(True), GridVisible, XMLVN({"DefaultsVideo"}, False), Category("Defaults Video"), DisplayName("Embed thumbnail (video)"),
322-
Description("Embed thumbnail in the video as cover art. Default: true.")>
322+
Description("Embed thumbnail in the video as cover art. Default: false.")>
323323
Public ReadOnly Property DefaultVideoEmbedThumbnail As XMLValue(Of Boolean)
324+
<Browsable(True), GridVisible, XMLVN({"DefaultsVideo"}, True), Category("Defaults Video"), DisplayName("Embed chapters"),
325+
Description("Embed chapters in the video. Default: true.")>
326+
Public ReadOnly Property DefaultVideoEmbedChapters As XMLValue(Of Boolean)
324327
<Browsable(True), GridVisible, XMLVN({"DefaultsVideo"}), Category("Defaults Video"), DisplayName("Include zero size formats"),
325328
Description("Include formats with zero size (or undefined size).")>
326329
Public ReadOnly Property DefaultVideoIncludeNullSize As XMLValue(Of Boolean)
@@ -496,6 +499,26 @@ Namespace API.YouTube.Base
496499
Description("Additional format for downloading subtitles. This means that all subtitles will be converted to the formats you choose and saved as separate files.")>
497500
Public ReadOnly Property DefaultSubtitlesFormatAddit As XMLValuesCollection(Of String)
498501
#End Region
502+
#Region "Trim"
503+
<Browsable(True), GridVisible, XMLVN({"DefaultsTrim"}, False), Category("Defaults Trimming"), DisplayName("Delete original file"),
504+
Description("If true, the original file will be deleted after trimming")>
505+
Public ReadOnly Property TrimDeleteOriginalFile As XMLValue(Of Boolean)
506+
<Browsable(True), GridVisible, XMLVN({"DefaultsTrim"}, False), Category("Defaults Trimming"), DisplayName("Add to M3U8"),
507+
Description("If true, the trimmed files will be added to the M3U8 playlist (if selected)")>
508+
Public ReadOnly Property TrimAddTrimmedFilesToM3U8 As XMLValue(Of Boolean)
509+
<Browsable(True), GridVisible, XMLVN({"DefaultsTrim"}, False), Category("Defaults Trimming"), DisplayName("Separate folder"),
510+
Description("Place the trimmed files in a separate folder")>
511+
Public ReadOnly Property TrimSeparateFolder As XMLValue(Of Boolean)
512+
Friend Const TrimSeparateFolderNameDefault As String = "Trim"
513+
<Browsable(True), GridVisible, XMLVN({"DefaultsTrim"}, TrimSeparateFolderNameDefault), Category("Defaults Trimming"), DisplayName("Separate folder name"),
514+
Description("Name of a separate folder")>
515+
Public ReadOnly Property TrimSeparateFolderName As XMLValue(Of String)
516+
#End Region
517+
#Region "Errors"
518+
<Browsable(True), GridVisible, XMLVN({"Errors"}, True), Category("ERRORS"), DisplayName("Ignore downloading errors"),
519+
Description("Ignore download errors if some files are missing (e.g. subtitles) and continue downloading")>
520+
Public ReadOnly Property ErrorsIgnore As XMLValue(Of Boolean)
521+
#End Region
499522
#End Region
500523
#Region "Initializer"
501524
Public Sub New()

SCrawler.YouTube/Controls/ChaptersForm.Designer.vb

Lines changed: 158 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<root>
3+
<!--
4+
Microsoft ResX Schema
5+
6+
Version 2.0
7+
8+
The primary goals of this format is to allow a simple XML format
9+
that is mostly human readable. The generation and parsing of the
10+
various data types are done through the TypeConverter classes
11+
associated with the data types.
12+
13+
Example:
14+
15+
... ado.net/XML headers & schema ...
16+
<resheader name="resmimetype">text/microsoft-resx</resheader>
17+
<resheader name="version">2.0</resheader>
18+
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
19+
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
20+
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
21+
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
22+
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
23+
<value>[base64 mime encoded serialized .NET Framework object]</value>
24+
</data>
25+
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
26+
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
27+
<comment>This is a comment</comment>
28+
</data>
29+
30+
There are any number of "resheader" rows that contain simple
31+
name/value pairs.
32+
33+
Each data row contains a name, and value. The row also contains a
34+
type or mimetype. Type corresponds to a .NET class that support
35+
text/value conversion through the TypeConverter architecture.
36+
Classes that don't support this are serialized and stored with the
37+
mimetype set.
38+
39+
The mimetype is used for serialized objects, and tells the
40+
ResXResourceReader how to depersist the object. This is currently not
41+
extensible. For a given mimetype the value must be set accordingly:
42+
43+
Note - application/x-microsoft.net.object.binary.base64 is the format
44+
that the ResXResourceWriter will generate, however the reader can
45+
read any of the formats listed below.
46+
47+
mimetype: application/x-microsoft.net.object.binary.base64
48+
value : The object must be serialized with
49+
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
50+
: and then encoded with base64 encoding.
51+
52+
mimetype: application/x-microsoft.net.object.soap.base64
53+
value : The object must be serialized with
54+
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
55+
: and then encoded with base64 encoding.
56+
57+
mimetype: application/x-microsoft.net.object.bytearray.base64
58+
value : The object must be serialized into a byte array
59+
: using a System.ComponentModel.TypeConverter
60+
: and then encoded with base64 encoding.
61+
-->
62+
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
63+
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
64+
<xsd:element name="root" msdata:IsDataSet="true">
65+
<xsd:complexType>
66+
<xsd:choice maxOccurs="unbounded">
67+
<xsd:element name="metadata">
68+
<xsd:complexType>
69+
<xsd:sequence>
70+
<xsd:element name="value" type="xsd:string" minOccurs="0" />
71+
</xsd:sequence>
72+
<xsd:attribute name="name" use="required" type="xsd:string" />
73+
<xsd:attribute name="type" type="xsd:string" />
74+
<xsd:attribute name="mimetype" type="xsd:string" />
75+
<xsd:attribute ref="xml:space" />
76+
</xsd:complexType>
77+
</xsd:element>
78+
<xsd:element name="assembly">
79+
<xsd:complexType>
80+
<xsd:attribute name="alias" type="xsd:string" />
81+
<xsd:attribute name="name" type="xsd:string" />
82+
</xsd:complexType>
83+
</xsd:element>
84+
<xsd:element name="data">
85+
<xsd:complexType>
86+
<xsd:sequence>
87+
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
88+
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
89+
</xsd:sequence>
90+
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
91+
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
92+
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
93+
<xsd:attribute ref="xml:space" />
94+
</xsd:complexType>
95+
</xsd:element>
96+
<xsd:element name="resheader">
97+
<xsd:complexType>
98+
<xsd:sequence>
99+
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
100+
</xsd:sequence>
101+
<xsd:attribute name="name" type="xsd:string" use="required" />
102+
</xsd:complexType>
103+
</xsd:element>
104+
</xsd:choice>
105+
</xsd:complexType>
106+
</xsd:element>
107+
</xsd:schema>
108+
<resheader name="resmimetype">
109+
<value>text/microsoft-resx</value>
110+
</resheader>
111+
<resheader name="version">
112+
<value>2.0</value>
113+
</resheader>
114+
<resheader name="reader">
115+
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
116+
</resheader>
117+
<resheader name="writer">
118+
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
119+
</resheader>
120+
<metadata name="CONTAINER_MAIN.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
121+
<value>False</value>
122+
</metadata>
123+
<metadata name="TP_MAIN.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
124+
<value>False</value>
125+
</metadata>
126+
<metadata name="TP_BUTTONS.GenerateMember" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
127+
<value>False</value>
128+
</metadata>
129+
</root>

0 commit comments

Comments
 (0)