
Recherche avancée
Médias (9)
-
Stereo master soundtrack
17 octobre 2011, par
Mis à jour : Octobre 2011
Langue : English
Type : Audio
-
Elephants Dream - Cover of the soundtrack
17 octobre 2011, par
Mis à jour : Octobre 2011
Langue : English
Type : Image
-
#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
Autres articles (55)
-
Personnaliser en ajoutant son logo, sa bannière ou son image de fond
5 septembre 2013, parCertains thèmes prennent en compte trois éléments de personnalisation : l’ajout d’un logo ; l’ajout d’une bannière l’ajout d’une image de fond ;
-
Ecrire une actualité
21 juin 2013, parPrésentez les changements dans votre MédiaSPIP ou les actualités de vos projets sur votre MédiaSPIP grâce à la rubrique actualités.
Dans le thème par défaut spipeo de MédiaSPIP, les actualités sont affichées en bas de la page principale sous les éditoriaux.
Vous pouvez personnaliser le formulaire de création d’une actualité.
Formulaire de création d’une actualité Dans le cas d’un document de type actualité, les champs proposés par défaut sont : Date de publication ( personnaliser la date de publication ) (...) -
Publier sur MédiaSpip
13 juin 2013Puis-je poster des contenus à partir d’une tablette Ipad ?
Oui, si votre Médiaspip installé est à la version 0.2 ou supérieure. Contacter au besoin l’administrateur de votre MédiaSpip pour le savoir
Sur d’autres sites (7412)
-
Cryptic `ffmpeg` + Python error : `Cannot find a matching stream for unlabeled input pad 0 on filter Parsed_crop_1`
5 août 2022, par mattze_frischI want to use
ffmpeg
with Python in a Jupyter notebook to create a video from 2000 PNG image files generated bymatplotlib
. I'm on a Windows 7 machine.

The frames are very narrow and high, so I'd like to cut them vertically into seven equal-sized "tiles" using
crop
and stacked those "tiles" horizontally usinghstack
, but I'm getting only getting cryptic error messages :

ffmpeg_path = notebook_directory # Make sure ffmpeg.exe is in notebook directory!

frames_path = 'C:\\Users\\Username\\Desktop'
frames_renamed_path = os.path.join(frames_path, 'renamed')
os.chdir(frames_renamed_path) # Temporarily change current working directory

check_call(
 [
 os.path.join(ffmpeg_path, 'ffmpeg'),
 '-y', # Overwrite output files without asking
 '-report', # Write logfile to current working directory
 '-hwaccel', 'cuda', # Use GPU acceleration
 '-framerate', '60', # Input frame rate
 '-i', os.path.join(frames_renamed_path, 'frame%05d.png'), # Path to input frames
 #'-r', '60', # Output frame rate
 #'-vf', 'pad=ceil(iw/2)*2:ceil(ih/2)*2', # Pad frames to even pixel numbers (required by many codecs)
 #'-pix_fmt', 'yuv420p',
 '-pix_fmt', 'rgb32', # Use RGB32 pixel format matching MatPlotLib image output
 '-filter_complex', # Cut frames into tiles and rearrange (here: 7 horizontal tiles)
 'crop=in_w:in_h/7:0:0[tile_1],' # 1st tile from top
 + 'crop=in_w:in_h/7:0:in_h*1/7[tile_2],' # 2nd tile from top
 + 'crop=in_w:in_h/7:0:in_h*2/7[tile_3],' # 3rd tile from top
 + 'crop=in_w:in_h/7:0:in_h*3/7[tile_4],' # 4th tile from top
 + 'crop=in_w:in_h/7:0:in_h*4/7[tile_5],' # 5th tile from top
 + 'crop=in_w:in_h/7:0:in_h*5/7[tile_6],' # 6th tile from top
 + 'crop=in_w:in_h/7:0:in_h*6/7[tile_7],' # 7th tile from top
 + '[tile_1][tile_2][tile_3][tile_4][tile_5][tile_6][tile_7]hstack=7', # Stack tiles horizontally
 os.path.join(frames_renamed_path, 'video.mp4') # Path to store output video
 ]
)

os.chdir(notebook_directory) # Reset current working directory to notebook directory

---------------------------------------------------------------------------
CalledProcessError Traceback (most recent call last)
Input In [10], in <cell 9="9">()
 6 frames_renamed_path = os.path.join(frames_path, 'renamed')
 7 os.chdir(frames_renamed_path) # Temporarily change current working directory
----> 9 check_call(
 10 [
 11 os.path.join(ffmpeg_path, 'ffmpeg'),
 12 '-y', # Overwrite output files without asking
 13 '-report', # Write logfile to current working directory
 14 '-hwaccel', 'cuda', # Use GPU acceleration
 15 '-framerate', '60', # Input frame rate
 16 '-i', os.path.join(frames_renamed_path, 'frame%05d.png'), # Path to input frames
 17 #'-pattern_type', 'glob', '-i', os.path.join(frames_renamed_path, '*.png'), # glob not available in Windows by default
 18 #'-r', '60', # Output frame rate
 19 '-vf', 'pad=ceil(iw/2)*2:ceil(ih/2)*2', # Pad frames to even pixel numbers (required by many codecs)
 20 #'-pix_fmt', 'yuv420p',
 21 '-pix_fmt', 'rgb32', # Use RGB32 pixel format matching MatPlotLib image output
 22 '-filter_complex', # Cut frames into tiles and rearrange (here: 7 horizontal tiles)
 23 'crop=in_w:in_h/7:0:0[tile_1],' # 1st tile from top
 24 + 'crop=in_w:in_h/7:0:in_h*1/7[tile_2],' # 2nd tile from top
 25 + 'crop=in_w:in_h/7:0:in_h*2/7[tile_3],' # 3rd tile from top
 26 + 'crop=in_w:in_h/7:0:in_h*3/7[tile_4],' # 4th tile from top
 27 + 'crop=in_w:in_h/7:0:in_h*4/7[tile_5],' # 5th tile from top
 28 + 'crop=in_w:in_h/7:0:in_h*5/7[tile_6],' # 6th tile from top
 29 + 'crop=in_w:in_h/7:0:in_h*6/7[tile_7],' # 7th tile from top
 30 + '[tile_1][tile_2][tile_3][tile_4][tile_5][tile_6][tile_7]hstack=7', # Stack tiles horizontally
 31 os.path.join(frames_renamed_path, 'video.mp4') # Path to store output video
 32 ]
 33 )
 35 os.chdir(notebook_directory)

File C:\Program Files\Python38\lib\subprocess.py:364, in check_call(*popenargs, **kwargs)
 362 if cmd is None:
 363 cmd = popenargs[0]
--> 364 raise CalledProcessError(retcode, cmd)
 365 return 0

CalledProcessError: Command '['C:\\Users\\Username\\Desktop\\ffmpeg\\ffmpeg', '-y', '-report', '-hwaccel', 'cuda', '-framerate', '60', '-i', 'C:\\Users\\Username\\Desktop\\renamed\\frame%05d.png', '-vf', 'pad=ceil(iw/2)*2:ceil(ih/2)*2', '-pix_fmt', 'rgb32', '-filter_complex', 'crop=in_w:in_h/7:0:0[tile_1],crop=in_w:in_h/7:0:in_h*1/7[tile_2],crop=in_w:in_h/7:0:in_h*2/7[tile_3],crop=in_w:in_h/7:0:in_h*3/7[tile_4],crop=in_w:in_h/7:0:in_h*4/7[tile_5],crop=in_w:in_h/7:0:in_h*5/7[tile_6],crop=in_w:in_h/7:0:in_h*6/7[tile_7],[tile_1][tile_2][tile_3][tile_4][tile_5][tile_6][tile_7]hstack=7', 'C:\\Users\\Username\\Desktop\\renamed\\video.mp4']' returned non-zero exit status 1.
</cell>


This is the
ffmpeg
log output (cropped) :

ffmpeg started on 2022-08-04 at 01:17:19
Report written to "ffmpeg-20220804-011719.log"
Log level: 48
Command line:
"C:\\Users\\Username\\Desktop\\ffmpeg\\ffmpeg" -y -report -hwaccel cuda -framerate 60 -i "C:\\Users\\Username\\Desktop\\renamed\\frame%05d.png" -vf "pad=ceil(iw/2)*2:ceil(ih/2)*2" -pix_fmt rgb32 -filter_complex "crop=in_w:in_h/7:0:0[tile_1],crop=in_w:in_h/7:0:in_h*1/7[tile_2],crop=in_w:in_h/7:0:in_h*2/7[tile_3],crop=in_w:in_h/7:0:in_h*3/7[tile_4],crop=in_w:in_h/7:0:in_h*4/7[tile_5],crop=in_w:in_h/7:0:in_h*5/7[tile_6],crop=in_w:in_h/7:0:in_h*6/7[tile_7],[tile_1][tile_2][tile_3][tile_4][tile_5][tile_6][tile_7]hstack=7" "C:\\Users\\Username\\Desktop\\renamed\\video.mp4"
ffmpeg version 2022-07-14-git-882aac99d2-full_build-www.gyan.dev Copyright (c) 2000-2022 the FFmpeg developers
 built with gcc 12.1.0 (Rev2, 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-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-libmfx --enable-libshaderc --enable-vulkan --enable-libplacebo --ena libavutil 57. 29.100 / 57. 29.100
 libavcodec 59. 38.100 / 59. 38.100
 libavformat 59. 28.100 / 59. 28.100
 libavdevice 59. 8.100 / 59. 8.100
 libavfilter 8. 45.100 / 8. 45.100
 libswscale 6. 8.100 / 6. 8.100
 libswresample 4. 8.100 / 4. 8.100
 libpostproc 56. 7.100 / 56. 7.100
Splitting the commandline.
Reading option '-y' ... matched as option 'y' (overwrite output files) with argument '1'.
Reading option '-report' ... matched as option 'report' (generate a report) with argument '1'.
Reading option '-hwaccel' ... matched as option 'hwaccel' (use HW accelerated decoding) with argument 'cuda'.
Reading option '-framerate' ... matched as AVOption 'framerate' with argument '60'.
Reading option '-i' ... matched as input url with argument 'C:\Users\Username\Desktop\renamed\frame%05d.png'.
Reading option '-vf' ... matched as option 'vf' (set video filters) with argument 'pad=ceil(iw/2)*2:ceil(ih/2)*2'.
Reading option '-pix_fmt' ... matched as option 'pix_fmt' (set pixel format) with argument 'rgb32'.
Reading option '-filter_complex' ... matched as option 'filter_complex' (create a complex filtergraph) with argument 'crop=in_w:in_h/7:0:0[tile_1],crop=in_w:in_h/7:0:in_h*1/7[tile_2],crop=in_w:in_h/7:0:in_h*2/7[tile_3],crop=in_w:in_h/7:0:in_h*3/7[tile_4],crop=in_w:in_h/7:0:in_h*4/7[tile_5],crop=in_w:in_h/7:0:in_h*5/7[tile_6],crop=in_w:in_h/7:0:in_h*6/7[tile_7],[tile_1][tile_2][tile_3][tile_4][tile_5][tile_6][tile_7]hstack=7'.
Reading option 'C:\Users\Username\Desktop\renamed\video.mp4' ... matched as output url.
Finished splitting the commandline.
Parsing a group of options: global .
Applying option y (overwrite output files) with argument 1.
Applying option report (generate a report) with argument 1.
Applying option filter_complex (create a complex filtergraph) with argument crop=in_w:in_h/7:0:0[tile_1],crop=in_w:in_h/7:0:in_h*1/7[tile_2],crop=in_w:in_h/7:0:in_h*2/7[tile_3],crop=in_w:in_h/7:0:in_h*3/7[tile_4],crop=in_w:in_h/7:0:in_h*4/7[tile_5],crop=in_w:in_h/7:0:in_h*5/7[tile_6],crop=in_w:in_h/7:0:in_h*6/7[tile_7],[tile_1][tile_2][tile_3][tile_4][tile_5][tile_6][tile_7]hstack=7.
Successfully parsed a group of options.
Parsing a group of options: input url C:\Users\Username\Desktop\renamed\frame%05d.png.
Applying option hwaccel (use HW accelerated decoding) with argument cuda.
Successfully parsed a group of options.
Opening an input file: C:\Users\Username\Desktop\renamed\frame%05d.png.
[image2 @ 00000000005db0c0] Opening 'C:\Users\Username\Desktop\renamed\frame00000.png' for reading
[file @ 00000000005f6c00] Setting default whitelist 'file,crypto,data'
[AVIOContext @ 00000000005fed40] Statistics: 28860 bytes read, 0 seeks

<...>

[AVIOContext @ 00000000005fda00] Statistics: 67659 bytes read, 0 seeks
[image2 @ 00000000005db0c0] Probe buffer size limit of 5000000 bytes reached
Input #0, image2, from 'C:\Users\Username\Desktop\renamed\frame%05d.png':
 Duration: 00:00:25.00, start: 0.000000, bitrate: N/A
 Stream #0:0, 80, 1/60: Video: png, rgba(pc), 1200x1857 [SAR 3937:3937 DAR 400:619], 60 fps, 60 tbr, 60 tbn
Successfully opened the file.
[Parsed_crop_0 @ 00000000005fdc40] Setting 'out_w' to value 'in_w'
[Parsed_crop_0 @ 00000000005fdc40] Setting 'out_h' to value 'in_h/7'
[Parsed_crop_0 @ 00000000005fdc40] Setting 'x' to value '0'
[Parsed_crop_0 @ 00000000005fdc40] Setting 'y' to value '0'
[Parsed_crop_1 @ 0000000000607500] Setting 'out_w' to value 'in_w'
[Parsed_crop_1 @ 0000000000607500] Setting 'out_h' to value 'in_h/7'
[Parsed_crop_1 @ 0000000000607500] Setting 'x' to value '0'
[Parsed_crop_1 @ 0000000000607500] Setting 'y' to value 'in_h*1/7'
[Parsed_crop_2 @ 0000000000607880] Setting 'out_w' to value 'in_w'
[Parsed_crop_2 @ 0000000000607880] Setting 'out_h' to value 'in_h/7'
[Parsed_crop_2 @ 0000000000607880] Setting 'x' to value '0'
[Parsed_crop_2 @ 0000000000607880] Setting 'y' to value 'in_h*2/7'
[Parsed_crop_3 @ 0000000000607c00] Setting 'out_w' to value 'in_w'
[Parsed_crop_3 @ 0000000000607c00] Setting 'out_h' to value 'in_h/7'
[Parsed_crop_3 @ 0000000000607c00] Setting 'x' to value '0'
[Parsed_crop_3 @ 0000000000607c00] Setting 'y' to value 'in_h*3/7'
[Parsed_crop_4 @ 00000000005fda00] Setting 'out_w' to value 'in_w'
[Parsed_crop_4 @ 00000000005fda00] Setting 'out_h' to value 'in_h/7'
[Parsed_crop_4 @ 00000000005fda00] Setting 'x' to value '0'
[Parsed_crop_4 @ 00000000005fda00] Setting 'y' to value 'in_h*4/7'
[Parsed_crop_5 @ 0000000002b8f800] Setting 'out_w' to value 'in_w'
[Parsed_crop_5 @ 0000000002b8f800] Setting 'out_h' to value 'in_h/7'
[Parsed_crop_5 @ 0000000002b8f800] Setting 'x' to value '0'
[Parsed_crop_5 @ 0000000002b8f800] Setting 'y' to value 'in_h*5/7'
[Parsed_crop_6 @ 0000000000607d00] Setting 'out_w' to value 'in_w'
[Parsed_crop_6 @ 0000000000607d00] Setting 'out_h' to value 'in_h/7'
[Parsed_crop_6 @ 0000000000607d00] Setting 'x' to value '0'
[Parsed_crop_6 @ 0000000000607d00] Setting 'y' to value 'in_h*6/7'
[Parsed_hstack_7 @ 0000000002b8fb80] Setting 'inputs' to value '7'
Cannot find a matching stream for unlabeled input pad 0 on filter Parsed_crop_1



What is the problem here ? Also, how does one interpret this cryptic error message at the end of the log output :


Cannot find a matching stream for unlabeled input pad 0 on filter Parsed_crop_1


E.g. what is
input pad 0
, why is itunlabeled
, and why can't it find a matching stream ?

(PS. : Yes, I do have a habit of excessively documenting my code. ^^)


-
Interview de l'auteur du Livre sur Piwik : Ronan Chardonneau
20 juillet 2012, par Piwik team — CommunityRonan Chardonneau, auteur de Piwik : L'alternative Open Source en web analytique aux éditions ENI, répond aux questions de Matthieu Aubry le créateur de Piwik !
Qu'est ce qui t'a poussé à écrire ce livre ?En fait il y a eu plusieurs choses. Tout d'abord je travaille au sein d'une structure un peu spéciale, notre agence web, inextcom travaille physiquement sur un plateau regroupant la plupart des acteurs de la ville de Nantes qui utilisent des logiciels libres. Toutes ses entreprises sont adhérentes d'une association qui s'appelle Alliance Libre. Quand je suis arrivé au sein de cette structure j'étais le seul à venir du monde du webmarketing. Le webmarketing tourne beaucoup autour de Google du coup je n'étais pas forcément vu d'un très bon oeil. Du coup j'ai voulu m'ouvrir sur ce qui se passait en dehors de Google Analytics est c'est ainsi que j'ai découvert Piwik. J'ai pas mal accroché sur cette technologie car elle est très intuitive.
Je me suis penché sur cette solution et ai décidé de la proposer en tant que formation. Quelques mois après son apparition dans notre catalogue de formation nous avons été contacté par un grand compte français pour donner un formation. J'avais vraiment à cœur de fournir une formation de qualité, en un week end mon support de cours avait dépassé les 50 pages. Je suis arrivé le lundi matin au travail et j'ai dit, les gars on va écrire un livre sur Piwik. J'ai regardé ce qui s'était déjà fait à droite à gauche et il n'y avait qu'un seul livre au monde semble t il écrit sur le sujet. Je me suis dit qu'il pouvait être intéressant de démocratiser l'outil… et au revoir jolis petits week end et bonjour les nuits blanches :)
Je voulais également être l'un des premiers auteurs sur cette solution car trop souvent ces ouvrages sont écrits par des anciens ingénieurs ou développeurs qui ont ensuite basculé dans le monde du marketing. Dans mon cas c'est le contraire je viens du marketing et ai basculé dans l'informatique, du coup ma vision du logiciel est purement orienté sur la façon dont je vais pouvoir extraire les informations pour mon analyse et non pas l'ensemble des fonctionnalités qui ont été développées pour le logiciel.
Combien de temps ce projet de livre Piwik a t'il pris ?
En fait j'adore écrire, et j'ai eu l'écriture plutôt facile pour ce livre. Le temps me manquait du coup j'ai décidé de l'écrire avec l'un de mes collègues : Germain Butrot. Le plus pénible dans l'écriture est que nous ne sommes pas développeurs du coup on a perdu pas mal de temps sur des soucis d'installation. Je dirai que rédiger ce livre nous a pris deux mois de travail.
Combien de clients as tu introduits à Piwik ?
Pas énormément, en fait les clients ont déjà fait leur choix de cette solution avant de s'engager chez nous, simplement qu'ils ne savent pas l'installer, le configurer, gérer la base de données etc. En fait il y a les clients qui n'ont pas encore réalisé oh combien la confidentialité de leurs données est critique et qu'il est dangereux de les confier à des tiers, ce qui représente 97% des sites Internet. Les 3% restants sont des entreprises qui en effet souhaitent se rapprocher au maximum du risque 0 en ce qui concerne la confidentialité des données. Nous introduisons la plupart de nos clients à Piwik, cependant ces derniers ont au final le choix entre une solution gratuite que tout le monde utilise et un hébergement de données payant pour atteindre un niveau de sécurité qu'ils ne considèrent pas comme critique.
Ronan séance de dédicaces
Le web analytique étant une discipline peu enseignée en France, le plus gros du travail est de faire réaliser aux webmasters que la notion de confidentialité est extrêmement importante. Je pense sincèrement que de plus en plus d'utilisateurs migreront sur des solutions telles que Piwik, tout simplement parce que le web analytique est une discipline en développement et que l'on commence à récupérer des données de plus en plus précieuses, il va donc falloir commencer à les protéger au maximum.
Si tu avais le droit à un vœu, quelle serait la nouvelle fonctionnalité qui te plairait le plus dans Piwik ?
Bonne question, en fait je pense qu'il y en a deux, personnellement je souhaiterais que l'on puisse créer les rapports de son choix en sélectionnant uniquement les données désirées. Cependant je pense que la fonctionnalité qui ferait beaucoup de bien pour la démocratisation de Piwik serait de pouvoir uniquement insérer le tagging dans les pages pour que Piwik commence à récolter les données. C'est principalement ce que je décris dans le livre, l'installation de Piwik est encore assez technique pour des personnes qui n'y connaissent rien. Les gens n'ayant pas encore saisi l'importance du web analytique sont à la recherche d'un outil qui en peu d'efforts peu être installé.
Tu as beaucoup d’expérience en web marketing. Que nous conseilles tu pour le futur en terme de Marketing pour Piwik ?
Je pense que Piwik a un potentiel énorme tout comme la plupart des projets open source populaires. Le problème c'est que ces projets ne savent pas encore communiquer auprès des personnes spécialisées dans le marketing. Le concept de l'open source n'est pas du coup connu du monde du marketing. Ce qui fait que lorsqu'un projet open source débarque sur le marché on a l'impression que seuls des personnes avec des connaissances en développement peuvent contribuer à ce projet alors qu'il existe énormément de missions que des personnes du marketing peuvent occuper au sein d'un tel projet : traduction, réalisation de bannières publicitaires, réalisation de pages de contenu pour en faire la promotion, remontée de fonctions importantes à intégrer etc
De tous les projets Open Source que je connais je trouve que le CMS WordPress s'en sort le mieux, l'outil est très facile à prendre en main, assez intuitif, du coup nombreux sont les personnes du marketing a s'être familiarisé avec l'outil et à en faire des retours pour des développements de modules, de templates etc au final la communauté WordPress est énorme et le nombre de plugin impressionnant.
Pour Piwik je pense qu'il pourrait être intéressant d'interroger des utilisateurs influents dans le monde du web analytique, de les inviter à utiliser Piwik et de nous faire un retour sur les fonctionnalités éventuelles à installer.
Le livre devrait être traduit en espagnol et disponible sur ce marché d'ici 6 mois. Concernant les autres langues je suis actuellement à la recherche de traducteurs dans toutes les autres langues. Je suis prêt à céder mes droits de traduction à un prix modique, ce qui m'intéresse avant tout c'est la démocratisation de l'outil. Aussi n'hésitez pas à me faire si vous êtes volontaire ou avez des personnes volontaires dans votre entourage.
Y aura t-il une version 2 du livre ?
Très certainement une version avancée du livre verra le jour dans les prochaines années, tout dépend principalement des retours qui me seront fait par rapport à cet ouvrage, les demandes de personnalisation de code dont on m'aura fait la demande, le développement de Piwik…
Merci Ronan pour ton travail de démocratisation sur Piwik, ton livre va vraiment permettre au projet de trouver une nouvelle cible en France… et on espère voir une Version 2 du livre dans quelques mois ! Je te souhate de bonnes ventes pour le livre et bonne contination pour tous tes projets.
Le livre est en vente sur la FNAC, Amazon.fr, le site de l'éditeur.
A voir aussi : Grand Jeu Concours 10 Livres Piwik à gagner !
-
sipr : Drop unused DSPContext
19 juin 2011, par Alex Conversesipr : Drop unused DSPContext