Newest 'ffmpeg' Questions - Stack Overflow
Les articles publiés sur le site
-
Ffmpeg map and filter_complex subprocess - Python
4 décembre 2015, par jlarschI want to crop and re encode videos via ffmpeg from within python using subprocesses.
I managed starting a subprocess using a pure string command and shell=True but I want to build more complex commands and would prefer to use shell=False and passing a list of arguments.
So what works is this form (this is a simplified example, there will be multiple streams in the final version):
import subprocess as sp sp.Popen('ffmpeg.exe -i Test.avi -filter_complex "[0:v]crop=1024:1024:0:0[out1]" -map [out1] out1.mp4', shell=True)
This script produces the expected cropped output video.
For a list of arguments, I tried:
FFMPEG_PATH = 'ffmpeg.exe' aviP='Test.avi' sp.Popen([FFMPEG_PATH, '-i', aviP, '-filter_complex', '[0:v]crop=1024:1024:0:0[out1]', '-map', '[out1] out1.mp4'])
When I execute this second version, simply nothing happens. (no error, no output)
I suspect I am messing up something in the map command syntax?
-
ffmpeg map and filter_complex subprocess in python
4 décembre 2015, par jlarschI want to crop and re encode videos via ffmpeg from within python using subprocesses.
I managed starting a subprocess using a pure string command and shell=True but I want to build more complex commands and would prefer to use shell=False and passing a list of arguments.
So what works is this form (this is a simplified example, there will be multiple streams in the final version):
import subprocess as sp sp.Popen('ffmpeg.exe -i Test.avi -filter_complex "[0:v]crop=1024:1024:0:0[out1]" -map [out1] out1.mp4', shell=True)
This script produces the expected cropped output video.
For a list of arguments, I tried:
FFMPEG_PATH = 'ffmpeg.exe' aviP='Test.avi' sp.Popen([FFMPEG_PATH, '-i', aviP, '-filter_complex', '[0:v]crop=1024:1024:0:0[out1]', '-map', '[out1] out1.mp4'])
When I execute this second version, simply nothing happens. (no error, no output)
I suspect I am messing up something in the map command syntax?
-
capture image from IP camera through ffmpeg in command line or opencv getting a gray image
4 décembre 2015, par rockycaiNow I have a IP camera. I tried to get a image through ffmpeg (like this : ffmpeg -rtsp_transport tcp -i "my rtsp stream address" -y -f image2 test.jpg ).That's OK! Or I tried to do this through opencv,no problem too.But when I open the stream in vlc,At the same time,I tried to capture the image ,oh,I just got a gray image. why? if I open the stream in vlc two times,that's also OK! If capturing the image and view the rtsp stream together,just got a gray image.Is the reason of IP camera?normal imagegray image
-
FFMPEG Understanding AVFrame::linesize (Audio)
4 décembre 2015, par user3584691As per the doucmentation of AVFrame, for audio, lineSize is size in bytes of each plane and only linesize[0] may be set. But however, am unsure whether lineszie[0] is holding per plane buffer size or is it the complete buffer size and we have to divide it by no of channels to get per plane buffer size.
For Example, when I call
int data_size = av_samples_get_buffer_size(NULL, iDesiredNoOfChannels, iAudioSamples, (AVSampleFormat)iDesiredFormat, 0) ;
For iDesiredNoOfChannels = 2, iAudioSamples = 1024 & iDesiredFormat = AV_SAMPLE_FMT_FLTP data_size=8192. Pretty straightforward, as each sample is 4 bytes and since there are 2 channels total memory will be (1024 * 4 * 2) bytes. As such lineSize[0] should be 4096 for planar audio. data[0] & data[1] should be each of size 4096. However, pFrame->lineSize[0] is giving 8192. So to get the size per plane, I have to do pFrame->lineSize[0] / pFrame->channels. Isn't this behaviour different from what the documentation suggests or is my understanding of the documentaion wrong. -
Java CV 1.0 Webcam video capture :Frame cannot be converted to IplImage
4 décembre 2015, par user17795I am not able to record webcam video (i.e. Capture and Save .avi or .mp4 File) using JavaCV / OpenCV / FFMPEG, what am I doing wrong?
Version used (all 64-bit)
Win 7 , NetBeans8.0.2 , jdk1.7.0_10 , JavaCV 1.0 , OpenCV 3.0.0 , ffmpeg-2.1.1-win64-shared .
My system variables are set to
C:\Program Files\Java\jdk1.7.0_10;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\Program Files (x86)\Intel\OpenCL SDK\2.0\bin\x86;C:\Program Files (x86)\Intel\OpenCL SDK\2.0\bin\x64;C:\Program Files (x86)\MySQL\MySQL Fabric 1.5.4 & MySQL Utilities 1.5.4 1.5\;C:\Program Files (x86)\MySQL\MySQL Fabric 1.5.4 & MySQL Utilities 1.5.4 1.5\Doctrine extensions for PHP\;C:\opencv\build\x64\vc11\bin;C:\ffmpeg\bin
After downloading and setting path variables I added jar files to Netbeans project
C:\opencv\build\java\opencv-300.jar C:\javacv-1.0-bin\javacv-bin\videoinput.jar C:\javacv-1.0-bin\javacv-bin\videoinput-windows-x86_64.jar C:\javacv-1.0-bin\javacv-bin\videoinput-windows-x86.jar C:\javacv-1.0-bin\javacv-bin\opencv.jar C:\javacv-1.0-bin\javacv-bin\opencv-windows-x86_64.jar C:\javacv-1.0-bin\javacv-bin\opencv-windows-x86.jar C:\javacv-1.0-bin\javacv-bin\libfreenect.jar C:\javacv-1.0-bin\javacv-bin\libfreenect-windows-x86_64.jar C:\javacv-1.0-bin\javacv-bin\libfreenect-windows-x86.jar C:\javacv-1.0-bin\javacv-bin\libdc1394.jar C:\javacv-1.0-bin\javacv-bin\junit.jar C:\javacv-1.0-bin\javacv-bin\javacv.jar C:\javacv-1.0-bin\javacv-bin\javacpp.jar C:\javacv-1.0-bin\javacv-bin\hamcrest-core.jar C:\javacv-1.0-bin\javacv-bin\flycapture.jar C:\javacv-1.0-bin\javacv-bin\flycapture-windows-x86_64.jar C:\javacv-1.0-bin\javacv-bin\flycapture-windows-x86.jar C:\javacv-1.0-bin\javacv-bin\flandmark.jar C:\javacv-1.0-bin\javacv-bin\flandmark-windows-x86_64.jar C:\javacv-1.0-bin\javacv-bin\flandmark-windows-x86.jar C:\javacv-1.0-bin\javacv-bin\ffmpeg.jar C:\javacv-1.0-bin\javacv-bin\ffmpeg-windows-x86_64.jar C:\javacv-1.0-bin\javacv-bin\ffmpeg-windows-x86.jar C:\javacv-1.0-bin\javacv-bin\artoolkitplus.jar C:\javacv-1.0-bin\javacv-bin\artoolkitplus-windows-x86_64.jar C:\javacv-1.0-bin\javacv-bin\artoolkitplus-windows-x86.jar
Problem 1:
First program to capture webcam video (display and save to output.avi file) is as given below.It displays webcam and creates output.avi. But after terminating program when I open file output.avi in Media Player it doesn't display anything :)
It doesn't work
import java.io.File; import java.net.URL; import org.bytedeco.javacv.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.indexer.*; import static org.bytedeco.javacpp.opencv_core.*; import static org.bytedeco.javacpp.opencv_imgproc.*; import static org.bytedeco.javacpp.opencv_calib3d.*; import static org.bytedeco.javacpp.opencv_objdetect.*; public class JCVdemo3 { public static void main(String[] args) throws Exception { // Preload the opencv_objdetect module to work around a known bug. Loader.load(opencv_objdetect.class); // The available FrameGrabber classes include OpenCVFrameGrabber (opencv_videoio), // DC1394FrameGrabber, FlyCaptureFrameGrabber, OpenKinectFrameGrabber, // PS3EyeFrameGrabber, VideoInputFrameGrabber, and FFmpegFrameGrabber. FrameGrabber grabber = FrameGrabber.createDefault(0); grabber.start(); // CanvasFrame, FrameGrabber, and FrameRecorder use Frame objects to communicate image data. // We need a FrameConverter to interface with other APIs (Android, Java 2D, or OpenCV). OpenCVFrameConverter.ToIplImage converter = new OpenCVFrameConverter.ToIplImage(); IplImage grabbedImage = converter.convert(grabber.grab()); int width = grabbedImage.width(); int height = grabbedImage.height(); FrameRecorder recorder = FrameRecorder.createDefault("output.avi", width, height); recorder.start(); CanvasFrame frame = new CanvasFrame("Some Title"); while (frame.isVisible() && (grabbedImage = converter.convert(grabber.grab())) != null) { // cvWarpPerspective(grabbedImage, rotatedImage, randomR); Frame rotatedFrame = converter.convert(grabbedImage); //opencv_core.IplImage grabbedImage = grabber.grab(); frame.showImage(rotatedFrame); recorder.record(rotatedFrame); } frame.dispose(); recorder.stop(); grabber.stop(); } }
Problem 2: When I run following code
opencv_core.IplImage grabbedImage = grabber.grab();
incompatible types: Frame cannot be converted to IplImage message appears
import java.io.File; import java.net.URL; import java.util.logging.Level; import java.util.logging.Logger; import org.bytedeco.javacv.*; import org.bytedeco.javacpp.*; import org.bytedeco.javacpp.indexer.*; import static org.bytedeco.javacpp.opencv_core.*; import static org.bytedeco.javacpp.opencv_imgproc.*; import static org.bytedeco.javacpp.opencv_calib3d.*; import static org.bytedeco.javacpp.opencv_objdetect.*; public class Demo { public static void main(String[] args) { try { OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0); grabber.start(); opencv_core.IplImage grabbedImage = grabber.grab(); CanvasFrame canvasFrame = new CanvasFrame("Video with JavaCV"); canvasFrame.setCanvasSize(grabbedImage.width(), grabbedImage.height()); grabber.setFrameRate(grabber.getFrameRate()); FFmpegFrameRecorder recorder = new FFmpegFrameRecorder("mytestvideo.mp4", grabber.getImageWidth(), grabber.getImageHeight()); recorder.setFormat("mp4"); recorder.setFrameRate(30); recorder.setVideoBitrate(10 * 1024 * 1024); recorder.start(); while (canvasFrame.isVisible() && (grabbedImage = grabber.grab()) != null) { canvasFrame.showImage(grabbedImage); recorder.record(grabbedImage); } recorder.stop(); grabber.stop(); canvasFrame.dispose(); } catch (FrameGrabber.Exception ex) { Logger.getLogger(JCVdemo.class.getName()).log(Level.SEVERE, null, ex); } catch (FrameRecorder.Exception ex) { Logger.getLogger(JCVdemo.class.getName()).log(Level.SEVERE, null, ex); } } }
Question is: what am i doing wrong?
I am not able to record any sort of video; no matter what version of JavaCV/OPenCv I use.
Please tell me working example to record video from webcam and also the working JavaCV/OpenCV /FFmpeg compatible versions.