I have some video streams I am able to get running in a VLC window and attach it to a QT widget - which is all fantastic.
Some of these video streams though are oriented differently than others, and I cannot figure out how to set the orientation - so some of my videos are displaying sideways.
Does anyone know how I can change this?
Not all of the vlc options are available (exposed) using vlc.py.
I am not aware of a method of orienting a video at the media level. This has to be done using the vlc.Instance.
This pre-supposes that you know the orientation required beforehand.
There are 2 options that I am familiar with:
--video-filter=rotate --rotate-angle=nnn.n
and
--video-filter=transform --transform-type=type
where type is one of {90,180,270,hflip,vflip,transpose,antitranspose}
code examples would be:
vlc.Instance('--no-xlib --quiet --video-filter=rotate --rotate-angle=90.0')
and
vlc.Instance('--no-xlib --quiet --video-filter=transform --transform-type=vflip')
Related
I am using ffmpeg to take screenshots of a video file. It seems some video files end up looking squished because ffmpeg is automatically rescaling them for some reason. I am using a python package to do this, not the CLI tool. The only options I am using are specifying the timestamp to capture and quiet output. I am try to get a lossless shot. I don't know why it is resizing automatically. I tried using the force_original_aspect_ratio option and setting it to -1 but it does not work without specifying the height. Is there any way to prevent this from happening without needing to provide the height? I can do that for my script but it seems unnecessary. It should just keep it as-is.
EDIT:
BTW, the video is 720x480. Oddly, the metadata on the video and the screen shot are both 720x480. However I lined them up and the video is clearly wider. VLC takes a screenshot just fine. Someone told me ffmpeg just has issues with SD files. I don't know.
I'm using ffmpeg to process video files using Python, but I want to be able to open a local video file and use a few sliders to control the timeline in the video, that way I can get the timestamp from where those sliders were moved.
The goal is to get the beginning and end time of the set positions using the sliders, that way I can cut the video at those times using ffmpeg.
Any help would be appreciated...
Thanks
I ended up using python-vlc which works great in Tkinter.
Here's an example VLC has on their website which was a big help.
http://git.videolan.org/?p=vlc/bindings/python.git;a=blob;f=examples/tkvlc.py;h=55314cab09948fc2b7c84f14a76c6d1a7cbba127;hb=HEAD
Here you can find the documentation:
https://wiki.videolan.org/PythonBinding
I am currently working on a hobby project, which is video streaming from an IP camera (Giroptic 360) on RaspberryPi 3 board via RTSP.
I am particularly interested in its URL link used to connect to said camera:
rtsp://[IP address]:[Port]/PSIA/Streaming/channels/2?videoCodecType=H.264
I am wondering if there's such a thing as changing the streamed resolution directly from the URL link (by adding more parameters?) and if there's any more extra functionalities available through the URL link?
** I have tried changing the resolution via openCV's
cap.set(CAP_PROP_FRAME_WIDTH, 1000)
cap.set(CAP_PROP_FRAME_HEIGHT, 500)
But it still gave me the default 2048x1024 resolution.
No, you won't have anyway of commanding via the RSTP link using the opencv built in functions. These work at driver level and all the RTSP link provides is a place to pull frames from.
If you want to resize the images, you can do this after you grab the frame using OpenCV resize
If you want to size the stream itself, then you will need to recode the stream at the source i.e. go into the settings and change it. Although you may not have access to this if it is somebody elses stream, you dont have permissions etc.
Background
I'm attempting to craft a simple video playback script for a small cinema that automates the playing of videos and control of the projector, sound and lighting systems. I have two video outputs, one goes to a monitor in the projection booth, and the other directly to the projector. I desire to play video (and only video) fullscreen to the projector while putting controls and a small (~1/4 screen) preview on the monitor. This will allow the projectionist to view the video being output and control the playback from the monitor in the booth while all the audience ever sees is the video output.
Problem
I am currently using Python to control VLC player (with libvlc Python bindings) to playback videos. I have everything working fine except that I can't figure out how to get a preview (direct copy) of the video being played fullscreen on the projector output into my GUI.
I have tried using the clone filter, but I cant get the cloned window to automagically appear full screen nor in my GUI. The clone filter seems like the logical choice but it seems to be VERY inflexible when it comes to specifying destination screens, fullscreen, etc. I must be able to open video windows full screen on the projector monitor. Professionalism is key and it would look bad if the projectionist had to drag a window over and double click on it when the movie started.
Currently Using:
Debian Linux
Python 2.7
wxPython
libvlc
I would like to continue using Python as I already have the code for controlling the projector, sound processor, lighting and curtain written and tested. I chose VLC because it really seems bulletproof when it comes to video playback but am not committed to it's continued use. I also chose wxWidgets for my GUI as a result of past experience but I am not stuck on that either.
This describes the direct solution and does not concentrate on any alternative or the overall design of your application.
As Your Application and VLC media player are separate processes, you will not be able to get what you want directly because there is no "shared memory" between those 2 applications. The best shot to "copy" the decoded frames from VLC will be to e.g. send a RAW Video .mts stream (ts is usually used for this kind of usecase) and send e.g. to udp://localhost:1234.
In your application, you will need to be able to receive the ts stream, "decode" it and display at the spot of interest.
For start, i would try if you are able to do this using 2 vlc players that you control manually. When you achieved that the first VLC streams to udp and outputs on the main display at the same time, and the other VLC player receives and plays the udp stream you can go on:
Find a player library that you can use directly in your wxpython application and check if it can receive the udp stream as well E.g.
https://wxpython.org/Phoenix/docs/html/wx.media.MediaCtrl.html
This player lib for example requires gstreamer as a base.
As a result, main display and the picture in your applicatoin might have a latency of some seconds. To come around this latency, the best way that i currently know is using WebRTC but this is a lot more complex setup than the above.
https://www.sipwise.org/news/technical/tv-over-webrt/
Sure in case you do some "encoding" for WebRTC or even for UDP, you would need to utilize some hardware encoder, e.g. Nvidia NVENC in order to be able to guarantee the needed resources are always there.
I'm developing a screen shot utility in Python. At the moment it is specifically for Linux. So far I have the ability to take a screen shot of the full desktop, and have it upload to Imgur, then copy the link to clipboard. Now I want to expand into functions such as screen shots of the active window, or of a specific selection. If anyone could help, I'd love to know what kind of module would work best for this, and how to implement such a module.
The functionality will depend on what you are using for image grabbing.
With PIL
http://effbot.org/imagingbook/imagegrab.htm
With GTK
To take a screenshot of active window :
http://faq.pygtk.org/index.py?req=show&file=faq23.039.htp
Also look at the pixbuf api
http://library.gnome.org/devel/gdk-pixbuf/
http://developer.gimp.org/api/2.0/gdk-pixbuf/gdk-pixbuf-gdk-pixbuf.html
Off topic
There are some screen cast tools: http://pypi.python.org/pypi/castro/1.0.4