Lorsque j’ai terminé mon ebook, je l’ai tout naturellement exporté et j’ai obtenu un fichier ePub de… 160Mo. C’est beaucoup trop. Il est nécessaire de compresser un ePub avant de le publier car les distributeurs (Amazon en premier), facturent le coût de la distribution en fonction de la taille du fichier. Avec ma méthode, j’ai obtenu un ePub de 29Mo: 80% de compression. Pas mal non?

Réduire la taille d’un ePub: quels éléments?

La 1ère source d’éléments à compresser dans un ePub, ce sont les images! Dans mon cas, elles représentent 90% de la taille de mon eBook.

On peut trouver aussi d’autres sources d’optimisations comme le nombre de police intégrés.

Structure d’un fichier ePub

Comprenons déjà la structure d’un fichier ePub. Un fichier ePub est une archive Zip d’une structure bien définie:

  • le 1er fichier de l’archive est mimetype. Il ne doit pas être compressé.
  • un dossier « META-INF » contenant quelques informations de base sur la structure.
  • un autre dossier, « OPS » ou « oebps » contenant les données du ePub.

Le fichier mimetype permet aux applications qui vont lire ce fichier de le considérer comme un fichier spécial de type application/epub+zip, et pas comme une simple archive zip.

Le contenu du fichier mimetype fait exactement 20 caractères, sans saut de ligne à la fin:

application/epub+zip

Ce que ça veut dire, c’est que nous allons pouvoir dézipper le ePub pour comprendre ce qui prend de la place afin de pouvoir compresser un ePub en conséquence.

Commencez donc par dézipper le fichier ePub. Vous pouvez ajouter l’extension .zip pour vous aider. Sur macOs, via le terminal, la commande est:

flogg@MacBook:~/ePub$ unzip MonEBook.epub

On obtient la structure:

flogg@MacBook:~/ePub$ ls
META-INF/   OPS/        MonEBook.epub  mimetype

Réduire la taille d’un ePub: les images

Aller donc voir la taille du dossier OPS/images/. Il est énorme? Parfait, on va pouvoir compresser.

L’analyse dépend de chaque cas. Je vous raconte le mien mais le votre pourrait être différent.

Premier constat, je n’ai que des fichiers PNG. Clairement, ce n’est pas le format le plus efficace pour mon type de contenu. On préférera le format JPEG. Ce changement n’est valable que pour les images que n’ont pas besoin de fond transparent. Pour ces dernières, il n’y a pas d’autres choix que de conserver le format PNG.

Deuxième constat, ces fichiers ne sont pas optimisés du tout. Une simple optimisation des fichiers en suivant les recommandations de Google m’a permis de gagner 50Mo.

Convertir les images d’un ePub en JPEG

Les fichiers ePub supportent 4 types de fichiers images:

  • PNG
  • JPEG
  • GIF
  • SVG

Pour convertir de JPEG en PNG, j’utilise ImageMagick en ligne de commande sur macOs. Rappel: la transformation va remplacer les images au fond transparent par un fond blanc (-background white).

flogg@MacBook:~/ePub$ convert ./OPS/images/image.png -background white -alpha remove ./OPS/images/image.jpg
flogg@MacBook:~/ePub$ rm ./OPS/images/image.png

Il faut maintenant changer toutes les références de ce fichier dans tout votre ePub:

  • OPS/epb.opf: Ce fichier contient un inventaire des fichiers de l’ePub. Il faut remplacer une ligne comme:
<item id="dataItem5" href="images/image-1.png" media-type="image/png"/>

par

<item id="dataItem5" href="images/image-1.jpg" media-type="image/jpg"/>
  • OPS/page-xxx.xhtml: Ce fichier contient une page de votre ePub. Il suffit de remplacer toutes les occurrences de images/image-1.png par images/image-1.jpg

Répétez l’opération pour toutes les images. Vous pouvez automatiser l’opération de renommage des occurrences avec sed, par exemple:

flogg@MacBook:~/ePub$ sed -i'' -e "s/images\/image-1.png/images\/image-1.jpg/g" ./OPS/page-*.xhtml
flogg@MacBook:~/ePub$ sed -i'' -e "s/href=\"images\/image-1.png\"\ media-type=\"image\/png\"/href=\"images\/image-1.jpg\"\ media-type=\"image\/jpeg\"/g" ./OPS/epb.opf
flogg@MacBook:~/ePub$ rm ./OPS/*-e

La simple conversion de mes fichiers PNG en JPG m’a permis de compresser un ePub de 60% (157Mo > 63,1Mo).

Compresser les images d’un ePub

Que les images soient au format JPG ou PNG, c’est pareil et c’est très simple. Compresser toutes les images avec un programme comme ImageOptim, en suivant les recommandations de Google pour l’optimisation des images. Oui, on va dégrader la qualité de certaines images mais ce sera difficilement visible à l’oeil.

J’ai obtenu une compression d’environ:

  • 30% pour les fichiers PNG
  • 50% pour les fichiers JPG

Supprimer les images en doublon

Dans mon cas, j’utilise à plusieurs reprises une même image (un rond rouge). L’image de ce rond rouge est présente plus de 50 fois, avec un nom différent.

On peut compresser un peu plus l’ePub en ne conservant qu’une occurence de cette image et en remplaçant toutes les occurrences dans les fichiers page-xxx.html et epb.opf.

Je n’ai pas fait cette optimisation car le gain était assez minimes dans mon cas (moins de 1Mo).

Réduire la taille d’un ePub: les polices

Si vous incorporez les polices dans votre ePub, elles sont enregistrés dans le dossier OBS/fonts/.

Vérifiez les polices incorporées, et si elles sont toutes justifiées.

Dans mon cas, j’ai découvert 2 polices inutiles incorporées:

  • « Wingdings »: pour 2 malheureuses puces rondes.
  • « FontAwesome5Pro-Solid-900.otf »: pour 2 petites icônes grasses alors que les autres ne le sont pas

Remplacer ces polices dans votre éditeur d’eBook afin qu’elles ne soient pas présentes à l’exportation.

Réduire la taille d’un ePub: reconstruire le fichier

Pour reconstruire le fichier, il faut suivre correctement et à la lettre le format ePub. Suivez le guide ici: Reconstruire un fichier ePub

Compresser un ePub: comparatif des améliorations

Voici un récapitulatif des gains possibles avec mon fichier de base:

ÉtapePoids du fichiers
Origine160Mo
Optimisation PNG-57Mo
Conversion JPG-100Mo
Conversion JPG
+ Optimisation
-130Mo
Suppression des polices inutiles-3Mo
Suppression des images en doublons-1Mo

Pour mon eBook, j’ai choisi de convertir en JPG, optimiser les images et supprimer les polices inutiles et j’ai finalement obtenu un ePub de 29Mo! YEAH!

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *