
Recherche avancée
Médias (16)
-
#7 Ambience
16 octobre 2011, par
Mis à jour : Juin 2015
Langue : English
Type : Audio
-
#6 Teaser Music
16 octobre 2011, par
Mis à jour : Février 2013
Langue : English
Type : Audio
-
#5 End Title
16 octobre 2011, par
Mis à jour : Février 2013
Langue : English
Type : Audio
-
#3 The Safest Place
16 octobre 2011, par
Mis à jour : Février 2013
Langue : English
Type : Audio
-
#4 Emo Creates
15 octobre 2011, par
Mis à jour : Février 2013
Langue : English
Type : Audio
-
#2 Typewriter Dance
15 octobre 2011, par
Mis à jour : Février 2013
Langue : English
Type : Audio
Autres articles (52)
-
Pas question de marché, de cloud etc...
10 avril 2011Le vocabulaire utilisé sur ce site essaie d’éviter toute référence à la mode qui fleurit allègrement
sur le web 2.0 et dans les entreprises qui en vivent.
Vous êtes donc invité à bannir l’utilisation des termes "Brand", "Cloud", "Marché" etc...
Notre motivation est avant tout de créer un outil simple, accessible à pour tout le monde, favorisant
le partage de créations sur Internet et permettant aux auteurs de garder une autonomie optimale.
Aucun "contrat Gold ou Premium" n’est donc prévu, aucun (...) -
List of compatible distributions
26 avril 2011, parThe table below is the list of Linux distributions compatible with the automated installation script of MediaSPIP. Distribution nameVersion nameVersion number Debian Squeeze 6.x.x Debian Weezy 7.x.x Debian Jessie 8.x.x Ubuntu The Precise Pangolin 12.04 LTS Ubuntu The Trusty Tahr 14.04
If you want to help us improve this list, you can provide us access to a machine whose distribution is not mentioned above or send the necessary fixes to add (...) -
Formulaire personnalisable
21 juin 2013, parCette page présente les champs disponibles dans le formulaire de publication d’un média et il indique les différents champs qu’on peut ajouter. Formulaire de création d’un Media
Dans le cas d’un document de type média, les champs proposés par défaut sont : Texte Activer/Désactiver le forum ( on peut désactiver l’invite au commentaire pour chaque article ) Licence Ajout/suppression d’auteurs Tags
On peut modifier ce formulaire dans la partie :
Administration > Configuration des masques de formulaire. (...)
Sur d’autres sites (8074)
-
FFmpeg filter config with aecho fails to configure all the links and formats - avfilter_graph_config
23 janvier 2021, par cs guyI am following the official tutorial of FFMpeg to create a filter chain. This tutorial shows how to pass data through a chain as :




The filter chain it uses is : * (input) -> abuffer -> volume ->
aformat -> abuffersink -> (output)




Here is my code - sorry for boiler code, it is just ffmpeg way :(


frame = av_frame_alloc();
 filterGraph = avfilter_graph_alloc();

 if (!frame) {
 *mediaLoadPointer = FAILED_TO_LOAD;
 LOGE("FXProcessor::FXProcessor Could not allocate memory for frame");
 return;
 }

 if (!filterGraph) {
 *mediaLoadPointer = FAILED_TO_LOAD;
 LOGE("FXProcessor::FXProcessor FXProcessor! %s", av_err2str(AVERROR(ENOMEM)));
 return;
 }

 const AVFilter *abuffer;
 const AVFilter *abuffersink;
 AVFilterContext *aformat_ctx;
 const AVFilter *aformat;
 AVFilterContext *choisen_beat_fx_ctx;
 const AVFilter *choisen_beat_fx;

 /* Create the abuffer filter;
 * it will be used for feeding the data into the graph. */
 abuffer = avfilter_get_by_name("abuffer");
 if (!abuffer) {
 *mediaLoadPointer = FAILED_TO_LOAD;
 LOGE("FXProcessor::FXProcessor Could not find the abuffer filter!");
 return;
 }
 abuffer_ctx = avfilter_graph_alloc_filter(filterGraph, abuffer, "src");
 if (!abuffer_ctx) {
 *mediaLoadPointer = FAILED_TO_LOAD;
 LOGE("FXProcessor::FXProcessor Could not allocate the abuffer_ctx instance! %s",
 av_err2str(AVERROR(ENOMEM)));
 return;
 }

 char ch_layout[64];
 /* Set the filter options through the AVOptions API. */
 av_get_channel_layout_string(ch_layout, sizeof(ch_layout), 0, AV_CH_LAYOUT_STEREO);
 av_opt_set(abuffer_ctx, "channel_layout", ch_layout, AV_OPT_SEARCH_CHILDREN);
 av_opt_set(abuffer_ctx, "sample_fmt", av_get_sample_fmt_name(AV_SAMPLE_FMT_FLT),
 AV_OPT_SEARCH_CHILDREN);
 av_opt_set_q(abuffer_ctx, "time_base", (AVRational) {1, defaultSampleRate},
 AV_OPT_SEARCH_CHILDREN);
 av_opt_set_int(abuffer_ctx, "sample_rate", defaultSampleRate, AV_OPT_SEARCH_CHILDREN);
 /* Now initialize the filter; we pass NULL options, since we have already
 * set all the options above. */

 if (avfilter_init_str(abuffer_ctx, nullptr) < 0) {
 *mediaLoadPointer = FAILED_TO_LOAD;
 LOGE("FXProcessor::FXProcessor Could not initialize the abuffer filter!");
 return;
 }

 // TODO: select FX's dynamically
 /* Create aecho filter. */
 if (true) {

 choisen_beat_fx = avfilter_get_by_name("volume");
 if (!choisen_beat_fx) {
 *mediaLoadPointer = FAILED_TO_LOAD;
 LOGE("FXProcessor::FXProcessor Could not find the aecho filter!");
 return;
 }

 choisen_beat_fx_ctx = avfilter_graph_alloc_filter(filterGraph, choisen_beat_fx, "echo");
 if (!choisen_beat_fx_ctx) {
 *mediaLoadPointer = FAILED_TO_LOAD;
 LOGE("FXProcessor::FXProcessor Could not allocate the choisen_beat_fx_ctx instance! %s",
 av_err2str(AVERROR(ENOMEM)));
 return;
 }

 av_opt_set (choisen_beat_fx_ctx, "volume", AV_STRINGIFY(0.5), AV_OPT_SEARCH_CHILDREN);

 if (avfilter_init_str(choisen_beat_fx_ctx, nullptr) < 0) {
 *mediaLoadPointer = FAILED_TO_LOAD;
 LOGE("FXProcessor::FXProcessor Could not initialize the choisen_beat_fx_ctx filter!");
 return;
 }
 }

 /* Create the aformat filter;
 * it ensures that the output is of the format we want. */
 aformat = avfilter_get_by_name("aformat");
 if (!aformat) {
 *mediaLoadPointer = FAILED_TO_LOAD;
 LOGE("FXProcessor::FXProcessor Could not find the aformat filter!");
 return;
 }
 aformat_ctx = avfilter_graph_alloc_filter(filterGraph, aformat, "aformat");
 if (!aformat_ctx) {
 *mediaLoadPointer = FAILED_TO_LOAD;
 LOGE("FXProcessor::FXProcessor Could not allocate the aformat instance!");
 return;
 }

 av_opt_set(aformat_ctx, "sample_fmts", av_get_sample_fmt_name(AV_SAMPLE_FMT_FLT),
 AV_OPT_SEARCH_CHILDREN);
 av_opt_set_int(aformat_ctx, "sample_rates", defaultSampleRate, AV_OPT_SEARCH_CHILDREN);
 av_get_channel_layout_string(ch_layout, sizeof(ch_layout), 0, AV_CH_LAYOUT_STEREO);
 av_opt_set(aformat_ctx, "channel_layouts", ch_layout, AV_OPT_SEARCH_CHILDREN);

 if (avfilter_init_str(aformat_ctx, nullptr) < 0) {
 *mediaLoadPointer = FAILED_TO_LOAD;
 LOGE("FXProcessor::FXProcessor Could not initialize the aformat filter!");
 return;
 }

 /* Finally create the abuffersink filter;
 * it will be used to get the filtered data out of the graph. */
 abuffersink = avfilter_get_by_name("abuffersink");
 if (!abuffersink) {
 *mediaLoadPointer = FAILED_TO_LOAD;
 LOGE("FXProcessor::FXProcessor Could not find the abuffersink filter!");
 return;
 }

 abuffersink_ctx = avfilter_graph_alloc_filter(filterGraph, abuffersink, "sink");
 if (!abuffersink_ctx) {
 *mediaLoadPointer = FAILED_TO_LOAD;
 LOGE("FXProcessor::FXProcessor Could not allocate the abuffersink instance!");
 return;
 }

 /* This filter takes no options. */
 if (avfilter_init_str(abuffersink_ctx, nullptr) < 0) {
 *mediaLoadPointer = FAILED_TO_LOAD;
 LOGE("FXProcessor::FXProcessor Could not initialize the abuffersink instance.!");
 return;
 }

 /* Connect the filters;
 * in this simple case the filters just form a linear chain. */
 if (avfilter_link(abuffer_ctx, 0, choisen_beat_fx_ctx, 0) != 0) {
 *mediaLoadPointer = FAILED_TO_LOAD;
 LOGE("FXProcessor::FXProcessor Error connecting filters.!");
 return;
 }
 if (avfilter_link(choisen_beat_fx_ctx, 0, aformat_ctx, 0) != 0) {
 *mediaLoadPointer = FAILED_TO_LOAD;
 LOGE("FXProcessor::FXProcessor Error connecting filters.!");
 return;
 }
 if (avfilter_link(aformat_ctx, 0, abuffersink_ctx, 0) != 0) {
 *mediaLoadPointer = FAILED_TO_LOAD;
 LOGE("FXProcessor::FXProcessor Error connecting filters.!");
 return;
 }

 /* Configure the graph. */
 if (avfilter_graph_config(filterGraph, nullptr) < 0) {
 *mediaLoadPointer = FAILED_TO_LOAD;
 LOGE("FXProcessor::FXProcessor Error configuring the filter graph!");
 return;
 }



This code works fine when the chain is




- 

- (input) -> abuffer -> aecho-> aformat -> abuffersink -> (output)






However, I would like to use
adelay
instead ofvolume
filter. So I want :



The filter chain it uses is : * (input) -> abuffer -> volume ->
aformat -> abuffersink -> (output)




I changed the code at


choisen_beat_fx = avfilter_get_by_name("volume");



to


choisen_beat_fx = avfilter_get_by_name("aecho");



and removed the line


av_opt_set (choisen_beat_fx_ctx, "volume", AV_STRINGIFY(0.5), AV_OPT_SEARCH_CHILDREN);



everything goes smooth until the last line.

avfilter_graph_config
fails and returns negative value. Functions document :



avfilter_graph_config : Check validity and configure all the links and
formats in the graph.




So my guess is I need extra links to insert aecho to my chain ? How can I insert aecho into my filter chain ?


-
The new GDPR data protection regulation and potential consequences on Piwik
GDPR is a new data protection related regulation in Europe. GDPR stands for General Data Protection Regulation.
The purpose of this European regulation is to strengthen and unify data protection for all individuals within the European Union. This also includes entities outside Europe willing to do business with European citizens. GDPR is a set of processes you need to follow within your organization to protect the privacy of European citizens.
GDPR will start to apply in May 2018. It is recognized to be dissuasive because of the potential penalty of up to 4% of the yearly turnover, in case of infringement.
Many articles have been written about GDPR including our previous article. Few of them are explaining how it will affect web analytics vendors : this is what this article is about.
Am I really impacted by GDPR if I am a Piwik user ?
As Piwik can collect personal data, the answer is yes. Piwik analytics data is impacted by the GDPR.
As GDPR is a general concept, we decided from the official guidelines to assume what will be the potential consequences on the use of Piwik.
There are 2 potential scenarios we can identify :
- 1 – You are collecting personal data with Piwik
- 2 – You are not collecting personal data with Piwik
1 – Personal data collection with Piwik
According to GDPR : IP addresses, cookies, UserID are personal data.
IP addresses are personal data, so you will have to anonymize them unless you receive explicit consent from the visitor. Please view the following article in order to learn : how can I anonymize IP addresses in Piwik ?
According to GDPR, cookies are personal data too. But as all cookies are not created equal it may be possible that some need to require user consent whereas other not. Whatever will be the final decision, you can learn about the first-party cookies created by Piwik and how to disable all tracking cookies in Piwik ?
User ID, you are impacted if the User ID you assign is specific to an individual or if you can cross the User ID data further and find back the individual personal data.
Any extra personal data you may collect with Piwik, it could be for example : first names, family names, e-mail address… You are able to collect such data using custom dimensions, custom variables…
What are the rules I have to comply with ?
By collecting personal data, you will have to respect EU citizens rights, which include :
- The possibility for them to view the data you collected on them
- The possibility to rectify some data concerning them
- The possibility to delete their data when they request about it
As you can imagine, for the first obligation, you will have to export all the data. So if a user is requesting it, you will have to export the data linked to his IP address(es). It can be easily exported as a .csv file for example.
In order to do that, just create a segment according to the IP address of the user who requested it and then export the “Visitor log” report.
If the personal data is not linked with the IP address but other attributes such as User ID or a custom dimension, you can provide the same data export by using the segment function and filtering on the personal data field.The data edit and deletion process on Piwik is a bit trickier as it currently requires administration system skills. We are planning to develop a new plugin for GDPR compliance (which will be available for free on the Marketplace). This plugin will let you edit and easily delete data of a particular user. Currently you can delete a specific user’s data by accessing the Piwik database and directly delete the different records for this specific user.
2 – You are not collecting personal data with Piwik
Unfortunately it is not because you do not collect personal data that you will not be affected by GDPR.
The details of GDPR are not confirmed yet and GDPR could involve enabling the DoNotTrack setting by default on all browsers.
Yes, you read it well, by default, unless the internet user uncheck this option, Piwik respecting DoNoTrack would not be able to track any user. If one needed to collect data anyway, Piwik Log Analytics and server-side tracking can be considered.If you need help regarding how to set up your Piwik installation in order to be GDPR compliant :
Do you have a Piwik experience you would like to share with the community ? Please share it with us by contacting Piwik core team.
-
Google’s YouTube Uses FFmpeg
9 février 2011, par Multimedia Mike — GeneralControversy arose last week when Google accused Microsoft of stealing search engine results for their Bing search engine. It was a pretty novel sting operation and Google did a good job of visually illustrating their side of the story on their official blog.
This reminds me of the fact that Google’s YouTube video hosting site uses FFmpeg for converting videos. Not that this is in the same league as the search engine shenanigans (it’s perfectly legit to use FFmpeg in this capacity, but to my knowledge, Google/YouTube has never confirmed FFmpeg usage), but I thought I would revisit this item and illustrate it with screenshots. This is not new information— I first empirically tested this fact 4 years ago. However, a lot of people wonder how exactly I can identify FFmpeg on the backend when I claim that I’ve written code that helps power YouTube.
Short Answer
How do I know YouTube uses FFmpeg to convert multimedia ? Because :- FFmpeg can decode a number of impossibly obscure multimedia formats using code I wrote
- YouTube can transcode many of the same formats
- I screwed up when I wrote the code to support some of these weird formats
- My mistakes are still present when YouTube transcodes certain fringe formats
Longer Answer (With Pictures !)
Let’s take a video format named RoQ, developed by noted game designer Graeme Devine. Originated for use in the FMV-heavy game The 11th Hour, the format eventually found its way into the Quake 3 engine as well as many games derived from the same technology.Dr. Tim Ferguson reverse engineered the format (though it would later be open sourced along with the rest of the Q3 engine). I wrote a RoQ playback system for FFmpeg, and I messed up in doing so. I believe my coding error helps demonstrate the case I’m trying to make here.
Observe what happened when I pushed the jk02.roq sample through YouTube in my original experiment 4 years ago :
Do you see how the canyon walls bleed into the sky ? That’s not supposed to happen. FFmpeg doesn’t do that anymore but I was able to go back into the source code history to find when it did do that :
Academic Answer
FFmpeg fixed this bug in June of 2007 (thanks to Eric Lasota). The problem had to do with premature colorspace conversion in my original decoder.Leftovers
I tried uploading the video again to see if the problem persists in YouTube’s transcoder. First bit of trivia : YouTube detects when you have uploaded the same video twice and rejects the subsequent attempts. So I created a double concatenation of the video and uploaded it. The problem is gone, illustrating that the backend is actually using a newer version of FFmpeg. This surprises me for somewhat esoteric reasons.Here’s another interesting bit of trivia for those who don’t do a lot of YouTube uploading— YouTube reports format details when you upload a video :
So, yep, RoQ format. And you can wager that this will prompt me to go back through the litany of unusual formats that FFmpeg supports to see how YouTube responds.