<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="pretty-atom-feed.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
  <title>echouchane.com</title>
  <subtitle>Carnet de notes d&#39;Emir</subtitle>
  <link href="https://echouchane.com/feed/feed.xml" rel="self" />
  <link href="https://echouchane.com/" />
  <updated>2025-03-25T00:00:00Z</updated>
  <id>https://echouchane.com/</id>
  <author>
    <name>Emir Chouchane</name>
  </author>
  <entry>
    <title>API REST pour caméras Blackmagic et Companion</title>
    <link href="https://echouchane.com/blog/blackmagicapi/" />
    <updated>2025-03-25T00:00:00Z</updated>
    <id>https://echouchane.com/blog/blackmagicapi/</id>
    <content type="html">&lt;p&gt;Les caméras Blackmagic peuvent être contrôlées soit à travers un mélangeur ATEM, soit directement via leur API REST. Dans ce dernier cas, il suffit d’envoyer des requêtes HTTP de type GET ou PUT à l’adresse IP de la caméra, en veillant à ce qu’elle soit connectée au même réseau local que votre ordinateur.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;configuration-de-la-camera&quot;&gt;Configuration de la caméra&lt;/h2&gt;
&lt;p&gt;Pour une première configuration de la caméra, installer le logiciel &lt;a href=&quot;https://www.blackmagicdesign.com/developer/products/camera/sdk-and-software&quot;&gt;Blackmagic Camera Setup&lt;/a&gt; sur votre ordinateur, connecter la caméra à votre ordinateur via USB-C et ouvrir le logiciel. Profitez-en pour mettre à jour le firmware. Configurer ensuite l&#39;adresse IP, le nom de la caméra (optionnel), le masque sous-réseau et la passerelle. Ne pas oublier d&#39;activer le &lt;strong&gt;web media manager (HTTP)&lt;/strong&gt; et &lt;strong&gt;Allow utility administration&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://echouchane.com/img/vJ0o-3JP9X-615.avif 615w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://echouchane.com/img/vJ0o-3JP9X-615.webp 615w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://echouchane.com/img/vJ0o-3JP9X-615.png&quot; alt=&quot;Blackmagic Camera Setup&quot; width=&quot;615&quot; height=&quot;724&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;S&#39;assurer d&#39;être sur le même réseau que la caméra envoyant un ping à l&#39;adresse IP depuis votre ordinateur. Plusieurs caméras peuvent être connectées au même réseau, il faut s&#39;assurer qu&#39;elles ont des noms ou des adresses IP différentes.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;utilisation-de-l-api&quot;&gt;Utilisation de l&#39;API&lt;/h2&gt;
&lt;p&gt;Pour utiliser l&#39;API, il faut envoyer des requêtes HTTP à l&#39;adresse IP de la caméra. Voici quelques exemples de requêtes :&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# Obtenir la configuration de la vidéo : format, codec, etc.&lt;/span&gt;
GET http://&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;camera_ip&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;/control/api/v1/system
&lt;span class=&quot;token comment&quot;&gt;# Avoir la valeur du shutter&lt;/span&gt;
GET http://&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;camera_ip&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;/control/api/v1/video/shutter&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Pour les GET, les réponses sont au format JSON.&lt;/p&gt;
&lt;p&gt;La documentation de l&#39;API REST &lt;a href=&quot;https://documents.blackmagicdesign.com/DeveloperManuals/RESTAPIforBlackmagicCameras.pdf?_v=1696143610000&quot;&gt;est disponible sur le site de Blackmagic Design&lt;/a&gt;. Il est possible d&#39;utiliser des outils comme Postman pour tester les requêtes avant de les intégrer dans un script ou une application.&lt;/p&gt;
&lt;p&gt;L&#39;API ne permet malheureusement pas de contrôler l&#39;alimentation de la caméra, ni l&#39;enregistrement ou son arrêt à distance.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;utilisation-avec-companion&quot;&gt;Utilisation avec Companion&lt;/h2&gt;
&lt;p&gt;Companion est un logiciel qui permet de contrôler des appareils via une interface web ou un StreamDeck. Il est possible d&#39;utiliser Companion pour contrôler les caméras Blackmagic en utilisant l&#39;API de la caméra.&lt;/p&gt;
&lt;p&gt;Pour cela, il faut ajouter le module HTTP dans Companion et configurer les requêtes pour contrôler la caméra. Voici comment faire :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Ouvrir Companion et se rendre dans l&#39;onglet &lt;strong&gt;Modules&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Ajouter le module &lt;em&gt;HTTP Generic&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Vu que j&#39;ai plusieurs caméras, je ne vais pas indiquer l&#39;adresse IP dans la configuration du module, mais dans chaque bouton que je vais créer.&lt;/li&gt;
&lt;li&gt;Changer &lt;strong&gt;Unauthorized Certificates&lt;/strong&gt; à &lt;strong&gt;Accept&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Dans l&#39;onglet &lt;strong&gt;Boutons&lt;/strong&gt;, ajouter un bouton en cliquant sur le bouton &lt;strong&gt;Ajouter un bouton&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Dans &lt;strong&gt;Actions&lt;/strong&gt;, sélectionnez le module HTTP, puis choisissez la méthode &lt;strong&gt;PUT&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Dans le champ &lt;strong&gt;URL&lt;/strong&gt;, indiquer l&#39;URL de la requête HTTP que vous souhaitez envoyer à la caméra. Par exemple, pour avoir l&#39;état du système, vous pouvez utiliser l&#39;URL suivante :&lt;pre&gt;&lt;code&gt;http://&amp;lt;camera_ip&amp;gt;/control/api/v1/system
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Garder le reste tel quel.&lt;/li&gt;
&lt;li&gt;Vérifiez dans le journal (&lt;em&gt;log&lt;/em&gt;) de Companion que la requête a bien été envoyée et que la caméra a répondu.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id=&quot;controle-de-l-optique&quot;&gt;Contrôle de l&#39;optique&lt;/h2&gt;
&lt;p&gt;Ce qui m&#39;intéresse avant tout avec cette méthode, c&#39;est de pouvoir contrôler l&#39;optique, aussi bien le zoom que le focus.
Dans mes tests, j&#39;ai utilisé la caméra &lt;a href=&quot;https://www.blackmagicdesign.com/products/blackmagicmicrostudiocamera&quot;&gt;Blackmagic Micro Studio 4K G2&lt;/a&gt; et une optique compatible &lt;a href=&quot;https://gosselinphoto.ca/fr/olympus-m-zuiko-ed-14-42mm-conf?chosenSku=1023350&quot;&gt;Olympus M.Zuiko ED 14-42mm f/3.5-5.6 EZ&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Petite note : Le capteur est un CMOS Four Thirds, donc l’objectif 14mm devient un équivalent 28mm (facteur x2). À prendre en considération lors du choix de l&#39;optique.&lt;/p&gt;
&lt;p&gt;Voici un exemple de requête pour contrôler le zoom avant dans Companion:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Actions : HTTP PUT&lt;/li&gt;
&lt;li&gt;URL : http://&amp;lt;camera_ip&amp;gt;/control/api/v1/lens/zoom&lt;/li&gt;
&lt;li&gt;Body : { &amp;quot;normalised&amp;quot;: 0.8 }&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le &lt;em&gt;normalised&lt;/em&gt; fait référence à une valeur de zoom représentée en &lt;em&gt;float&lt;/em&gt; entre 0.0 et 1.0, indépendamment de la plage optique réelle de la caméra. À 0.0, le zoom est au minimum, et à 1.0, il est au maximum. À vous de faire la conversion par rapport à l&#39;optique que vous utilisez.&lt;/p&gt;
&lt;p&gt;Je cherche encore une méthode fiable pour incrémenter le zoom avec de ±0.1 via une variable &lt;em&gt;custom&lt;/em&gt;, ce qui éviterait d’avoir un bouton pour chaque niveau de zoom. Si vous avez une idée, n’hésitez pas à me la transmettre!&lt;/p&gt;
&lt;p&gt;Pour le focus, vous pouvez soit envoyer une commande AutoFocus, soit définir une valeur de focus normalisée.
Consultez la documentation de l&#39;API REST de Blackmagic pour plus de détails (&lt;a href=&quot;https://documents.blackmagicdesign.com/DeveloperManuals/RESTAPIforBlackmagicCameras.pdf&quot;&gt;Section Lens Control API, page 22&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Voici un exemple de requête pour l&#39;AutoFocus, directement depuis Companion :&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://echouchane.com/img/XxDr1KAA9W-1018.avif 1018w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://echouchane.com/img/XxDr1KAA9W-1018.webp 1018w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://echouchane.com/img/XxDr1KAA9W-1018.png&quot; alt=&quot;Companion Blackmagic AutoFocus&quot; width=&quot;1018&quot; height=&quot;377&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;Vous remarquerez que j’utilise le nom de la caméra au lieu de son adresse IP. J’ai cependant constaté une certaine lenteur avec les noms en .local, probablement liée à la résolution du nom d’hôte. Je vous recommande donc d’utiliser directement l’adresse IP pour une communication plus rapide et fiable.&lt;/p&gt;
&lt;p&gt;En quelques boutons, vous pouvez créer une interface simple pour vos besoins :
&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://echouchane.com/img/-Mdz9B_q02-398.avif 398w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://echouchane.com/img/-Mdz9B_q02-398.webp 398w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://echouchane.com/img/-Mdz9B_q02-398.png&quot; alt=&quot;Companion Blackmagic&quot; width=&quot;398&quot; height=&quot;243&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;Note : J’utilise un switch PDU pour gérer l’alimentation des caméras, d’où la présence des boutons &lt;strong&gt;Allumer&lt;/strong&gt; et &lt;strong&gt;Éteindre&lt;/strong&gt; (qui devraient d’ailleurs être regroupés en un seul bouton avec changement d’état!)&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;aller-plus-loin-avec-companion&quot;&gt;Aller plus loin avec Companion&lt;/h2&gt;
&lt;p&gt;La prochaine étape, cela serait d&#39;avoir du &lt;em&gt;feedback&lt;/em&gt; sur les valeurs du zoom, focus, etc. directement dans Companion. Il est possible de le faire en utilisant des requêtes GET, cela permet d&#39;avoir une interface un peu plus interactive.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;N&#39;hésitez pas &lt;a href=&quot;https://echouchane.com/info/&quot;&gt;à me faire part de vos retours&lt;/a&gt; ou de vos questions sur ce sujet!&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Découvrathon - Article dans UdeMNouvelles</title>
    <link href="https://echouchane.com/blog/decouvrathon-article/" />
    <updated>2024-10-31T00:00:00Z</updated>
    <id>https://echouchane.com/blog/decouvrathon-article/</id>
    <content type="html">&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://echouchane.com/img/wcmg56XVKg-1125.avif 1125w&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://echouchane.com/img/wcmg56XVKg-1125.webp 1125w&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://echouchane.com/img/wcmg56XVKg-1125.jpeg&quot; alt=&quot;En compagnie des membres de l’équipe que j&#39;ai accompagnée à l&#39;occasion du Découvrathon.&quot; style=&quot;width: 100%; height: auto; border-radius: 8px;&quot; width=&quot;1125&quot; height=&quot;750&quot;&gt;&lt;/picture&gt;
&lt;p&gt;Un grand merci à &lt;strong&gt;Martin LaSalle&lt;/strong&gt; pour ce bel article dans UdeMNouvelles, qui revient sur ma participation au Découvrathon à la BnF (Paris), un moment riche en rencontres, en idées et en expérimentations.&lt;/p&gt;
&lt;p&gt;C’est toujours un peu étrange (et touchant) de se lire à travers les mots de quelqu’un d’autre, surtout quand ils sont choisis avec autant de justesse.&lt;/p&gt;
&lt;p&gt;À lire ici : &lt;a href=&quot;https://nouvelles.umontreal.ca/article/2024/10/31/au-coeur-de-linnovation-francophone-le-decouvrathon-vu-par-emir-chouchane/&quot;&gt;Au cœur de l’innovation francophone – Le Découvrathon vu par Emir Chouchane&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Crédit photo : Béatrice Lucchese, BnF&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>WebP - Le format d&#39;image du futur</title>
    <link href="https://echouchane.com/blog/webp/" />
    <updated>2023-04-19T00:00:00Z</updated>
    <id>https://echouchane.com/blog/webp/</id>
    <content type="html">&lt;p&gt;Depuis quelque temps, &lt;a href=&quot;https://almanac.httparchive.org/en/2021/page-weight&quot;&gt;je m’intéresse au poids du web&lt;/a&gt;. Plus les connexions deviennent rapides, plus les sites se permettent d’être lourds… et ça pose plein de questions, &lt;a href=&quot;https://www.w3.org/standards/webdesign/accessibility&quot;&gt;surtout quand on parle d’accessibilité&lt;/a&gt;. Ce n’est pas juste une question de handicap : ça concerne aussi celles et ceux qui accèdent au web avec des vieux appareils ou des connexions lentes. Bref, tout le monde n’a pas la fibre et un MacBook Pro.&lt;/p&gt;
&lt;p&gt;Un des gros coupables, ce sont les images. Et c’est là que j’ai redécouvert &lt;strong&gt;le format WebP&lt;/strong&gt;. Il remplace avantageusement les classiques JPEG et PNG, avec un taux de compression bien meilleur. Moins lourd, mais visuellement presque pareil. En bonus, il gère la transparence (comme le PNG), les animations (comme le GIF), et il est pensé spécifiquement pour le web. C’est un projet open source de Google (&lt;a href=&quot;https://www.webmproject.org/license/additional/&quot;&gt;licence ici&lt;/a&gt;), toujours activement maintenu (&lt;a href=&quot;https://chromium.googlesource.com/webm/libwebp/&quot;&gt;repo ici&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;WebP propose deux types de compression : &lt;strong&gt;lossy&lt;/strong&gt; (avec perte) et &lt;strong&gt;lossless&lt;/strong&gt; (sans perte), selon le besoin. Et franchement, c’est un bon compromis. Il est même &lt;a href=&quot;https://caniuse.com/webp&quot;&gt;supporté par la majorité des navigateurs&lt;/a&gt;. Moins de bande passante utilisée, un site qui se charge plus vite, une meilleure expérience utilisateur, et même un petit coup de pouce côté SEO.&lt;/p&gt;
&lt;p&gt;Ce qui m’intéresse aussi, c’est l’aspect écologique : réduire la bande passante, c’est consommer un peu moins d’énergie. Pas énorme à l’échelle d’une page, mais à l’échelle du web… ça compte.&lt;/p&gt;
&lt;p&gt;Et puis, il y a aussi le stockage. Pour un petit site, ce n’est pas un enjeu majeur, mais pour une grosse plateforme avec des milliers de pages, ça commence à peser.&lt;/p&gt;
&lt;p&gt;Bref, je garde WebP dans ma boîte à outils. Un petit geste technique, mais qui va dans le bon sens.&lt;/p&gt;
&lt;h2 id=&quot;comment-convertir-en-webp&quot;&gt;Comment convertir en WebP&lt;/h2&gt;
&lt;h3 id=&quot;solution-en-ligne-de-commande-avec-cwebp&quot;&gt;Solution en ligne de commande avec cwebp&lt;/h3&gt;
&lt;h4 id=&quot;sur-windows&quot;&gt;Sur Windows&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Rendez-vous sur &lt;a href=&quot;https://developers.google.com/speed/webp/download&quot;&gt;le site officiel du projet WebP&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Télécharger le fichier &amp;quot;libwebp-xxx-windows-x64.zip&amp;quot; (remplacez &amp;quot;xxx&amp;quot; par la version actuelle).&lt;/li&gt;
&lt;li&gt;Extraire le fichier ZIP dans un dossier de votre choix.&lt;/li&gt;
&lt;li&gt;Ajouter le chemin du dossier extrait à la variable d&#39;environnement &amp;quot;Path&amp;quot; de votre système.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&quot;sur-macos-en-utilisant-homebrew&quot;&gt;Sur macOS (en utilisant Homebrew)&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Si vous n&#39;avez pas Homebrew installé, vous pouvez le faire en suivant les instructions sur le site officiel (https://brew.sh).&lt;/li&gt;
&lt;li&gt;Ouvrir le terminal et taper la commande suivante :&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;brew &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; webp&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;sur-linux-debian-ubuntu&quot;&gt;Sur Linux (Debian/Ubuntu)&lt;/h4&gt;
&lt;p&gt;Ouvrir le terminal et taper la commande suivante :&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt-get&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; webp&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;utilisation-de-l-outil&quot;&gt;Utilisation de l&#39;outil&lt;/h3&gt;
&lt;p&gt;La syntaxe de base pour utiliser cwebp est la suivante :&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;cwebp &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;options&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; input_image &lt;span class=&quot;token parameter variable&quot;&gt;-o&lt;/span&gt; output_image.webp&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;input_image&lt;/strong&gt; : le fichier image d&#39;origine (JPEG, PNG, etc.).
&lt;strong&gt;output_image.webp&lt;/strong&gt; : le nom du fichier WebP de sortie.
&lt;strong&gt;[options]&lt;/strong&gt; : les options de conversion, telles que la qualité, la méthode de compression, etc.&lt;/p&gt;
&lt;p&gt;Pour convertir une image JPEG en WebP avec une qualité de 80% :&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;cwebp &lt;span class=&quot;token parameter variable&quot;&gt;-q&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;80&lt;/span&gt; input_image.jpg &lt;span class=&quot;token parameter variable&quot;&gt;-o&lt;/span&gt; output_image.webp&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;et tout les fichiers dans le dossier images :&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token for-or-select variable&quot;&gt;file&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; images/*&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt; cwebp &lt;span class=&quot;token parameter variable&quot;&gt;-q&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;80&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$file&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-o&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;${file&lt;span class=&quot;token operator&quot;&gt;%&lt;/span&gt;.*}&lt;/span&gt;.webp&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;done&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Voici quelques options courantes pour personnaliser la conversion :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;-q&lt;/strong&gt; : définit la qualité de l&#39;image WebP (0 à 100). Une valeur plus élevée donne une qualité d&#39;image plus élevée et une taille de fichier plus importante. Par exemple, -q 80 définit une qualité de 80%.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;-m&lt;/strong&gt; : sélectionne la méthode de compression (0 à 6). Une valeur plus élevée offre une meilleure compression, mais nécessite plus de temps pour la conversion. Par exemple, -m 6 utilise la méthode de compression la plus lente et la plus efficace.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;-lossless&lt;/strong&gt; : convertit l&#39;image en mode sans perte. Utilisez cette option pour conserver la qualité d&#39;image d&#39;origine.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;-z&lt;/strong&gt; : active le mode &amp;quot;sans pertes&amp;quot; avec une compression optimale. Cela prendra plus de temps pour la conversion, mais réduira davantage la taille du fichier.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;-resize&lt;/strong&gt; : redimensionne l&#39;image avant la conversion. Par exemple, -resize 800 600 redimensionne l&#39;image à 800x600 pixels.&lt;/p&gt;
&lt;p&gt;Pour plus d&#39;options, consultez &lt;a href=&quot;https://developers.google.com/speed/webp/docs/cwebp&quot;&gt;la documentation officielle de cwebp&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;solution-pour-les-ssg&quot;&gt;Solution pour les SSG&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Astro : https://docs.astro.build/en/guides/images/&lt;/li&gt;
&lt;li&gt;Hugo : https://gohugo.io/content-management/image-processing/#target-format&lt;/li&gt;
&lt;li&gt;Eleventy : https://www.11ty.dev/docs/plugins/image/ https://www.aleksandrhovhannisyan.com/blog/eleventy-image-plugin/&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;solution-logicielle&quot;&gt;Solution logicielle&lt;/h3&gt;
&lt;p&gt;Compatible avec Photoshop 23.2 (depuis début 2022)&lt;/p&gt;
&lt;h3 id=&quot;futurs-developpements&quot;&gt;Futurs développements&lt;/h3&gt;
&lt;p&gt;Les formats &lt;a href=&quot;https://web.dev/learn/images/avif/&quot;&gt;AVIF&lt;/a&gt; et &lt;a href=&quot;https://jpegxl.info/&quot;&gt;JPEG XL&lt;/a&gt; sont en développement, ainsi que &lt;a href=&quot;https://chromium.googlesource.com/codecs/libwebp2/&quot;&gt;WebP 2&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Datamosh - mode d’emploi</title>
    <link href="https://echouchane.com/blog/datamosh/" />
    <updated>2019-01-30T00:00:00Z</updated>
    <id>https://echouchane.com/blog/datamosh/</id>
    <content type="html">&lt;h2 id=&quot;1-c-est-quoi&quot;&gt;1 – C’est quoi ?&lt;/h2&gt;
&lt;p&gt;Le datamoshing est le processus de manipulation des données d’un fichier média afin d’obtenir intentionnellement des erreurs de compression à des fins artistiques.&lt;/p&gt;
&lt;p&gt;La technique est apparue au début des années 2000, inspirée par les artefacts issus des premiers codecs numériques comme le DivX. Des artistes ont commencé à exploiter ces erreurs de compression et à pirater des vidéos pour générer des effets visuels imprévisibles et organiques.&lt;/p&gt;
&lt;p&gt;Personne ne sait avec certitude quand le mot « datamosh » a été utilisé pour la première fois, mais des artistes comme Takeshi Murata, Paper Rad, Kris Moyes ou encore David O’Reilly ont largement contribué à faire connaître cette esthétique.&lt;/p&gt;
&lt;p&gt;Voici une sélection chronologique d’œuvres marquantes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Owi Mahn &amp;amp; Laura Baginski&lt;/strong&gt; – &lt;em&gt;Pastell Kompressor&lt;/em&gt; – 2003&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;David O&#39;Reilly&lt;/strong&gt; – &lt;em&gt;Venetian Snares – Szamar Madar&lt;/em&gt; – 2005&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kris Moyes&lt;/strong&gt; – &lt;em&gt;The Presets – Are You the One ?&lt;/em&gt; – 2005&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Takeshi Murata&lt;/strong&gt; – &lt;em&gt;Untitled (Silver)&lt;/em&gt; – 2006&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Takeshi Murata&lt;/strong&gt; – &lt;em&gt;Untitled (Pink Dot)&lt;/em&gt; – 2007&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Paper Rad et Paul B. Davis&lt;/strong&gt; – &lt;em&gt;Umbrella Zombie Datamosh Mistake&lt;/em&gt; – 2007&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;David O&#39;Reilly&lt;/strong&gt; – &lt;em&gt;Compression Reel&lt;/em&gt; – 2008&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Takeshi Murata&lt;/strong&gt; – &lt;em&gt;Monster Movie&lt;/em&gt; – 2009&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;une-histoire-de-glitch-avant-le-numerique&quot;&gt;Une histoire de glitch avant le numérique&lt;/h3&gt;
&lt;p&gt;Les combinaisons d’erreurs et d’échecs à but artistique ne datent pas d’hier. Dès les années 60, des cinéastes du cinéma structurel comme &lt;strong&gt;Paul Sharits&lt;/strong&gt;, &lt;strong&gt;George Landow&lt;/strong&gt; ou &lt;strong&gt;Tony Conrad&lt;/strong&gt; filmaient volontairement hors focus, utilisaient des images vides ou manipulaient la pellicule. En parallèle, des pionniers de l’image électronique comme &lt;strong&gt;Nam June Paik&lt;/strong&gt; (&lt;em&gt;Magnet TV&lt;/em&gt;), &lt;strong&gt;Joan Jonas&lt;/strong&gt; (&lt;em&gt;Vertical Roll&lt;/em&gt;) ou encore &lt;strong&gt;Steina et Woody Vasulka&lt;/strong&gt; (synthétiseur vidéo Rutt/Etra) expérimentaient les distorsions vidéo. Cette exploration de la « matière » visuelle permet de mieux comprendre pourquoi des artistes comme Takeshi Murata ont été séduits par le datamosh.&lt;/p&gt;
&lt;h3 id=&quot;appropriation-grand-public&quot;&gt;Appropriation grand public&lt;/h3&gt;
&lt;p&gt;Le mainstream s’en est emparé rapidement : &lt;strong&gt;Kanye West&lt;/strong&gt; dans &lt;em&gt;Welcome to Heartbreak&lt;/em&gt; (2009), ou encore &lt;strong&gt;Leos Carax&lt;/strong&gt; dans &lt;em&gt;Holy Motors&lt;/em&gt; (2012). Même Hollywood s’est essayé au glitch avec la bande-annonce de &lt;em&gt;Man of Steel&lt;/em&gt; (2013).&lt;/p&gt;
&lt;h2 id=&quot;2-i-p-b-frames-et-gop&quot;&gt;2 – I, P, B frames et GOP&lt;/h2&gt;
&lt;p&gt;Pour comprendre le datamosh, il faut se pencher sur la structure interne d’une vidéo numérique. Elle est composée de différents types d’images :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;I-frame&lt;/strong&gt; (intra-frame) : image clé complète.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;P-frame&lt;/strong&gt; (predicted-frame) : encode les différences avec une image précédente.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B-frame&lt;/strong&gt; (bi-directional) : encode les différences entre l’image précédente et suivante.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ces images forment un &lt;strong&gt;GOP&lt;/strong&gt; (Group of Pictures). Supprimer ou corrompre une I-frame entraîne une dérive des images suivantes qui tentent de se baser dessus, ce qui crée l’effet datamosh.&lt;/p&gt;
&lt;h2 id=&quot;3-detournement-des-i-frames&quot;&gt;3 – Détournement des I-frames&lt;/h2&gt;
&lt;p&gt;En supprimant ou corrompant une I-frame, les images suivantes (P-frames) se réfèrent à une base erronée ou ancienne. C’est ce décalage temporel qui génère le glitch.&lt;/p&gt;
&lt;h2 id=&quot;4-les-outils&quot;&gt;4 – Les outils&lt;/h2&gt;
&lt;p&gt;Voici les outils nécessaires pour faire du datamosh :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ffmpeg.org&quot;&gt;&lt;strong&gt;ffmpeg&lt;/strong&gt;&lt;/a&gt; : pour convertir les vidéos.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ucnv.github.io/aviglitch/&quot;&gt;&lt;strong&gt;AVIglitch&lt;/strong&gt;&lt;/a&gt; : pour supprimer les keyframes.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/wayspurrchen/moshy&quot;&gt;&lt;strong&gt;Moshy&lt;/strong&gt;&lt;/a&gt; : pour réparer la vidéo corrompue.&lt;/li&gt;
&lt;li&gt;(Optionnel) &lt;a href=&quot;https://github.com/ytdl-org/youtube-dl&quot;&gt;&lt;strong&gt;youtube-dl&lt;/strong&gt;&lt;/a&gt; : pour télécharger des vidéos YouTube.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;5-installation-macos-linux&quot;&gt;5 – Installation (macOS/Linux)&lt;/h2&gt;
&lt;h3 id=&quot;5-1-installer-homebrew-et-ffmpeg&quot;&gt;5.1 Installer Homebrew et ffmpeg&lt;/h3&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;/bin/bash &lt;span class=&quot;token parameter variable&quot;&gt;-c&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&quot;&lt;/span&gt;
brew &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; ffmpeg&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;5-2-installer-ruby-moshy-et-aviglitch&quot;&gt;5.2 Installer Ruby, Moshy et AVIglitch&lt;/h3&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;brew &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; ruby
gem &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; moshy
gem &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; aviglitch&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;5-3-bonus-youtube-dl&quot;&gt;5.3 Bonus : youtube-dl&lt;/h3&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;brew &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; youtube-dl&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;6-utilisation&quot;&gt;6 – Utilisation&lt;/h2&gt;
&lt;h3 id=&quot;6-1-terminal&quot;&gt;6.1 Terminal&lt;/h3&gt;
&lt;p&gt;Crée un répertoire pour travailler :&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;cd&lt;/span&gt; Desktop
&lt;span class=&quot;token function&quot;&gt;mkdir&lt;/span&gt; datamosh &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token builtin class-name&quot;&gt;cd&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$_&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;6-2-telecharger-une-video&quot;&gt;6.2 Télécharger une vidéo&lt;/h3&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;youtube-dl &lt;span class=&quot;token parameter variable&quot;&gt;-F&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;URL&quot;&lt;/span&gt;
youtube-dl &lt;span class=&quot;token parameter variable&quot;&gt;-f&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;313&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;URL&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;6-3-conversion-en-avi&quot;&gt;6.3 Conversion en AVI&lt;/h3&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;ffmpeg &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; input.mp4 &lt;span class=&quot;token parameter variable&quot;&gt;-c:v&lt;/span&gt; libxvid &lt;span class=&quot;token parameter variable&quot;&gt;-qscale&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-g&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;150&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-me_method&lt;/span&gt; epzs &lt;span class=&quot;token parameter variable&quot;&gt;-bf&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-mbd&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-c:a&lt;/span&gt; copy output.avi&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;6-4-appliquer-le-datamosh&quot;&gt;6.4 Appliquer le datamosh&lt;/h3&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;datamosh output.avi &lt;span class=&quot;token parameter variable&quot;&gt;-o&lt;/span&gt; datamoshed.avi
moshy &lt;span class=&quot;token parameter variable&quot;&gt;-m&lt;/span&gt; bake &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; datamoshed.avi &lt;span class=&quot;token parameter variable&quot;&gt;-o&lt;/span&gt; final.avi
ffmpeg &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; final.avi &lt;span class=&quot;token parameter variable&quot;&gt;-c:v&lt;/span&gt; libx264 &lt;span class=&quot;token parameter variable&quot;&gt;-crf&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;23&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-c:a&lt;/span&gt; copy final.mp4&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;7-automatiser-avec-un-script-bash&quot;&gt;7 – Automatiser avec un script Bash&lt;/h2&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token shebang important&quot;&gt;#!/bin/bash&lt;/span&gt;

&lt;span class=&quot;token assign-left variable&quot;&gt;tempfoo&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;basename&lt;/span&gt; $0&lt;span class=&quot;token variable&quot;&gt;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token assign-left variable&quot;&gt;TMPFILE&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;`&lt;/span&gt;mktemp /tmp/$&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;tempfoo&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;.XXX&lt;span class=&quot;token variable&quot;&gt;`&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token assign-left variable&quot;&gt;TMPFILE1&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;`&lt;/span&gt;mktemp /tmp/$&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;tempfoo&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;.XXX&lt;span class=&quot;token variable&quot;&gt;`&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token for-or-select variable&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; *.mp4&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt;
  &lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;||| Datamosh... conversion vers AVI avec -g &lt;span class=&quot;token variable&quot;&gt;$1&lt;/span&gt; |||&quot;&lt;/span&gt;
  ffmpeg &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$i&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-c:v&lt;/span&gt; libxvid &lt;span class=&quot;token parameter variable&quot;&gt;-q:v&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-g&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$1&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-me_method&lt;/span&gt; epzs &lt;span class=&quot;token parameter variable&quot;&gt;-bf&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-mbd&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-c:a&lt;/span&gt; copy &lt;span class=&quot;token parameter variable&quot;&gt;-y&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$TMPFILE&lt;/span&gt;.avi

  &lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;||| Datamosh... en cours ! |||&quot;&lt;/span&gt;
  datamosh &lt;span class=&quot;token variable&quot;&gt;$TMPFILE&lt;/span&gt;.avi &lt;span class=&quot;token parameter variable&quot;&gt;-o&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$TMPFILE1&lt;/span&gt;.avi
  moshy &lt;span class=&quot;token parameter variable&quot;&gt;-m&lt;/span&gt; bake &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$TMPFILE1&lt;/span&gt;.avi &lt;span class=&quot;token parameter variable&quot;&gt;-o&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$TMPFILE&lt;/span&gt;.avi

  &lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;||| Datamosh... conversion vers mp4 |||&quot;&lt;/span&gt;
  ffmpeg &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$TMPFILE&lt;/span&gt;.avi &lt;span class=&quot;token parameter variable&quot;&gt;-strict&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-2&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-y&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;${i&lt;span class=&quot;token operator&quot;&gt;%&lt;/span&gt;.*}&lt;/span&gt;-datamosh.mp4&quot;&lt;/span&gt;

  &lt;span class=&quot;token function&quot;&gt;clear&lt;/span&gt;
  &lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;||| Datamosh... Done! |||&quot;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;done&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Pour l’utiliser :&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;chmod&lt;/span&gt; a+x datamosh.sh
./datamosh.sh &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;C’est certainement l’un des effets les plus organiques et imprévisibles dans la manipulation d’une vidéo.&lt;/p&gt;
&lt;/blockquote&gt;
</content>
  </entry>
  <entry>
    <title>Configurer un serveur MQTT avec Raspberry Pi</title>
    <link href="https://echouchane.com/blog/mqtt/" />
    <updated>2019-01-05T00:00:00Z</updated>
    <id>https://echouchane.com/blog/mqtt/</id>
    <content type="html">&lt;p&gt;Alors que les objets connectés (IoT) transforment peu à peu notre quotidien, les arts numériques s’approprient eux aussi cette révolution technologique pour créer des installations autonomes, interactives et sans fil.&lt;/p&gt;
&lt;p&gt;Dans cette note, nous allons configurer un Raspberry Pi pour en faire à la fois un &lt;strong&gt;point d’accès WiFi&lt;/strong&gt; et un &lt;strong&gt;serveur MQTT&lt;/strong&gt;, capable de relayer des messages entre capteurs, microcontrôleurs (ESP8266, ESP32…) et logiciels comme Processing ou MaxMSP.&lt;/p&gt;
&lt;h3 id=&quot;exemples-d-utilisation&quot;&gt;Exemples d&#39;utilisation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Des capteurs de présence répartis dans une pièce envoient des messages via MQTT pour déclencher un visuel ou du son.&lt;/li&gt;
&lt;li&gt;Un analyseur audio détecte des basses fréquences et, en retour, déclenche une lumière via un microcontrôleur.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dans tous ces cas, le &lt;strong&gt;protocole MQTT&lt;/strong&gt; fait le lien entre le monde physique (capteurs/actionneurs) et le logiciel de création. Le projet peut aussi s’appliquer à des cas non artistiques : commandes vocales via Alexa, récupération de données environnementales, etc.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;etape-1-preparer-le-raspberry-pi&quot;&gt;Étape 1 : Préparer le Raspberry Pi&lt;/h3&gt;
&lt;p&gt;Assurez-vous que la date et l’heure sont à jour. Sinon, configurez-les manuellement s&#39;il le faut :&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;date&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-s&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Tue May 28 21:31:26 UTC-5 2019&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ensuite, mettez à jour le système et redémarrez :&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt-get&lt;/span&gt; update
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt-get&lt;/span&gt; upgrade
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;reboot&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3 id=&quot;etape-2-installer-raspap&quot;&gt;Étape 2 : Installer RaspAP&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://raspap.com/&quot;&gt;RaspAP&lt;/a&gt; est un outil qui permet de transformer le Pi en point d’accès WiFi avec interface web.&lt;/p&gt;
&lt;p&gt;Installez-le avec la commande suivante :&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;wget&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-q&lt;/span&gt; https://git.io/voEUQ &lt;span class=&quot;token parameter variable&quot;&gt;-O&lt;/span&gt; /tmp/raspap &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;bash&lt;/span&gt; /tmp/raspap&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Suivez les instructions à l’écran. Une fois l’installation terminée, le Pi redémarre.&lt;/p&gt;
&lt;p&gt;Un réseau &lt;code&gt;raspi-webgui&lt;/code&gt; devrait apparaître. Mot de passe par défaut : &lt;code&gt;ChangeMe&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Accédez à l’interface web via &lt;code&gt;http://10.3.141.1&lt;/code&gt;, identifiants par défaut : &lt;code&gt;admin / secret&lt;/code&gt;. N’oubliez pas de changer ces informations.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;etape-3-installer-le-broker-mqtt-mosquitto&quot;&gt;Étape 3 : Installer le broker MQTT (Mosquitto)&lt;/h3&gt;
&lt;p&gt;Mosquitto est un broker MQTT léger et très utilisé.&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt-get&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; mosquitto
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; /etc/init.d/mosquitto start&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Après configuration du hotspot (SSID, mot de passe, reboot), vous pouvez utiliser l’adresse IP locale &lt;code&gt;10.3.141.1&lt;/code&gt; pour vos tests MQTT.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;etape-4-tester-le-serveur&quot;&gt;Étape 4 : Tester le serveur&lt;/h3&gt;
&lt;p&gt;Installez un client MQTT :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sous Linux (ou Raspbian)&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt-get&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; mosquitto-clients&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Sous macOS (avec Homebrew)&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;brew &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; mosquitto&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dans un premier terminal (abonné au topic) :&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;mosquitto_sub &lt;span class=&quot;token parameter variable&quot;&gt;-h&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;10.3&lt;/span&gt;.141.1 &lt;span class=&quot;token parameter variable&quot;&gt;-t&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;test/topic&#39;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-v&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Dans un second terminal (éditeur de message) :&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;mosquitto_pub &lt;span class=&quot;token parameter variable&quot;&gt;-h&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;10.3&lt;/span&gt;.141.1 &lt;span class=&quot;token parameter variable&quot;&gt;-t&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;test/topic&#39;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-m&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;hello world&#39;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Vous devriez voir le message apparaître dans le premier terminal.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;derniere-etape-desactiver-la-mise-en-veille-de-l-ecran&quot;&gt;Dernière étape : désactiver la mise en veille de l’écran&lt;/h3&gt;
&lt;p&gt;Pour éviter que l’écran se mette en veille automatiquement :&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;nano&lt;/span&gt; /etc/X11/xinit/xinitrc&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ajoutez à la fin du fichier :&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;xset s off
xset &lt;span class=&quot;token parameter variable&quot;&gt;-dpms&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Enregistrez avec &lt;code&gt;Ctrl + X&lt;/code&gt;, puis validez. Enfin, redémarrez le système :&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;reboot&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;p&gt;Et voilà! Votre Raspberry Pi est maintenant prêt à faire office de serveur MQTT, accessible via WiFi pour tous vos projets interactifs.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Comprendre le bitrate et les options d&#39;encodage avec ffmpeg</title>
    <link href="https://echouchane.com/blog/bitrate-ffmpeg/" />
    <updated>2018-06-11T00:00:00Z</updated>
    <id>https://echouchane.com/blog/bitrate-ffmpeg/</id>
    <content type="html">&lt;p&gt;Il est important de comprendre comment les bons paramètres &lt;code&gt;ffmpeg&lt;/code&gt; influencent la qualité de la vidéo. En général, plus le &lt;strong&gt;bitrate&lt;/strong&gt; est élevé, meilleure sera la qualité. À bitrate égal, une vidéo encodée en &lt;strong&gt;H.265&lt;/strong&gt; sera de meilleure qualité que son équivalent en &lt;strong&gt;H.264&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Dans cette note, on va s’intéresser à ce paramètre avec l’encodeur &lt;code&gt;x264&lt;/code&gt;, ainsi qu’aux différentes options pour bien manipuler la &lt;strong&gt;compression vidéo&lt;/strong&gt; avec ce codec.&lt;/p&gt;
&lt;h2 id=&quot;c-est-quoi-le-bitrate&quot;&gt;C’est quoi le bitrate ?&lt;/h2&gt;
&lt;p&gt;Le bitrate, c’est la &lt;strong&gt;quantité de données par seconde&lt;/strong&gt;. Plus il est élevé, meilleure est la qualité… mais aussi plus grande sera la taille du fichier. Par exemple, 1 mégaoctet par seconde correspond à un bitrate de 8 mégabits par seconde (8 Mbps). Une vidéo YouTube en 1080p tourne autour de 8 Mbps, un DVD autour de 6 Mbps.&lt;/p&gt;
&lt;p&gt;Choisir le bon bitrate, c’est choisir le bon &lt;strong&gt;équilibre entre qualité et poids du fichier&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;choisir-le-bon-bitrate&quot;&gt;Choisir le bon bitrate&lt;/h2&gt;
&lt;p&gt;L’appareil cible a un rôle à jouer : smartphone, TV, web, etc. On distingue deux types de bitrate :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CBR&lt;/strong&gt; (&lt;em&gt;Constant Bitrate&lt;/em&gt;) : débit constant, utile pour les lives ou les diffusions par satellite.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VBR&lt;/strong&gt; (&lt;em&gt;Variable Bitrate&lt;/em&gt;) : s’adapte à la complexité de la scène, meilleure qualité à taille équivalente.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;VBR est recommandé pour la plupart des usages car il permet une meilleure gestion de la qualité selon les moments clés de la vidéo.&lt;/p&gt;
&lt;p&gt;Par défaut, &lt;code&gt;ffmpeg&lt;/code&gt; utilise le CRF (voir plus bas). Si vous ne spécifiez rien, vous aurez :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-crf 23&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;preset medium&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;profile high&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;encoder-en-cbr&quot;&gt;Encoder en CBR&lt;/h2&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;ffmpeg &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; video.mp4 &lt;span class=&quot;token parameter variable&quot;&gt;-c:v&lt;/span&gt; libx264 &lt;span class=&quot;token parameter variable&quot;&gt;-b:v&lt;/span&gt; 1500k &lt;span class=&quot;token parameter variable&quot;&gt;-minrate&lt;/span&gt; 1000k &lt;span class=&quot;token parameter variable&quot;&gt;-maxrate&lt;/span&gt; 2000k &lt;span class=&quot;token parameter variable&quot;&gt;-bufsize&lt;/span&gt; 60k output.mp4&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Le paramètre &lt;code&gt;-bufsize&lt;/code&gt; est souvent : &lt;code&gt;bitrate / fps&lt;/code&gt;. Le CBR n&#39;est jamais totalement constant avec &lt;code&gt;x264&lt;/code&gt;, mais on s&#39;en approche.&lt;/p&gt;
&lt;h2 id=&quot;le-crf&quot;&gt;Le CRF&lt;/h2&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;ffmpeg &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; video.mp4 &lt;span class=&quot;token parameter variable&quot;&gt;-c:v&lt;/span&gt; libx264 &lt;span class=&quot;token parameter variable&quot;&gt;-crf&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;23&lt;/span&gt; output.mp4&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Le CRF (&lt;em&gt;Constant Rate Factor&lt;/em&gt;) permet d’équilibrer qualité et taille automatiquement. Voici quelques repères :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;crf 0&lt;/code&gt; → sans perte, mais fichiers énormes&lt;/li&gt;
&lt;li&gt;&lt;code&gt;crf 18-23&lt;/code&gt; → excellent équilibre&lt;/li&gt;
&lt;li&gt;&lt;code&gt;crf &amp;gt; 23&lt;/code&gt; → plus de compression, moins de qualité&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Un changement de ±6 double ou divise la taille du fichier.&lt;/p&gt;
&lt;h2 id=&quot;les-presets&quot;&gt;Les presets&lt;/h2&gt;
&lt;p&gt;Un preset influe sur la &lt;strong&gt;vitesse d&#39;encodage&lt;/strong&gt; et la &lt;strong&gt;compression&lt;/strong&gt; :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;veryslow&lt;/code&gt; → encodage lent, fichier plus petit&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fast&lt;/code&gt; → encodage rapide, fichier plus gros&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Choisissez selon votre priorité : temps ou taille.&lt;/p&gt;
&lt;h2 id=&quot;les-profiles&quot;&gt;Les profiles&lt;/h2&gt;
&lt;p&gt;Les profils assurent la &lt;strong&gt;compatibilité&lt;/strong&gt; :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;baseline&lt;/code&gt; → anciens appareils, fonctions limitées&lt;/li&gt;
&lt;li&gt;&lt;code&gt;main&lt;/code&gt;, &lt;code&gt;high&lt;/code&gt; → plus de fonctionnalités, meilleure qualité&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;le-tune&quot;&gt;Le Tune&lt;/h2&gt;
&lt;p&gt;Un &lt;code&gt;tune&lt;/code&gt; adapte l’encodage au contenu :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;film&lt;/code&gt;, &lt;code&gt;animation&lt;/code&gt;, &lt;code&gt;stillimage&lt;/code&gt;, &lt;code&gt;zerolatency&lt;/code&gt;...&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ces paramètres activent des filtres anti-blocs pour améliorer la qualité visuelle.&lt;/p&gt;
&lt;h2 id=&quot;encodage-en-two-pass&quot;&gt;Encodage en Two-Pass&lt;/h2&gt;
&lt;p&gt;Si vous visez une taille de fichier précise, utilisez le &lt;strong&gt;two-pass&lt;/strong&gt; :&lt;/p&gt;
&lt;h3 id=&quot;exemple-de-calcul&quot;&gt;Exemple de calcul :&lt;/h3&gt;
&lt;p&gt;Fichier de 200 Mo pour une vidéo de 300 secondes :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;(200 × 8192) / 300 ≈ 5461 kbps
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;exemple-de-commandes&quot;&gt;Exemple de commandes :&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;1ère passe :&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;ffmpeg &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; video.mp4 &lt;span class=&quot;token parameter variable&quot;&gt;-pix_fmt&lt;/span&gt; yuv420p &lt;span class=&quot;token parameter variable&quot;&gt;-vsync&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-sn&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-r&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;25&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-threads&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-c:v&lt;/span&gt; libx264 &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
&lt;span class=&quot;token parameter variable&quot;&gt;-b:v&lt;/span&gt; 5461k &lt;span class=&quot;token parameter variable&quot;&gt;-bufsize&lt;/span&gt; 218k &lt;span class=&quot;token parameter variable&quot;&gt;-maxrate&lt;/span&gt; 6000k &lt;span class=&quot;token parameter variable&quot;&gt;-minrate&lt;/span&gt; 4000k &lt;span class=&quot;token parameter variable&quot;&gt;-an&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-pass&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-preset&lt;/span&gt; slow &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
&lt;span class=&quot;token parameter variable&quot;&gt;-profile:v&lt;/span&gt; high &lt;span class=&quot;token parameter variable&quot;&gt;-g&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;48&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-tune&lt;/span&gt; film &lt;span class=&quot;token parameter variable&quot;&gt;-x264opts&lt;/span&gt; no-scenecut &lt;span class=&quot;token parameter variable&quot;&gt;-f&lt;/span&gt; mp4 &lt;span class=&quot;token parameter variable&quot;&gt;-y&lt;/span&gt; /dev/null&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;2ème passe :&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;ffmpeg &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; video.mp4 &lt;span class=&quot;token parameter variable&quot;&gt;-pix_fmt&lt;/span&gt; yuv420p &lt;span class=&quot;token parameter variable&quot;&gt;-vsync&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-sn&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-r&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;25&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-threads&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-c:v&lt;/span&gt; libx264 &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
&lt;span class=&quot;token parameter variable&quot;&gt;-b:v&lt;/span&gt; 5461k &lt;span class=&quot;token parameter variable&quot;&gt;-bufsize&lt;/span&gt; 218k &lt;span class=&quot;token parameter variable&quot;&gt;-maxrate&lt;/span&gt; 6000k &lt;span class=&quot;token parameter variable&quot;&gt;-minrate&lt;/span&gt; 4000k &lt;span class=&quot;token parameter variable&quot;&gt;-an&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-pass&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-preset&lt;/span&gt; slow &lt;span class=&quot;token punctuation&quot;&gt;&#92;&lt;/span&gt;
&lt;span class=&quot;token parameter variable&quot;&gt;-profile:v&lt;/span&gt; high &lt;span class=&quot;token parameter variable&quot;&gt;-g&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;48&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-tune&lt;/span&gt; film &lt;span class=&quot;token parameter variable&quot;&gt;-x264opts&lt;/span&gt; no-scenecut &lt;span class=&quot;token parameter variable&quot;&gt;-f&lt;/span&gt; mp4 &lt;span class=&quot;token parameter variable&quot;&gt;-y&lt;/span&gt; output.mp4&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ne changez &lt;strong&gt;aucune valeur&lt;/strong&gt; entre les deux passes.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Et voilà ! Avec ces bases, vous êtes prêt à dompter le bitrate et encodages vidéo avec &lt;code&gt;ffmpeg&lt;/code&gt;.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Conversion vidéo en lot avec ffmpeg</title>
    <link href="https://echouchane.com/blog/conversion-lot-ffmpeg/" />
    <updated>2017-07-10T00:00:00Z</updated>
    <id>https://echouchane.com/blog/conversion-lot-ffmpeg/</id>
    <content type="html">&lt;p&gt;Avec &lt;code&gt;ffmpeg&lt;/code&gt;, il est possible de convertir par lot n’importe quel format de vidéo. Voici un exemple simple pour convertir des fichiers &lt;strong&gt;H.265 vers H.264&lt;/strong&gt; :&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token for-or-select variable&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; *.mp4 &lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt;
  ffmpeg &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$i&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-c:v&lt;/span&gt; libx264 &lt;span class=&quot;token parameter variable&quot;&gt;-vf&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;scale&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1280&lt;/span&gt;:-2 &lt;span class=&quot;token parameter variable&quot;&gt;-c:a&lt;/span&gt; copy &lt;span class=&quot;token parameter variable&quot;&gt;-map&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;:0 &lt;span class=&quot;token parameter variable&quot;&gt;-map&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;:1 &lt;span class=&quot;token string&quot;&gt;&quot;H &lt;span class=&quot;token variable&quot;&gt;$i&lt;/span&gt;&quot;&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;sleep&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;done&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;explication&quot;&gt;Explication&lt;/h3&gt;
&lt;h4 id=&quot;for-i-in-mp4-do&quot;&gt;&lt;code&gt;for i in *.mp4 ; do&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Prend tous les fichiers &lt;code&gt;.mp4&lt;/code&gt; dans le dossier courant. La commande &lt;code&gt;for&lt;/code&gt; permet de boucler sur chaque fichier.&lt;/p&gt;
&lt;h4 id=&quot;ffmpeg-i-i&quot;&gt;&lt;code&gt;ffmpeg -i &amp;quot;$i&amp;quot;&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Exécute &lt;code&gt;ffmpeg&lt;/code&gt; avec le fichier d’entrée &lt;code&gt;$i&lt;/code&gt;.&lt;/p&gt;
&lt;h4 id=&quot;map-0-0-map-0-1&quot;&gt;&lt;code&gt;-map 0:0 -map 0:1&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Spécifie uniquement les deux premiers flux : vidéo (0:0) et audio (0:1). Optionnel, mais utile pour éviter d’inclure des pistes inutiles.&lt;/p&gt;
&lt;h4 id=&quot;c-v-libx264&quot;&gt;&lt;code&gt;-c:v libx264&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Définit le codec vidéo. Peut être personnalisé avec des options comme &lt;code&gt;-preset slow&lt;/code&gt;, &lt;code&gt;-crf 23&lt;/code&gt;, etc.&lt;/p&gt;
&lt;h4 id=&quot;vf-scale-1280-2&quot;&gt;&lt;code&gt;-vf scale=1280:-2&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Redimensionne la vidéo en largeur 1280 pixels et ajuste automatiquement la hauteur pour conserver les proportions.&lt;/p&gt;
&lt;h4 id=&quot;c-a-copy&quot;&gt;&lt;code&gt;-c:a copy&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Copie directement la piste audio sans ré-encodage.&lt;/p&gt;
&lt;h4 id=&quot;h-i&quot;&gt;&lt;code&gt;&amp;quot;H $i&amp;quot;&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Crée un nouveau fichier avec le préfixe &amp;quot;H&amp;quot; pour éviter d’écraser le fichier original.&lt;/p&gt;
&lt;h4 id=&quot;sleep-3&quot;&gt;&lt;code&gt;sleep 3&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Pause de 3 secondes entre les conversions.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;extraire-uniquement-l-audio-en-aac&quot;&gt;Extraire uniquement l’audio (en AAC)&lt;/h3&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token for-or-select variable&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; *.MP4&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt;
  ffmpeg &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$i&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-vn&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-acodec&lt;/span&gt; copy &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;${i&lt;span class=&quot;token operator&quot;&gt;%&lt;/span&gt;}&lt;/span&gt;.aac&quot;&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;sleep&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;done&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-vn&lt;/code&gt; : ignore les flux vidéo&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-acodec copy&lt;/code&gt; : copie l’audio sans le ré-encoder&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;script-bash-multithread&quot;&gt;Script bash multithread&lt;/h3&gt;
&lt;p&gt;Pour tirer parti de plusieurs cœurs du processeur et lancer plusieurs conversions en parallèle :&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token shebang important&quot;&gt;#!/bin/bash&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function-name function&quot;&gt;encode&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token assign-left variable&quot;&gt;base&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;${1&lt;span class=&quot;token operator&quot;&gt;%&lt;/span&gt;.*}&lt;/span&gt;&quot;&lt;/span&gt;
  &lt;span class=&quot;token assign-left variable&quot;&gt;extension&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;${1&lt;span class=&quot;token operator&quot;&gt;##&lt;/span&gt;*.}&lt;/span&gt;&quot;&lt;/span&gt;
  &lt;span class=&quot;token assign-left variable&quot;&gt;out&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;${base}&lt;/span&gt;_output.&lt;span class=&quot;token variable&quot;&gt;${extension}&lt;/span&gt;&quot;&lt;/span&gt;

  ffmpeg &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$1&lt;/span&gt;&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-c:v&lt;/span&gt; libx264 &lt;span class=&quot;token parameter variable&quot;&gt;-vf&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;scale&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1280&lt;/span&gt;:-2 &lt;span class=&quot;token parameter variable&quot;&gt;-c:a&lt;/span&gt; copy &lt;span class=&quot;token parameter variable&quot;&gt;-map&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;:0 &lt;span class=&quot;token parameter variable&quot;&gt;-map&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;:1 &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;$out&lt;/span&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;     

encode video1.mp4 &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;
encode video2.mp4 &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;
&lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;ZZzzzzzzZZzzzzz&quot;&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;wait&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Chaque appel à &lt;code&gt;encode&lt;/code&gt; est lancé en arrière-plan grâce au &lt;code&gt;&amp;amp;&lt;/code&gt;, et &lt;code&gt;wait&lt;/code&gt; force le script à attendre que tous les processus soient terminés.&lt;/p&gt;
&lt;p&gt;Pour utiliser ce script :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Copiez le code dans un fichier (par exemple &lt;code&gt;convert.sh&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Donnez-lui les permissions d’exécution :&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;chmod&lt;/span&gt; +x convert.sh&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Lancez-le :&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;./convert.sh&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
</content>
  </entry>
  <entry>
    <title>Premiers pas avec ffmpeg</title>
    <link href="https://echouchane.com/blog/ffmpeg/" />
    <updated>2017-01-21T00:00:00Z</updated>
    <id>https://echouchane.com/blog/ffmpeg/</id>
    <content type="html">&lt;p&gt;&lt;strong&gt;ffmpeg&lt;/strong&gt; est un puissant convertisseur audio/vidéo en ligne de commande, open-source et multiplateforme (Linux, macOS…). Il peut impressionner au début, mais une fois adopté, on ne s’en passe plus. D’ailleurs, sans le savoir, vous l’utilisez peut-être déjà à travers des logiciels comme &lt;strong&gt;VLC&lt;/strong&gt;, &lt;strong&gt;Kodi&lt;/strong&gt;, &lt;strong&gt;OBS&lt;/strong&gt;, ou &lt;strong&gt;Blender&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;installation-sur-macos&quot;&gt;Installation sur macOS&lt;/h2&gt;
&lt;p&gt;La manière la plus simple consiste à passer par le gestionnaire de paquets &lt;strong&gt;Homebrew&lt;/strong&gt;. Ouvrez le terminal et, si ce n’est pas déjà fait, installez Homebrew :&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;/bin/bash &lt;span class=&quot;token parameter variable&quot;&gt;-c&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Puis installez &lt;code&gt;ffmpeg&lt;/code&gt; :&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;brew &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; ffmpeg&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Pour avoir ffmpeg avec des dépendances utiles :&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;brew &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; ffmpeg --with-fdk-aac --with-libvorbis --with-libvpx --with-x265&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Mettez ensuite ffmpeg à jour :&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;brew update &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; brew upgrade ffmpeg&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Testez l’installation avec :&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;ffmpeg&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id=&quot;naviguer-dans-les-dossiers&quot;&gt;Naviguer dans les dossiers&lt;/h2&gt;
&lt;p&gt;Placez une vidéo dans un dossier (par exemple un dossier &lt;code&gt;conversion&lt;/code&gt; sur le bureau). Dans le terminal :&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;cd&lt;/span&gt; ~/Desktop/conversion
&lt;span class=&quot;token function&quot;&gt;ls&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Vous devriez voir votre fichier. Nous allons l’appeler ici &lt;code&gt;vid0.mp4&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;extraire-l-audio&quot;&gt;Extraire l’audio&lt;/h2&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;ffmpeg &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; vid0.mp4 &lt;span class=&quot;token parameter variable&quot;&gt;-vn&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-f&lt;/span&gt; mp3 audio0.mp3&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-i&lt;/code&gt; : fichier d’entrée&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-vn&lt;/code&gt; : désactive la vidéo&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-f mp3&lt;/code&gt; : force le format de sortie&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Avec plus d’options :&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;ffmpeg &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; vid0.mp4 &lt;span class=&quot;token parameter variable&quot;&gt;-ac&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-ar&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;44100&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-vn&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-b:a&lt;/span&gt; 256k audio1.mp3&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id=&quot;supprimer-l-audio-d-une-video&quot;&gt;Supprimer l’audio d’une vidéo&lt;/h2&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;ffmpeg &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; vid0.mp4 &lt;span class=&quot;token parameter variable&quot;&gt;-an&lt;/span&gt; vid1.mp4&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id=&quot;redimensionner-une-video-resize&quot;&gt;Redimensionner une vidéo (resize)&lt;/h2&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;ffmpeg &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; vid0.mp4 &lt;span class=&quot;token parameter variable&quot;&gt;-vf&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;scale&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;640&lt;/span&gt;:-1 vid1.mp4&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;La hauteur est ajustée automatiquement pour conserver les proportions.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;couper-une-portion-de-video&quot;&gt;Couper une portion de vidéo&lt;/h2&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;ffmpeg &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; vid0.mp4 &lt;span class=&quot;token parameter variable&quot;&gt;-ss&lt;/span&gt; 00:00:10 &lt;span class=&quot;token parameter variable&quot;&gt;-t&lt;/span&gt; 00:00:05 vid1.mp4&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Coupe 5 secondes à partir de la 10ᵉ.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;rotation&quot;&gt;Rotation&lt;/h2&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;ffmpeg &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; vid0.mp4 &lt;span class=&quot;token parameter variable&quot;&gt;-vf&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;rotate&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;45&lt;/span&gt;*PI/180 vid1.mp4&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id=&quot;conversion-de-conteneur&quot;&gt;Conversion de conteneur&lt;/h2&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;ffmpeg &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; vid0.mp4 &lt;span class=&quot;token parameter variable&quot;&gt;-codec&lt;/span&gt; copy vid1.mov&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id=&quot;conversion-de-codec&quot;&gt;Conversion de codec&lt;/h2&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;ffmpeg &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; vid0.mp4 &lt;span class=&quot;token parameter variable&quot;&gt;-c:v&lt;/span&gt; libx264 vid1.mp4&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id=&quot;modifier-le-bitrate&quot;&gt;Modifier le bitrate&lt;/h2&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;ffmpeg &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; vid0.mp4 &lt;span class=&quot;token parameter variable&quot;&gt;-b:v&lt;/span&gt; 5000k vid1.mp4&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Plus le bitrate est élevé, meilleure est la qualité (et plus lourd le fichier).&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;coller-deux-videos&quot;&gt;Coller deux vidéos&lt;/h2&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;ffmpeg &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; vid0.mp4 &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; vid1.mp4 &lt;span class=&quot;token parameter variable&quot;&gt;-filter_complex&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;[0:v][1:v]concat=n=2:v=1:a=0[out]&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-map&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;[out]&quot;&lt;/span&gt; vidfinal.mp4&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id=&quot;superposition-overlay&quot;&gt;Superposition (overlay)&lt;/h2&gt;
&lt;p&gt;Ajouter un logo PNG :&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;ffmpeg &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; vid0.mp4 &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; logo.png &lt;span class=&quot;token parameter variable&quot;&gt;-filter_complex&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;[0:v][1:v]overlay=10:10&quot;&lt;/span&gt; vid1.mp4&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id=&quot;decouper-crop&quot;&gt;Découper (crop)&lt;/h2&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;ffmpeg &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; vid0.mp4 &lt;span class=&quot;token parameter variable&quot;&gt;-filter:v&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;crop&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;320&lt;/span&gt;:180:160:90 vid1.mp4&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id=&quot;extraire-une-serie-d-images&quot;&gt;Extraire une série d’images&lt;/h2&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;ffmpeg &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; vid0.mp4 &lt;span class=&quot;token parameter variable&quot;&gt;-r&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;24&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-t&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-f&lt;/span&gt; image2 img-%04d.png&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id=&quot;creer-une-video-a-partir-d-images&quot;&gt;Créer une vidéo à partir d’images&lt;/h2&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;ffmpeg &lt;span class=&quot;token parameter variable&quot;&gt;-framerate&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;60&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; image-%04d.jpg &lt;span class=&quot;token parameter variable&quot;&gt;-start_number&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-r&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;60&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-c:v&lt;/span&gt; libx264 &lt;span class=&quot;token parameter variable&quot;&gt;-crf&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;25&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-pix_fmt&lt;/span&gt; yuv420p output.mp4&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id=&quot;loop-d-une-video&quot;&gt;Loop d’une vidéo&lt;/h2&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;ffmpeg &lt;span class=&quot;token parameter variable&quot;&gt;-stream_loop&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; input.mp4 &lt;span class=&quot;token parameter variable&quot;&gt;-t&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;30&lt;/span&gt; out.mp4&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id=&quot;modifier-la-teinte-ou-passer-en-noir-et-blanc&quot;&gt;Modifier la teinte ou passer en noir et blanc&lt;/h2&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;ffmpeg &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; vid0.mp4 &lt;span class=&quot;token parameter variable&quot;&gt;-vf&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;hue&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;s&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-c:a&lt;/span&gt; copy vidnb.mp4&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;ffmpeg &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; vid0.mp4 &lt;span class=&quot;token parameter variable&quot;&gt;-vf&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;hue&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;h&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;90&lt;/span&gt;:s&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-c:a&lt;/span&gt; copy vidcolor.mp4&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id=&quot;appliquer-un-fondu-fade-in&quot;&gt;Appliquer un fondu (fade in)&lt;/h2&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;ffmpeg &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; vid0.mp4 &lt;span class=&quot;token parameter variable&quot;&gt;-vf&lt;/span&gt; &lt;span class=&quot;token assign-left variable&quot;&gt;fade&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;in:0:30 &lt;span class=&quot;token parameter variable&quot;&gt;-c:a&lt;/span&gt; copy vidfade.mp4&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id=&quot;denoise-reduction-du-bruit&quot;&gt;Denoise (réduction du bruit)&lt;/h2&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;ffmpeg &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; vid0.mp4 &lt;span class=&quot;token parameter variable&quot;&gt;-vf&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;split [a][b]; [b] dctdnoiz=4.5 [c]; [a][c] overlay&quot;&lt;/span&gt; output.mp4&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2 id=&quot;ecran-partage-split-screen&quot;&gt;Écran partagé (split screen)&lt;/h2&gt;
&lt;pre class=&quot;language-bash&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;ffmpeg &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; vid0.mp4 &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; vid1.mp4 &lt;span class=&quot;token parameter variable&quot;&gt;-filter_complex&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;[0:v]pad=iw*2:ih[left];[left][1:v]overlay=W/2:0&quot;&lt;/span&gt; out.mp4&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt; : ffmpeg est un outil extrêmement puissant. Il vous permet de réaliser rapidement des tâches que vous auriez confiées à des logiciels de montage bien plus lourds. Et surtout : il est &lt;strong&gt;libre, gratuit, scriptable&lt;/strong&gt;, et très bien documenté.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;liens-utiles&quot;&gt;Liens utiles&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Site officiel de FFmpeg&lt;/strong&gt; : &lt;a href=&quot;https://ffmpeg.org/&quot;&gt;https://ffmpeg.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Site officiel de Homebrew&lt;/strong&gt; : &lt;a href=&quot;https://brew.sh/&quot;&gt;https://brew.sh/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tutoriels d&#39;installation de FFmpeg sur Windows&lt;/strong&gt; :
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;(EN)&lt;/em&gt; : &lt;a href=&quot;http://adaptivesamples.com/how-to-install-ffmpeg-on-windows/&quot;&gt;http://adaptivesamples.com/how-to-install-ffmpeg-on-windows/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;(FR)&lt;/em&gt; : &lt;a href=&quot;https://fr.wikihow.com/installer-FFmpeg-sur-Windows&quot;&gt;https://fr.wikihow.com/installer-FFmpeg-sur-Windows&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vidéos d&#39;essai H.264&lt;/strong&gt; : &lt;a href=&quot;http://www.h264info.com/clips.html&quot;&gt;http://www.h264info.com/clips.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Instructions de compression vidéo&lt;/strong&gt; :
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Vimeo&lt;/em&gt; : &lt;a href=&quot;https://vimeo.com/help/compression&quot;&gt;https://vimeo.com/help/compression&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;YouTube&lt;/em&gt; : &lt;a href=&quot;https://support.google.com/youtube/answer/1722171?hl=fr&quot;&gt;https://support.google.com/youtube/answer/1722171?hl=fr&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tutoriel sur l&#39;utilisation du terminal sous macOS&lt;/strong&gt; : &lt;a href=&quot;https://openclassrooms.com/courses/domptez-votre-mac-avec-mac-os-x-mavericks/le-terminal-dans-os-x&quot;&gt;https://openclassrooms.com/courses/domptez-votre-mac-avec-mac-os-x-mavericks/le-terminal-dans-os-x&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
</feed>