
Recherche avancée
Autres articles (52)
-
Encodage et transformation en formats lisibles sur Internet
10 avril 2011MediaSPIP transforme et ré-encode les documents mis en ligne afin de les rendre lisibles sur Internet et automatiquement utilisables sans intervention du créateur de contenu.
Les vidéos sont automatiquement encodées dans les formats supportés par HTML5 : MP4, Ogv et WebM. La version "MP4" est également utilisée pour le lecteur flash de secours nécessaire aux anciens navigateurs.
Les documents audios sont également ré-encodés dans les deux formats utilisables par HTML5 :MP3 et Ogg. La version "MP3" (...) -
Les autorisations surchargées par les plugins
27 avril 2010, parMediaspip core
autoriser_auteur_modifier() afin que les visiteurs soient capables de modifier leurs informations sur la page d’auteurs -
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 (...)
Sur d’autres sites (11170)
-
JavaCV FFmpegFrameGrabber preload audio
1er juillet 2015, par JamesI have an application that streams video data to a RTMP server using javacv’s FFmpegFrameRecorder. I want to add some audio to this stream from a separate file - a short sound clip that I want to play on repeat.
Given the sound clip is very short, I want to preload the audio data into memory and just loop over it - so I can avoid excessive IO etc.
I’ve attempted to add audio to the stream using javacv’s FFmpegFrameGrabber, as prescribed on multiple tutorials.
The addition of audio works perfectly if I don’t attempt to preload/cache any of the audio data, for example :
private FFmpegFrameRecorder frameRecorder;
private FFmpegFrameGrabber frameGrabber;
...
//frameRecorder and frameGrabber setup during initialization
...
public void record(IplImage image) {
try {
frameRecorder.record(image);
Frame frame = frameGrabber.grabFrame();
if(frame == null) {
frameGrabber = new FFmpegFrameGrabber("audioFileHere.wav");
frameGrabber.start();
frame = frameGrabber.grabFrame();
}
frameRecorder.record(frame);
} catch (FrameRecorder.Exception e) {
log.error(getMarker(FATAL), "Can't record frame!", e);
} catch (FrameGrabber.Exception e) {
log.error(getMarker(FATAL), "Can't record frame!", e);
}
}However, if I try to preload the audio data I get garbage sound being played :
private FFmpegFrameRecorder frameRecorder;
private List<framedata> audioData;
private static final class FrameData {
public final Buffer[] samples;
public final Integer sampleRate;
public final Integer audioChannels;
//Constructors, getters and setters here
}
...
//frameRecorder setup during initialization
audioData = new ArrayList<>();
FFmpegFrameGrabber audioGrabber = new FFmpegFrameGrabber("audioFileHere.wav");
try {
audioGrabber.start();
Frame frame;
while ((frame = audioGrabber.grabFrame()) != null) {
Buffer[] buffers = frame.samples;
Buffer[] copiedBuffers = new Buffer[buffers.length];
for (int i = 0; i < buffers.length; i++) {
copiedBuffers[i] = ((ShortBuffer) buffers[i]).duplicate();
}
FrameData frameData = new FrameData(copiedBuffers, frame.sampleRate, frame.audioChannels);
audioData.add(frameData);
}
} catch (FrameGrabber.Exception e) {
e.printStackTrace();
}
...
private int frameCount = 0;
public void record(IplImage image) {
frameCount++;
try {
FrameData frameData = audioData.get(frameCount % audioData.size());
frameRecorder.record(image);
frameRecorder.record(frameData.sampleRate, frameData.audioChannels, frameData.samples);
} catch (FrameRecorder.Exception e) {
log.error(getMarker(FATAL), "Can't record frame!", e);
}
}
</framedata>NOTE : I have to deep copy the Frame object because FFmpegFrameGrabber.grabFrame() recycles a single Frame object
Can someone explain why this doesn’t work and/or how I could achieve the desired result ?
-
FFMPEG & ScrollMagic : Safari bug
27 novembre 2020, par gusv7I got this site where video playback is linked to scroll position. I'm using a FFMPEG-encoded .mp4 file and ScrollMagic to handle the scroll event. It works perfectly on Chrome, Opera and FF, but crashes on Safari : the animation is delayed and the video disappears once it reaches the end of the playback on Safari OS. It also doesn't show on iOS, not in Safari or Chrome... :/


Here's the markup :


<section class="shaka-container padding-x-lg flex-end">
 <div class="shaka">
 <video src="/assets/maozinha.mp4" type="video/mp4" playsinline="true"></video>
 </div>
</section>



The JS :



<code class="echappe-js"><script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.5.1/gsap.min.js"></script>


<script src="https://cdnjs.cloudflare.com/ajax/libs/ScrollMagic/2.0.8/ScrollMagic.min.js" integrity="sha512-8E3KZoPoZCD&#x2B;1dgfqhPbejQBnQfBXe8FuwL4z/c8sTrgeDMFEnoyTlH3obB4/fV&#x2B;6Sg0a0XF&#x2B;L/6xS4Xx1fUEg==" crossorigin="anonymous"></script>


<script>&#xA; // Shaka Animation&#xA; const intro = document.querySelector(&#x27;.shaka&#x27;);&#xA; const video = intro.querySelector(&#x27;video&#x27;);&#xA;&#xA; // SCROLL MAGIC&#xA;&#xA; const controller = new ScrollMagic.Controller();&#xA;&#xA; // Scenes&#xA; const scene = new ScrollMagic.Scene({&#xA; duration: 0,&#xA; triggerElement: intro,&#xA; triggerHook: 0, &#xA; })&#xA; .addTo(controller);&#xA;&#xA; // Video Animation&#xA;&#xA; let accelamount = 0.5;&#xA; let scrollpos = 0;&#xA; let delay = 0;&#xA;&#xA; scene.on(&#x27;update&#x27;, e => {&#xA; scrollpos = e.scrollPos / 1000;&#xA; });&#xA;&#xA; setInterval(() => {&#xA; delay &#x2B;= (scrollpos - delay) * accelamount;&#xA; video.currentTime = delay;&#xA; }, 24);&#xA;</script>



I wonder if the video encoding is the issue or how Safari processes the video playback ? I've used the following encoding for the video :


First :

ffmpeg -i ~/assets/mao-final.mp4 -vf scale=960:-2 -movflags faststart -vcodec libx264 -crf 20 -g 1 -pix_fmt yuv420p mao-final-960.mp4


Then,

ffmpeg -i ~/assets/mao-final.mp4 -vf scale=960:-2 -movflags faststart -vcodec libx264 -crf 20 -g 1 -pix_fmt yuv420p maozinha.mp4


I'm considering changing it to a
canvas
animation if I can't get to a solution. Please help !

-
Anomalie #4546 (Nouveau) : image_recadre perd l’EXIF de rotation
4 septembre 2020, par jluc -Alors que image_reduire propage les données EXIF de rotation, image_recadre les perd. Cela nuit grandement au rendu final.