
Recherche avancée
Autres articles (63)
-
Soumettre améliorations et plugins supplémentaires
10 avril 2011Si vous avez développé une nouvelle extension permettant d’ajouter une ou plusieurs fonctionnalités utiles à MediaSPIP, faites le nous savoir et son intégration dans la distribution officielle sera envisagée.
Vous pouvez utiliser la liste de discussion de développement afin de le faire savoir ou demander de l’aide quant à la réalisation de ce plugin. MediaSPIP étant basé sur SPIP, il est également possible d’utiliser le liste de discussion SPIP-zone de SPIP pour (...) -
Ajouter notes et légendes aux images
7 février 2011, parPour pouvoir ajouter notes et légendes aux images, la première étape est d’installer le plugin "Légendes".
Une fois le plugin activé, vous pouvez le configurer dans l’espace de configuration afin de modifier les droits de création / modification et de suppression des notes. Par défaut seuls les administrateurs du site peuvent ajouter des notes aux images.
Modification lors de l’ajout d’un média
Lors de l’ajout d’un média de type "image" un nouveau bouton apparait au dessus de la prévisualisation (...) -
Emballe médias : à quoi cela sert ?
4 février 2011, parCe plugin vise à gérer des sites de mise en ligne de documents de tous types.
Il crée des "médias", à savoir : un "média" est un article au sens SPIP créé automatiquement lors du téléversement d’un document qu’il soit audio, vidéo, image ou textuel ; un seul document ne peut être lié à un article dit "média" ;
Sur d’autres sites (7932)
-
What are good settings for transcoding videos uploaded to my app ?
14 mai 2020, par Dmitry MinkovskyI am working on an app that allows users to share videos. The problem is that many videos are very high bitrate. For example, A 4-minute H264 video from an old iPhone is encoded at 1080p and runs 17,000 kb/s ( 500 megabytes). Accepting and distributing such videos at this bitrate/resolution is not practical for a social application.



I have been playing with ffmpeg to transcode videos to smaller sizes and higher compression, but have not achieved acceptable results. For example :



ffmpeg \
 -i in.mov \
 -vf scale=w='if(gt(iw\,ih)\,780\,-2)':h='if(gt(iw\,ih)\,-2\,780)' \ 
 -c:v libx264 \
 -crf 28 \
 -preset medium \
 -pix_fmt yuv420p \
 -movflags +faststart \
 out.mp4




This command transcodes the above-mentioned 500MB file down to 70MB. It scales the larger dimension of the video to 780 pixels and compresses the video quite a bit. The results are okay, but the file is still large.



Taking the longer dimension down to 480 pixels, the file is reduced to 40MB. Still quite large, and now significantly degraded. Also, the transcoding still takes quite a long time : about 1-1.5x on my 4 year old i7 Macbook Pro with 16GB RAM.



I'm not sure how to improve on this. H265 is not supported in browsers. I am wondering :



- 

- How can I reduce size further ?
- How can I transcode faster than 1x without significantly reducing quality ? Even 2-3x doesn't seem great ?







Is this as good as it gets ?


-
C# Process in loop reading error output, causes "No async read operation is in progress on the stream" error
29 mai 2023, par TSLeeI am trying to read the format of multiple video files using ffmpeg in an asynchronous operation of Process and facing an error, "No async read operation is in progress on the stream". According to https://social.msdn.microsoft.com/Forums/vstudio/en-US/c961f461-7afb-4a92-b0ae-f78c2003b5de/help-an-asynchronous-read-operation-is-already-in-progress-on-the-standardoutput-stream?forum=csharpgeneral, I think I have to use CancelErrorRead(), as BeginErrorReadLine() can't be launched more than once. I also wonder if I use this function in the wrong place, because the read operation has ended in process1.exited() ? But the operation can't proceed to the second index with this error.


How could I use CancelErrorRead()/CancelOutputRead() properly and where should I place them on the code ? I also did an experiment in that I commented these two CancelRead(), and a different error "async read operation has been started on the stream" will appear.


Process process1 = new Process();
 process1.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
 process1.StartInfo.CreateNoWindow = true;
 process1.StartInfo.UseShellExecute = false;
 process1.StartInfo.FileName = ".\\ffmpeg.exe";
 process1.StartInfo.WorkingDirectory = ".\\";
 process1.EnableRaisingEvents = true;
 process1.StartInfo.RedirectStandardOutput = true; //if this is true, UseShellExecute must be false. true if output should be written to StandardOutput
 process1.StartInfo.RedirectStandardError = true;
 //indicates that the associated Process has written a line that's terminated with a newline
 process1.ErrorDataReceived += new DataReceivedEventHandler(inputHandler);
 process1.Exited += (ending, p) =>
 {
 flag = true;
 process1.CancelOutputRead();
 process1.CancelErrorRead();//
 };
 foreach (String file in inputList)
 {
 if (flag == true)
 {
 flag = false;
 process1.StartInfo.Arguments = "-i " + " \"" + file + "\"";
 Console.WriteLine(process1.StartInfo.Arguments);
 process1.Start();
 process1.BeginOutputReadLine();//
 process1.BeginErrorReadLine();
 process1.WaitForExit(); //for asynchronous output
 }


 }
 }
 private void inputHandler(object sender, DataReceivedEventArgs l)
 {
 cba.Append(l.Data + "\n");
 videoInput = l.Data;
 //Console.WriteLine(cba);
 //Process p = sender as Process;
 Console.WriteLine(videoInput);

 this.BeginInvoke(new MethodInvoker(() =>
 {

 if (!String.IsNullOrEmpty(videoInput))
 {
 if (videoInput.Contains("Stream #0:0"))
 {
 String subvideoInput1 = 
 videoInput.Substring(videoInput.IndexOf("Stream #0:0"));
 String video_inputType = subvideoInput1;
 textBox1.Text += video_inputType + System.Environment.NewLine;
 Console.WriteLine(video_inputType);
 }
 if (videoInput.Contains("Stream #0:1"))
 {
 String subvideoInput2 = 
 videoInput.Substring(videoInput.IndexOf("Stream #0:1"));
 Console.WriteLine(subvideoInput2.IndexOf("\n"));
 Console.WriteLine(subvideoInput2);
 String audio_inputType = subvideoInput2;
 textBox1.AppendText(audio_inputType + System.Environment.NewLine);
 Console.WriteLine(audio_inputType);
 }
 if (videoInput.Contains("Duration:"))
 {
 String videoinputDuration = 
 videoInput.Substring(videoInput.IndexOf("Duration:"));
 String subvideo_inputDuration = videoinputDuration.Substring(9);
 String inputvideoDuration = 
 subvideo_inputDuration.Remove(subvideo_inputDuration.IndexOf("."));
 Console.WriteLine(inputvideoDuration);
 double totalseconds = 
 TimeSpan.Parse(inputvideoDuration).TotalSeconds;
 
 

 }
 }

 }));


 }



-
How can I create videos from images with transitions in C# ?
4 septembre 2021, par KjensenUsing C# code, I want to take a number of images, add some music and create a video.


I think I can best explain what I want in pseudo-code... :


var video = new Video(1080, 1920); //create a video 1080*1920px 
video.AddFrame("C:\temp\frame01.jpg", 2000); //show frame for 2000ms
video.AddTransition(Transitions.Fade, 500); //fade from first to second frame for 500ms
video.AddFrame("C:\temp\frame02.jpg", 1000); //show frame for 1000ms
video.AddTransition(Transitions.Fade, 500); //fade from second to third frame for 500ms
video.AddFrame("C:\temp\frame03.jpg", 2000); //show frame for 2000ms
video.AddSound("C:\temp\mymusic.mp3"); //added from start of video
video.Save("C:\temp\MyAwesomeVideo.avi", Format.MP4);



Does something like this exist ?


I know there are a couple of older libraries, that can do some stuff with ffmpeg to create slideshows, but I looked at some of them, and they are insanely tricky to get working - and designed for something quite different.


Backstory :


I created a system for a cinema, which every week generates x number of images using movie posters, showtimes etc - and would like to take those images, turn them into a video which will be shared on social media.