Rich_Morin
Extracting selected images from downloaded video files?
I want to extract selected images from downloaded video files. I’d like to know whether Membrane is a reasonable tool for this job, whether anyone else has done similar tasks with it, etc. I’m also unsure about how its “pipeline” approach would fit a “random access” use case.
For purposes of discussion, assume that I’ll be using VLC media player to download videos from web sites such as YouTube, storing them as MP4 files. Because I’ll be processing the images, I’d like to get them into Nx tensor format.
Can someone give me some advice, clues, and/or suggestions?
Most Liked
kip
As of image version 0.21.0 which I just published you can leverage the Evision.VideoCapture module to extract images from a video.
You can therefore use either the more idiomatic API in Image.Video or simply leverage the code that is there to use Evision directly.
Depending on the codec support of the OpenCV installation on your system I suspect you may not need to use the FFMEG CLI approach any more.
Example using Image
# Extract using a frame offset
iex> {:ok, video} = Image.Video.open("./test/support/video/video_sample.mp4")
iex> {:ok, _image} = Image.Video.image_from_video(video, frame: 0)
# Extract using a millisecond offset
iex> {:ok, _image} = Image.Video.image_from_video(video, millisecond: 0)
# Capturing images from a camera (note that seeking is not supported
# on image streams. On MacOS you will receive a prompt to permit the
# app to access the camera. You may need to restart the BEAM and/or
# your system if capturing fails immediately after granting permission.
iex> {:ok, video} = Image.Video.open(:default_camera)
iex> {:ok, _image} = Image.Video.image_from_video(video)
Example using Evision directly
# Extract by frame offset
video = Evision.VideoCapture.videoCapture(video_filename)
true = Evision.VideoCapture.set(video, Evision.cv_CAP_PROP_POS_FRAMES(), frame_offset),
cv_image = Evision.VideoCapture.read(video)
Using images in Nx
Both Image and Evision support zero-copy “export” of images to Nx. Just call Image.to_nx/1 or Evision.Mat.to_nx/1 as appropriate.
kwando
I would use ffmpeg to extract images from the video files. Could probably skip VLC and use ffmpeg directly as well.
Then loading the extracted images from disk and do whatever I have to do in nx ![]()
Probably not gonna be the most efficient way of doing it, but might be good enough ![]()
No idea on how membrane works.
kokolegorille
I am also using ffmpeg to extract images from video, there is a ffmpex wrapper, but I wrote a simple one.
Membrane is good if You want to receive or stream rtmp, or webrtc…
But for YT, I would check this python package, and maybe use erlport to interface python script.
https://github.com/pytube/pytube
There are tools to transform images from/to nx…
by @kip
and
by @cocoa
Popular in Questions
Other popular topics
Latest Membrane Threads
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #elixirconf-us
- #advent-of-code
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #security
- #hex









