
Recherche avancée
Autres articles (75)
-
Gestion de la ferme
2 mars 2010, parLa ferme est gérée dans son ensemble par des "super admins".
Certains réglages peuvent être fais afin de réguler les besoins des différents canaux.
Dans un premier temps il utilise le plugin "Gestion de mutualisation" -
Utilisation et configuration du script
19 janvier 2011, parInformations spécifiques à la distribution Debian
Si vous utilisez cette distribution, vous devrez activer les dépôts "debian-multimedia" comme expliqué ici :
Depuis la version 0.3.1 du script, le dépôt peut être automatiquement activé à la suite d’une question.
Récupération du script
Le script d’installation peut être récupéré de deux manières différentes.
Via svn en utilisant la commande pour récupérer le code source à jour :
svn co (...) -
Script d’installation automatique de MediaSPIP
25 avril 2011, parAfin de palier aux difficultés d’installation dues principalement aux dépendances logicielles coté serveur, un script d’installation "tout en un" en bash a été créé afin de faciliter cette étape sur un serveur doté d’une distribution Linux compatible.
Vous devez bénéficier d’un accès SSH à votre serveur et d’un compte "root" afin de l’utiliser, ce qui permettra d’installer les dépendances. Contactez votre hébergeur si vous ne disposez pas de cela.
La documentation de l’utilisation du script d’installation (...)
Sur d’autres sites (10590)
-
avcodec_send_packet causing memory leak
23 juin 2020, par AleksaJanjatovicI'm trying to fetch a frame from an Rtsp stream, but it seems that I'm forgetting to free some element, causing my RAM to rapidly fill. Here are the code snippets :


Here is the initialization before frame fetching


bool CRtspStream::Init(void* _userData) {
 InitParam* param = (CBaseStream::InitParam*)_userData;
 m_InputPath = param->m_InputPath;
 m_OutputPath = param->m_OutputPath;
 m_Logger.SetLogLevel(param->m_LoggerLevel);

 av_register_all();
 avformat_network_init();

 int ffmpegFatalLogLevel = 8;
 av_log_set_level(ffmpegFatalLogLevel);

 AVCodec* codec = avcodec_find_decoder(param->m_CodecID);
 if(!codec)
 throw DetectionUtility::StreamException("Unable to open codec.");

 m_FormatContext = avformat_alloc_context();
 m_CodecContext = avcodec_alloc_context3(codec);

 if(avformat_open_input(&m_FormatContext, param->m_InputPath.c_str(), nullptr, nullptr) < 0)
 throw DetectionUtility::StreamException("Unable to open stream: " + param->m_InputPath);

 if(avformat_find_stream_info(m_FormatContext, nullptr) < 0)
 throw DetectionUtility::StreamException("Unable to get stream info into format context.");

 for(unsigned int i = 0;i < m_FormatContext->nb_streams; i++){
 if(m_FormatContext->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO)
 m_VideoStreamIndex = i;
 }

 if (avcodec_open2(m_CodecContext, codec, nullptr) < 0)
 throw DetectionUtility::StreamException("Unable to open codec.");

 return m_InitSuccesful = true;
}



And here is the actual frame fetching, i made sure that retVal frame is being freed afterward. Main evidence that this is what causes memory leaks is that valgrind is also pointing to the avcodec_send_packet() line : valgrind_results


AVFrame* CRtspStream::RequestNewFrame() {
 AVPacket packet;
 AVFrame* retVal = av_frame_alloc();
 bool frameAvailable = false;

// avformat_flush(m_FormatContext);
// avcodec_flush_buffers(m_CodecContext);
 av_read_play(m_FormatContext);
 int readFrameRes;
 while(!frameAvailable) {
 if((readFrameRes = av_read_frame(m_FormatContext, &packet)) >= 0) {
 if(packet.stream_index == m_VideoStreamIndex) {
 int res = 1;
 if((res = avcodec_send_packet(m_CodecContext, &packet)) < 0) {
 av_packet_unref(&packet);
 continue;
 }
 av_packet_unref(&packet);
 res = 1;
 while(res > 0) {
 res = avcodec_receive_frame(m_CodecContext, retVal);
 if(res == AVERROR(EAGAIN)) {
 break;
 } else if (res < 0) {
 throw DetectionUtility::StreamException("Unable to receive a frame from the codec.");
 } else {
 frameAvailable = true;
 }
 }
 }
 }
 av_packet_unref(&packet);
 }

 if(readFrameRes < 0) {
 av_frame_free(&retVal);
 av_packet_unref(&packet);
 throw DetectionUtility::StreamException("Unable to fetcha a new frame.");
 } else {
 try {
 if(CheckOutputSupported())
 DetectionUtility::AVFrameHelper::SaveFrame(retVal, "Rtsp" + m_OutputPath, m_CurrentFrameNumber);
 ++m_CurrentFrameNumber;
 } catch (const Utility::BaseException& e) {
 m_Logger.Error(e.GetMessage());
 }
 }
 return retVal;
}



-
Grabbing a single image from a MS VS .NET 6.0 C# WPF process always returns the same image
12 mai 2023, par Wolfgang KurzI am trying to develop a MS VS .NET 6.0 C# WPF application to digitize my Super 8 cine films. To grab the frames of the film I want to use FFMPEG because Accord.NET6.0 DirectShow does not work under MS VS 2022 .
I use
FFmpeg 64-bit static Windows build from www.gyan.dev
Version : 2022-09-29-git-8089fe072e-full_build-www.gyan.dev


FFMPEG is invoked from a Process in ma application whicch sets the process FFMPEG start parameters. The webcam parameter is "USB Webcam" ( digital Celestron handheld microscope connected via USB - is DirectShow compatible )
The video resolution parameter "camRes" is "1280x960"


public void UpdateImage(string aString)
 {
 string startPath = "C:" + MainWindow.bSl + "ffmpeg" + MainWindow.bSl + "bin" + MainWindow.bSl + "ffmpeg.exe ";

 MainWindow.aResult = "";
 System.Drawing.Bitmap result;
 ProcessStartInfo psi;
 psi = new ProcessStartInfo();
 psi.FileName = startPath;
 string targPath;
 psi.Arguments = "-f dshow -video_size" + MainWindow.dQuote + webCam + MainWindow.dQuote +
 " -framerate 10 -i video=" + MainWindow.dQuote + camRes + MainWindow.dQuote +
 " -frames:v 1 test%3d.bmp -update 1";
 string errors = "";
 string results = "";
 psi.CreateNoWindow = false;
 psi.RedirectStandardOutput = true;
 psi.RedirectStandardError = true;
 psi.WindowStyle = ProcessWindowStyle.Normal;
 psi.WorkingDirectory = "C:" + MainWindow.bSl + "ffmpeg" + MainWindow.bSl + "bin" + MainWindow.bSl;

 using (Process theProcess = new Process())
 {
 theProcess.StartInfo = psi;
 theProcess.Start();

 theProcess.WaitForExit();
 while (theProcess.HasExited == false)
 {
 Thread.Sleep(50);
 }
 Thread.Sleep(50);

 try
 {
 if (File.Exists(pathCI) == true)
 {
 DefineImage.ffmpegRes = new Bitmap(pathCI);
 MainWindow.actMWInstance.UpdateMessage(DateTime.Now +
 "- Old image disposed, new image grabbed");
 File.Delete(pathCI);
 }
 }
 catch (System.Exception ex)
 {
 MainWindow.actMWInstance.UpdateMessage(DateTime.Now + "Image grabbing failed");
 }
 theProcess.Close();
 theProcess.Dispose();
 }

 if (aString.Length == 0)
 {
 File.Delete(pathCI);
 MainWindow.actMWInstance.DoMove("200", "0", true);
 }
 if (ffmpegRes != null)
 {
 BitmapSource aBMPSrc = BitmapConversion.ToWpfBitmap(ffmpegRes);
 IMGFrame.Source = aBMPSrc;
 }
 Show();
 }



The attached screenshot shows the expected GUI content.
https://www.wkurz.com/wkurz/images/FFMPEGTEST.jpg


My problem now is, when I try to refresh the image in the
DefineDialog
window, I always get the same image although the film has been moved by one frame.

Is the first image cached by FFMPEG and always used again with the provided parameters.


How to force FFMPEG to replace the image with a new one.



-----------------------------------------------------------------------+this is additional information to the question.
I have managed to grab the film frame but still get always the same image during a session :*




It is obvious that the cine film frame has been successfully grabbbed.
The next step should be to work at the image ( correct brightness contrast, gama and colors) and then store the evaluated correction values that have later to be applied to the frames during a batch process, which automatically transports the film, grabs the frames and corrects the colors and then stores the frames as consecutively numbered images which than can be used to generate a video with FFMPEG :


Now the problem I cannot overcome :


In the definition dialog there are 2 buttons ( Refresh and New Image). The intension is to reread / regrab a frame, if the current frame is not optimal to evaluate the correction values.


Whenever I click one of the buttons FFMPEG seems to grab an image, but FFMPEG provides always the same (identcial to the first already available image) to the caller ( a .NET C# Process in my proggram).


The output stream is a single jpg image ( test%04d.jpg ) in a specified target library . Here follows the generated output which seem to be OK according to my knowledge.


I want to ask all interested persons to look over this provided information - may be someone has an idea, what causes the fact, that FFMPEG 6.0 van Neumann always delivers the first image grabbed. in a session.
It seems that there is something cached and reused over and over again.


DefImg 147: UpdateImage started ( Lines starting with DefImg or DefineImage are test output statements provided by the C# program)



DefineImage 155 11.05.2023 17:53:20 C :\ffmpeg\bin\ffmpeg.exe -y -nostdin -f dshow -an -video_size 1280x960 -framerate 10 -i video="USB Microscope" -filter:v "smartblur=luma_radius=0.9:luma_strength=0.7:luma_threshold=0" -frames:v 1 C :\FilmProjList\TEST\TEST%%04d.jpg -update 1
DefineImage 180 ffmpeg version 6.0-full_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developers
built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
configuration : —enable-gpl —enable-version3 —enable-static —disable-w32threads —disable-autodetect —enable-fontconfig —enable-iconv —enable-gnutls —enable-libxml2 —enable-gmp —enable-bzlib —enable-lzma —enable-libsnappy —enable-zlib —enable-librist —enable-libsrt —enable-libssh —enable-libzmq —enable-avisynth —enable-libbluray —enable-libcaca —enable-sdl2 —enable-libaribb24 —enable-libdav1d —enable-libdavs2 —enable-libuavs3d —enable-libzvbi —enable-librav1e —enable-libsvtav1 —enable-libwebp —enable-libx264 —enable-libx265 —enable-libxavs2 —enable-libxvid —enable-libaom —enable-libjxl —enable-libopenjpeg —enable-libvpx —enable-mediafoundation —enable-libass —enable-frei0r —enable-libfreetype —enable-libfribidi —enable-liblensfun —enable-libvidstab —enable-libvmaf —enable-libzimg —enable-amf —enable-cuda-llvm —enable-cuvid —enable-ffnvcodec —enable-nvdec —enable-nvenc —enable-d3d11va —enable-dxva2 —enable-libvpl —enable-libshaderc —enable-vulkan —enable-libplacebo —enable-opencl —enable-libcdio —enable-libgme —enable-libmodplug —enable-libopenmpt —enable-libopencore-amrwb —enable-libmp3lame —enable-libshine —enable-libtheora —enable-libtwolame —enable-libvo-amrwbenc —enable-libilbc —enable-libgsm —enable-libopencore-amrnb —enable-libopus —enable-libspeex —enable-libvorbis —enable-ladspa —enable-libbs2b —enable-libflite —enable-libmysofa —enable-librubberband —enable-libsoxr —enable-chromaprint
libavutil 58. 2.100 / 58. 2.100
libavcodec 60. 3.100 / 60. 3.100
libavformat 60. 3.100 / 60. 3.100
libavdevice 60. 1.100 / 60. 1.100
libavfilter 9. 3.100 / 9. 3.100
libswscale 7. 1.100 / 7. 1.100
libswresample 4. 10.100 / 4. 10.100
libpostproc 57. 1.100 / 57. 1.100
Trailing option(s) found in the command : may be ignored.
Input #0, dshow, from 'video=USB Microscope' :
Duration : N/A, start : 5368.514437, bitrate : N/A
Stream #0:0 : Video : rawvideo (YUY2 / 0x32595559), yuyv422(tv, bt470bg/bt709/unknown), 1280x960, 10 fps, 10 tbr, 10000k tbn
Stream mapping :
Stream #0:0 -> #0:0 (rawvideo (native) -> mjpeg (native))
[swscaler @ 000001442fdcebc0] deprecated pixel format used, make sure you did set range correctly ( that I do not understand )
Last message repeated 3 times
[mjpeg @ 00000144278b0d80] removing common factors from framerate
Output #0, image2, to 'C :\FilmProjList\TEST\TEST%04d.jpg' :
Metadata :
encoder : Lavf60.3.100
Stream #0:0 : Video : mjpeg, yuvj422p(pc, bt470bg/bt709/unknown, progressive), 1280x960, q=2-31, 200 kb/s, 10 fps, 10 tbn
Metadata :
encoder : Lavc60.3.100 mjpeg
Side data :
cpb : bitrate max/min/avg : 0/0/200000 buffer size : 0 vbv_delay : N/A
frame= 0 fps=0.0 q=3.6 size= 0kB time=00:00:00.00 bitrate=N/A speed=N/A

frame= 1 fps=0.0 q=3.6 Lsize=N/A time=00:00:00.00 bitrate=N/A speed= 0x

video:45kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead : unknown

DefineImage 248 11.05.2023 17:53:23 ( test output from, the C# program)
Das Programm "[11724] Cine2Video.exe" wurde mit Code 0 (0x0) beendet.




—


Mit freundlichen Grüßen / Best regards
Ute & Wolfgang Kurz
Domaine : https://uwkurz.de ; Homepage : https://www.uwkurz.de/home
Location : 9° 11' 27,75" East, 48° 43' 32,80" North
E-Mail : wolfgang@uwkurz.de , ute@uwkurz.de
Gesendet über Glasfaser von HOMENET.de




-
Converting DAV to MP4 and OGG
24 août, par mackowiakpI want to prepare WEB page containing films from security camera recorders. Each recorder transmit video files in DAV format so each film is converted to MP4 format by script, using such syntax :



ffmpeg -y -i movie.dav -vcodec libx264 -crf 24 movie.mp4




So I included in HTMLv5 code such entry :



<video width="320" height="240">
 <source src="movie.mp4" type="video/mp4">
</source></video> 




It works correctly with Chrome but not with Firefox. For proper work in FF it is necessary add link to OGG file. So correct HTMLv5 syntax for both browsers should look like this :



<video width="320" height="240">
 <source src="movie.mp4" type="video/mp4">
 <source src="movie.ogg" type="video/ogg">
</source></source></video>




Can anybody help me to pass correct ffmpeg syntax to create OGG file ?



Output from console after using -movflags +faststart options



[maciek@piotr MMM]$ ../ffmpeg-2.4.2-64bit-static/ffmpeg -movflags +faststart -y -i 04.24.23-04.24.38\[M\]\[@0\]\[0\].dav -vcodec libx264 -crf 24 10.mp4
ffmpeg version 2.4.2- http://johnvansickle.com/ffmpeg/ Copyright (c) 2000-2014 the FFmpeg developers
 built on Oct 9 2014 07:24:56 with gcc 4.8 (Debian 4.8.3-11)
 configuration: --enable-gpl --enable-version3 --disable-shared --disable-debug --enable-runtime-cpudetect --enable-libmp3lame --enable-libx264 --enable-libx265 --enable- libwebp --enable-libspeex --enable-libvorbis --enable-libvpx --enable-libfreetype --enable-fontconfig --enable-libxvid --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-gray --enable-libopenjpeg --enable-libopus --disable-ffserver --enable-libass --enable-gnutls --cc=gcc-4.8
 libavutil 54. 7.100 / 54. 7.100
 libavcodec 56. 1.100 / 56. 1.100
 libavformat 56. 4.101 / 56. 4.101
 libavdevice 56. 0.100 / 56. 0.100
 libavfilter 5. 1.100 / 5. 1.100
 libswscale 3. 0.100 / 3. 0.100
 libswresample 1. 1.100 / 1. 1.100
 libpostproc 53. 0.100 / 53. 0.100
Option movflags not found.