arthurhammer / framegrabber Goto Github PK
View Code? Open in Web Editor NEWiOS app to extract video frames as images
Home Page: https://framegrabberapp.com
License: Other
iOS app to extract video frames as images
Home Page: https://framegrabberapp.com
License: Other
Hi Arthur
First of all I want to say that I really enjoyed looking through your project. It is very well organized and cleanly written.
It was quite helpful to refresh my memory on how AVAssetImageGenerator works.
That said, I had issues using the FrameExport class, specifically the generateAndExportFrames
method. While efficient, it produced out of sequence files, so that reassembling the sequential output produced a stuttering animation.
I am still looking into this, but perhaps you've already encountered this issue, and know how to resolve it?
I am exporting a .mov file so that I can create an animated UIImage. I create the animation by loading the exported frames sequentially into UIImage.animatedImages. What I'm finding is that the exported images move forward, then a little back, and then forward again over and over again...
On line 50 of FrameExportOperation.swift:
let frameIndex = self.frameStartIndex + countProcessed
this index is used to determine the output filename for the processed frame. Because files are processed in chunks (of 5) any of these files can be ready/completed out of sequence. Presumably the easiest to process of the 5 will be ready first and will get the next available sequence/frame/index number. This would account for the out-of-sequence images.
I grabbed ffmpeg and used the following command:
ffmpeg -i "IMG_3689.mov" "frames/out-%03d.jpg"
and the results gave me a series of files in the correct order and they animate fine in my UIImageView. That told me it is possible to extract the frames in the correct order.
I changed the chunk size to 1, presuming that this would eliminate any concurrency, and that the indexes would be in correct sequence. But this didn't solve the problem. (if it had, I would have determined the fix and sent you the code)
So I don't know if this is a bug in AVAssetImageGenerator.generateCGImagesAsynchronously (I don't find anything online, so I don't think this is the case), or if there might be some concurrency going on that I didn't notice.
I will continue to look into this an keep you updated, but I don't want to waste my time if this is an issue you've already addressed.
The next thing I will try is either:
Let me know if you have any thoughts, ideas, frustrations, encouragement....
M
Any idea why OneDrive app seemingly cannot see and upload the saved photos? I tried exporting both using heic and jpg and neither gets auto uploaded. Not sure if this is FrameGrabber or OneDrive issue yet. Thanks!
Sometimes I see a nice video in the photos app. I would like to send the video to Frame Grabber.
Currently, there is no way.
By the way, I'm a supporter of this project.
By the way2, it's not easy to add something to the share menu in Swift but since you wanted to learn Swift it might be a good exercise ;)
Hi, thanks for the app, it’s very handy.
When extracting a frame from an HDR video the resulting image loses the HDR and it is dimmed, overexposed/underexposed, etc. Is there anything you could do to preserve the HDR? I think this could add value to your app since the screenshots on iOS can’t capture the HDR either and there is no way to do so on iOS.
Edit. I understand this is not that easy and I don’t want to bother anyway
Whenever trying to export a frame on iPad Pro 2020 (iPad8,11, iOS 13.5), the app (1.2.1) crashed. I’m on jailbroken device, so here’s the log:
Process: Frame Grabber
Bundle id: de.arthurhammer.framegrabber
Device: iPad Pro (12.9-inch) (4th generation), iOS 13.5
Bundle version: 1.2.1
Exception type: NSGenericException
Reason: UIPopoverPresentationController (<UIPopoverPresentationController: 0x153234720>) should have a non-nil sourceView or barButtonItem set before the presentation occurs.
Culprit: Unknown
Call stack:
0 CoreFoundation 0x00000001bde0e314 0x1bdcdc000 + 0x132300 // __exceptionPreprocess
1 libobjc.A.dylib 0x00000001bdb22c1c 0x1bdb1d000 + 0x5c1c // objc_exception_throw
2 UIKitCore 0x00000001c17ff79c 0x1c14e8000 + 0x31779c // __66-[UIPopoverPresentationController presentationTransitionWillBegin]_block_invoke
3 UIKitCore 0x00000001c1809b38 0x1c14e8000 + 0x321b38 // __71-[UIPresentationController _initViewHierarchyForPresentationSuperview:]_block_invoke
4 UIKitCore 0x00000001c1807650 0x1c14e8000 + 0x31f650 // __56-[UIPresentationController runTransitionForCurrentState]_block_invoke.478
5 UIKitCore 0x00000001c1f60e0c 0x1c14e8000 + 0xa78e0c // _runAfterCACommitDeferredBlocks
6 UIKitCore 0x00000001c1f50338 0x1c14e8000 + 0xa68338 // _cleanUpAfterCAFlushAndRunDeferredBlocks
7 UIKitCore 0x00000001c1f81b1c 0x1c14e8000 + 0xa99b1c // _afterCACommitHandler
8 CoreFoundation 0x00000001bdd88ee8 0x1bdcdc000 + 0xacee8 // __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__
9 CoreFoundation 0x00000001bdd83b78 0x1bdcdc000 + 0xa7b78 // __CFRunLoopDoObservers
10 CoreFoundation 0x00000001bdd84018 0x1bdcdc000 + 0xa8018 // __CFRunLoopRun
11 CoreFoundation 0x00000001bdd838f4 0x1bdcdc000 + 0xa78f4 // CFRunLoopRunSpecific
12 GraphicsServices 0x00000001c819a604 0x1c8197000 + 0x3604 // GSEventRunModal
13 UIKitCore 0x00000001c1f57358 0x1c14e8000 + 0xa6f358 // UIApplicationMain
14 Frame Grabber 0x00000001045b8284 Frame Grabber + 33412
15 libdyld.dylib 0x00000001bdbff2dc 0x1bdbfe000 + 0x12dc // start
Do let me know if you needs any further information, thank you for this amazing app :)
Hi,
Would it be possible to choose to have the time at the top when choosing a frame be shown as mm.ss.ff as in Final Cut Pro X instead of mm.ss.cc (ff for frame, cc for centiseconds)? This would ideally be an option that could be toggled.
I apologize for posting here, I couldn't find any other way to contact you.
Frame Grabber is one of my favorite iOS apps. But now it's been made into another horrible subscription app.
What happened to the great app? Did you have to sell it?
I am very sad and upset at what the app has become... 😢
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.