dfaker / webmgenerator Goto Github PK
View Code? Open in Web Editor NEWUI and Automation to cut, filter and join high quality webms, mp4s or gifs.
License: Mozilla Public License 2.0
UI and Automation to cut, filter and join high quality webms, mp4s or gifs.
License: Mozilla Public License 2.0
In the event of finding a higher quality video source, it would be handy to be able to replace a video file or export the subclip info to be imported into another project.
Thanks for your work on this, it's extremely useful.
Again, suggestion is the title. Maybe also adjusting speed of the filter preview. I feel like this was something that was in earlier versions that was removed.
Also, is there a way to add a copied filter to another subclip without erasing existing filters?
It's hard to differentiate vertical black bars on a video from the also black background of the canvas.
I'd love an option somewhere, in the config file maybe to be able to change the canvas' color.
If you choose the Stream Copy merge style the cutout segment are not sliced at the correct timestamp. Let me know if u cant reproduce it.
I think most people don't use weird non-standard resolutions, so most the time it'll be the usual 16:9 aspect ratio, 360p / 480p / 720p / 1080p and so on.
Personally, I would appreciate some sort of a drop down menu with the common resolutions listed above just to quickly Scale to one of these without having to type it in everytime.
Of course, that would be while keeping the option to enter custom resolutions.
What do you think?
Also, very quick thing but, how about swapping places for height and width boxes in that filter ? Usually we write width first and height second, so it's kinda weird to have height first and width second here.
Title says it all. Purely a minor convenience suggestion.
Also when playing a file, it might be helpful if the play button switched between play and pause.
Another thing was in the filters tab, maybe having a set of aspect ratios that can be used for crop, or even the ability to save your own crop presets, or other filters. Maybe an export/import filters feature?
Cheers for the program, always impressed with your work.
I used a SRT format subtitles on a video using the subtitles filter. I made the subs using Aegisub 3.2.2.
Basically, last line of subs currently on display will remain on screen until it is replaced by another line, instead of disappearing at registered end timing.. Essentially, it's like it doesn't recognize the end timing of subtitle lines.
On webmGenerator v.3.11.3
Would be nice if we could either choose an automated tag to title names, or if we could just turn it off.
To be honest I'm not even sure that this is how it works.
But, to create a new json filter template, we're supposed to arrange our filters how we want them and then hit "export json", and it should let me save the json file to the filterTemplates directory, right ?
Because I'm clicking "export json" and nothing is happening.
I thought it might be because I have WebMGenerator located on my C:\ drive and it might not have had permission without being run as admin or something, but running it as admin doesn't change anything.
Or am I completely mistaken about how I'm supposed to create a new template ?
Don't like that? Try learning to bake some utility into the UI.
So I'm not super well versed in everything video format and all that, but basically I have these videos that are 1440x1080 but are being displayed as 16:9 (as they should), the only thing is that when using drawtext, the text will also get stretched as you can see.
Hopefully it's possible to have the text remain consistent even when dealing with that kind of format / resolution 😊
That is, if you higlight the text and let's say you changed your mind about down scale and want to type back "1.0" well yeah that will crash.
On latest v3.6.0.
Since updating to 3.10.0, selecting a font doesn't work anymore in the drawtext filter.
When I select my desired font and click "Open", the selection window closes as normal, but the font isn't changed, and stays the default Quicksand. I've tried loading fonts from different locations but it doesn't change anything.
console.txt
debug.log
Windows 11 build 22000.194
I'm not sure if it's normal or not (ass format not yet implemented for example)
But I tried making some ASS subs and they plain didnt work. When launching the encode process, each webm juste "stopped" at half encode completion.
So everything seems to work fine but when looking into the finalVideos folder, there's nothing there.
Which is weird because the play button next to the converted webms in WebmGenerator to preview them once complete, does work, and you can view them.
They really just don't appear in the finalVideos folder and thus are not accessible, which makes WebmGenerator essentially unusable.
I've tried to see if they were marked as hidden files for some reason and they're not. I use a File Explorer replacement called "Files" and I thought it might be an issue with it rather than webmGenerator, so I looked with regular File Explorer too and the result is the same.
Webm completed successfully.
Nothing inside finalVideos folder nor tempVideoFiles.
Specs:
Windows 11 x64 21H2 build 22000.120
WebmGenerator/src/webmGeneratorController.py
Line 124 in e39dce4
This line of code overwrites the titleMetadataSuffix setting from configuration.json.
The "Append' feature is great, but sometimes I really wish there was an "Append to all" feature, like there is an "Apply to all" one. It would have saved me lots of time. Many a time I have realized I wanted to add the same filter to all other cuts without overriding what filters they already had, but then I have to do that manually like: "Append, next one, append, next one, append [...]" x145 😭
Really tedious.
I have been a couple times in the situation where I just launched the encoding for a big batch of encodes only to realize I messed up a filter on all of them or something, and then had to manually click on "cancel" a hundred times over. Well that wasn't very fun to say the least 😂Anyways, do you think it could be possible to implement something like that ?
I know, 90% of my issues are with drawtext 🤣
Anyways.
'
doesn't display at all. For example, input don't
and it displays dont
;
"
stops the text that follows from showing. For example, input Hello"World
and it displays Hello
;
:
stops the text before it from showing. For example, input Hello:World
and it displays World
;
Title basically. If you load a subtitle file on a cut during which no subtitles lines appear, it seems that this prevents the cut from encoding.
It stays open with the following text.
2021-09-13 17:16:27,048 [MainThread ] [INFO ] CutselectionController destroyed
2021-09-13 17:16:27,125 [MainThread ] [ERROR] root.destroy() Exception
Traceback (most recent call last):
File "K:\WebmGenerator\src\webmGeneratorController.py", line 199, in close_ui
File "C:\Users\baxter001\AppData\Local\Programs\Python\Python37\lib\tkinter\__init__.py", line 2062, in destroy
_tkinter.TclError: can't invoke "destroy" command: application has been destroyed
2021-09-13 17:16:27,126 [MainThread ] [INFO ] DONE
QUIT
[processus terminé avec le code 1]
Using the traditional Windows CMD works fine but if you use the new Windows Terminal (Preview version in my case) it doesn't close by itself afterwards.
EDIT: I meant, if you have Windows Terminal enabled to be used as default terminal / command line aplication. On Windows 11 build 22000.184.
Instead of the usual "None", if you select nothing, then the button is just blank and any encoding will not work.
It would be cool to be able to add custom encode profiles in the configuration file like so:
{
"statsWorkers": 1,
"encodeWorkers": 1,
"imageWorkers": 2,
"tempFolder": "tempVideoFiles",
"tempDownloadFolder": "tempDownloadedVideoFiles",
"defaultAutosaveFilename": "autosave.webgproj",
"defaultProfile": "None",
"customProfiles": [
{
"name": "custom profile 420",
"format": "webm:vp9",
"maxSize": 10
}
]
}
Inputting a time frame for where you want scene recognition to occur. Could be helpful if you only need to export clips from a particular area, without needing to scan the entire file.
Sort of related, but I was wondering about arrow keys and if they could be frame back rather than being 5ms. I think it would help ensure files loop between the appropriate start and end without a random scene popping in at the start or end.
I've been getting this error for some reason. It was working fine till now. I don't remember making any changes to break something. I've attached part of the log below. Full logs here: https://pastebin.com/gii55L5M
Complete Pass 1 Encode Pass 2 ed_1.mp4 0.75
2022-03-24 17:16:38,113 [Thread-6 ] [ERROR] unhandled CONCAT exception
Traceback (most recent call last):
File "K:\WebmGenerator\src\ffmpegService.py", line 1004, in encodeWorker
File "K:\WebmGenerator\src\ffmpegService.py", line 973, in encodeConcat
File "K:\WebmGenerator\src\encoders\mp4x264Encoder.py", line 133, in encoder
File "K:\WebmGenerator\src\optimisers\linear.py", line 31, in encodeTargetingSize
File "K:\WebmGenerator\src\encoders\mp4x264Encoder.py", line 124, in encoderFunction
FileNotFoundError: [WinError 2] The system cannot find the file specified: 'tempVideoFiles\\ed_1.mp4'
And strangely enough it persists even after closing and reopening WebmGenerator.
I can reproduce it reliably. I've tried with videos from instagram, youtube and twitter and it always fails to download a second time.
Since the subclips in the filter tab are numbered, it would be helpful if the subclips on the merge tab correlate. Makes exporting specific clips easier than having to count each subclip yourself.
I was also wondering if there was any benefit to a global filter disable/enable button, maybe on the merge screen. This is likely a personal use case, as I tend to export an unfiltered version of clips, then a second export with filters. This is done easily if I remember to export clips before I go through and add filters, but sometimes i'll either go back and add more subclips, which affects the numbered order of files, or i'll just forget.
Not sure if I've mentioned this before, but when you disable a subclip's filter and click to the next or previous clip, when you click back to that initial subclip the disabled filters reenable. So if I want to go back and turn off filters, I have to go through individually in one direction, and hope that I spent enough time on the subclip for it to load changes on the merge tab. Again, likely specific issues with my own methods, so no pressure if you disregard.
Some minor suggestions are less about usage, but I noticed in the filter options, "synchronization" is misspelled. Also on the main github page, available is misspelled in the Join section. Extremely pedantic on my end.
Thanks for tolerating my posts, your tool is extremely well made and I appreciate your work.
When I use the Load URL button and enter the link to a YouTube video two clips are added but neither work.
Trying to load the URL again works as normal, as it's from the version stored in the temp folder.
This happens nearly every time, sometimes the top clip works as normal on the first download.
Video of the issue: https://files.catbox.moe/pvjqd0.mp4
Log:
2022-03-01 01:33:04,884 [Thread-5 ] [ERROR] Image worker Exception
Traceback (most recent call last):
File "C:\WebmGenerator-win64\src\ffmpegService.py", line 74, in imageWorker
videoInfo = getVideoInfo(cleanFilenameForFfmpeg(filename))
File "C:\WebmGenerator-win64\src\encodingUtils.py", line 31, in cleanFilenameForFfmpeg
return getShortPathName(os.path.normpath(filename))
pywintypes.error: (2, 'GetShortPathNameW', 'The system cannot find the file specified.')
2022-03-01 01:33:05,385 [Thread-4 ] [ERROR] Image worker Exception
Traceback (most recent call last):
File "C:\WebmGenerator-win64\src\ffmpegService.py", line 74, in imageWorker
videoInfo = getVideoInfo(cleanFilenameForFfmpeg(filename))
File "C:\WebmGenerator-win64\src\encodingUtils.py", line 31, in cleanFilenameForFfmpeg
return getShortPathName(os.path.normpath(filename))
pywintypes.error: (2, 'GetShortPathNameW', 'The system cannot find the file specified.')
What I mean is that the last remembered location for file picking is shared between all file picking scenarios.
So, if I open WebmGenerator and pick a video to open from my Videos folder, when I eventually go and add a filter that requires to pick a font to use, the file picker will open in my previously visited Videos folder. And vice-versa, next time I open WebmGenerator, when I go to open a video file, it'll open in the directory where I picked my font previously. This behavior creates a lot of unnecessary navigating when picking a video or a font in succession, for example.
Suggestion 1, my personaly preferred one:
Have a setting to set a default folder to open when picking a file depending on the button.
Default location to open for Load Videos, default location to open for fonts...
Suggestion 2:
Make remembering the last folder visited in file picker button specific. As in, Load Videos button will remember its own last visited folder. Font picker for drawtext for example will remember it's own last visited folder as well.
Yeah, title basically. Sometimes I'm including some of this info, the complete video title most of the time, as text on the video. And it'd be handy to be able to just switch to Cuts tabs and copy it from there. Instead of having to go take it from file explorer / file properties.
And it seems to only happen with videos from Youtube.
I've tried with Dailymotion and Vimeo and they both download at a full 1080p just fine.
So I'm guessing that's an issue with yt-dlp too ?
The tool does re-encode video, even though video stream should be untouched. If the contraints like max filesize and resolution allow for it, there can be huge performance gains had by just copying the video stream.
Standalone ffmpeg:
ffmpeg -i INFILE.mp4 -vcodec copy -ss 00:01:00.000 -t 00:00:10.000 OUTFILE.mp4
Hey, I thought I was doing something wrong for quite a while when using the grid mode, I just intuitively assumed that all clips would loop until the longest clip in the grid played at least once or even up to "Target Length" seconds -- what actually seems to happen is that the video just ends after the duration of the shortest clip. From what I've seen, there are also no filters to loop or repeat slices up to a set duration. Am I missing something?
I've had the bad experience of missclicking on "Apply to all" filter button and ruining a 50+ batch of webms with different filters each more than one time. Now, that was my fault of course, but I was thinking about how to prevent potential missclicking on that button which is very close to other frequently used buttons. And especially when doing a lot of webms one after the other, it gets repetitive and we are more prone to small errors.
Maybe a confirmation dialog popup on "Apply to all" would be something to consider ?
Or maybe implementing a way to revert the last changes made à la CTRL+Z ?
Or just moving the button itself away. But that would be weird because while it's probably used less often than it's neighbours, it's still part of that same group of action so it makes sense for it to be there.
I don't know, something to think about maybe :)
Title is pretty much the issue. It's a little annoying to have to keep the video playing when I'm just trying to clarify an interest point or subclip starting point.
So basically ever since 3.8.7 python has changed how it treads str() for tkinter.EventType
https://docs.python.org/release/3.8.7/whatsnew/changelog.html
So if you debug with a modern version of python pieces of code like:
if (str(e.type) in ('ButtonRelease'))
Will simply not work as indented as str(e.Type)
it will only return the position in the enum as a string instead of "ButtonRelease".
Instead change it to:
if (e.type ==tk.EventType.ButtonRelease)
Start by refactoring this issue in
TimeLineSelectionFrameUI
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.