Scan2Epub.sh où comment lire des Scantrad en Epub
Scantrad
Un scanlation, parfois aussi nommé scanslation, scantrad ou mangascan, fait référence à un manga qui a été numérisé (scanné) et traduit par des fans depuis sa langue originale (habituellement le japonais ou le coréen) vers une autre. Définition.
Dit autrement, le scantrad est au manga ce que les fansub sont aux anime.
Mon besoin
Comme je l’évoquais dans mes articles Liseuse Booken et BD, Comics, Manga et Ma liseuse Bookeen et les mangas, il m’arrive de lire des versions scannées (les fameux scantrad) de manga que je possède en version papier ou non publié en France.
Jusqu’à présent, je copiais les dossiers contenant les images sur la liseuse Bookeen. Inconvénient, ce sont des images et donc, quand la liseuse se met en pause, on perd là où on est. Si on lit un epub, et qu’on retourne dans le dossier image, on recommence depuis la première image, c’est tout sauf pratique.
La solution que je voyais et que j’avais en projet depuis longtemps et de générer des epubs regroupant ces images dans un seul et même epub.
Framablog et l’interview de Nylnook
Sur le Framablog, il y a une l’interview de Nylnook, le gentil lutin écolo-dessinateur, dans laquelle Nylnook parle de tout son processus de création de bandes-dessinées, jusqu’à la généreration automatisée de bandes-dessinées au format électronique, en les exportant sous différents formats. Pour ça, il a fait un tutoriel long et complet : Faire une BD de A à Z avec des logiciels libres. Pour l’export en différent format, il a fait un script très complet et contient pas mal de choses. Et surtout ça m’a donné l’astuce sur comment faire des epub facilement ! Donc un grand merci à Nylnook pour ça.
La réponse à mon besoin - Scan2Epub.sh
Prérequis
– Connaitre le shell ;)
– Avoir Calibre d’installer (le logiciel qui permet de gérer sa bibliothèque d’epub mais aussi de faire des conversions)
J’ai donc extrait le bout de code (la méthode) du script et je l’ai rapidement adapté à ce voulais faire / à mes besoins et voilà ce que ça donne.
J’ai un dossier Ranma qui contient l’arborescence suivante
Ranma
├── Volume1
│ ├── Chapitre1
│ │ ├── Ranma_1-2_001-001-000-cover.jpg
│ │ ├── Ranma_1-2_001-001-001.png
│ │ ├── Ranma_1-2_001-001-002.png
│ │ ├── ...
│ ├── Chapitre2
│ ├── Chapitre3
│ └── ...
├── Volume2
│ ├── Chapitre1
│ └── ...
└── ...
C’est un dossier avec des sous-dossiers contenant donc les fameux scans du manga Ranma.
Remarque les fichiers ont une nomenclature particulière à savoir Ranma_1-2_NumeroDuVolume-NumeroDuChapitre-NumeroDePage.png Exemple Ranma_1-2_001-001-002.png
J’ai crée un script rapidement en m’inspirant de celui de Nylnook :
#!/bin/bash
# Scan2Epub.sh
creator="Rumiko Takahashi"
title="Ranma 1/2"
ebookIsbn="123456789"
pubDate=<span class="base64" title="PGNvZGUgY2xhc3M9J3NwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lJyBkaXI9J2x0cic+ZGF0ZTwvY29kZT4="></span>
language="Japonais"
tags="Manga, Ranma, Takahashi"
description="Manga de Ranma 1/2"
function convertToeBooks {
for Volume in <span class="base64" title="PGNvZGUgY2xhc3M9J3NwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lJyBkaXI9J2x0cic+bHMgJHBhdGg8L2NvZGU+"></span>
do
nomManga=<span class="base64" title="PGNvZGUgY2xhc3M9J3NwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lJyBkaXI9J2x0cic+ZWNobyBSYW5tYV8xXzJfJFZvbHVtZTwvY29kZT4="></span>
echo "nomManga :" $nomManga
# On met le numéro de volume en numéro de série, sinon on a des conflits dans Calibre à l'import
# des volumes dans la bilbliothèque
series=<span class="base64" title="PGNvZGUgY2xhc3M9J3NwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lJyBkaXI9J2x0cic+ZWNobyAkVm9sdW1lIHxjdXQgLWM3LTc8L2NvZGU+"></span>
seriesindex=<span class="base64" title="PGNvZGUgY2xhc3M9J3NwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lJyBkaXI9J2x0cic+ZWNobyAkVm9sdW1lIHxjdXQgLWM3LTc8L2NvZGU+"></span>
# On récupère le fichier de couverture dans le dossier Chapitre 1
# Exemple de nom de couverture : Ranma_1-2_001-001-000-cover.jpg
cover=<span class="base64" title="PGNvZGUgY2xhc3M9J3NwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lJyBkaXI9J2x0cic+ZmluZCAtbmFtZSAqY292ZXIuanBnIHwgZ3JlcCBcJFZvbHVtZTwvY29kZT4="></span>
cd ./Ranma/$Volume
zip ../$nomManga.cbz <span class="base64" title="PGNvZGUgY2xhc3M9J3NwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lJyBkaXI9J2x0cic+ZmluZCAtbmFtZSAqLnBuZyB8c29ydDwvY29kZT4="></span>
cd ../..
# La fonction ebook-convert fait partie de Calibre
ebook-convert ./Ranma/$nomManga.cbz ./Ranma/$nomManga.epub \
--authors "$creator" \
--publisher "$creator" \
--title "$title" \
--isbn "$ebookIsbn" \
--pubdate "$pubDate" \
--language "$language" \
--series "$series" \
--series-index "$seriesindex" \
--tags "$tags" \
--comments "$description" \
--no-default-epub-cover --dont-grayscale --dont-normalize \
--keep-aspect-ratio --output-profile tablet --no-process \
--disable-trim --dont-add-comic-pages-to-toc --wide --extra-css "img{width:100%}" \
--cover $cover \
--no-svg-cover --remove-first-image
done
}
# Appel de la méthode
convertToeBooks
Ca mouline un peu, ça sollicite pas mal le processeur pendant une dizaine de secondes et on a alors dans le dossier Ranma
└── Ranma
├── Ranma_1_2_Volume1.cbz
├── Ranma_1_2_Volume1.epub
├── Ranma_1_2_Volume2.cbz
├── Ranma_1_2_Volume2.epub
├── ...
Les fichiers .cbz sont des zip contenant les images, un vieux format utilisé à l’époque pour lire des bandes dessinées électroniques. Mais surtout, je retrouve des fichiers .epub ! Chaque fichier comme Ranma_1_2_Volume1.epub est à transférer ensuite sur la liseuse et est lisible comme un Ebook, avec temps de lecture, reprise à la bonne page etc. J’ai donc réussi mon mini-projet :)
Amélioration et v2
Quand je lance le script, le processus utilise un seul coeur, mais à 100% pendant quelques minutes, ce qui amène le ventilateur à tourner et faire du bruuit. J’ai un SSD, l’écriture disque n’est pas un facteur limitant, le processeur est un corei5, j’ai de la RAM. Donc je pourrais optimiser tout ça.
Le plus simple est de lancer 4 processus en paralèlle. Ma première idée est de faire un truc du genre
début de la boucle
appelDeFonction(i) &
appelDeFonction(i+1) &
appelDeFonction(i+2) &
appelDeFonction(i+3) &
retour en haut de la boucle
Ca commence à faire compliquer pour un simple script Shell, je pense que je vais repartir de Zéro et probablement faire ça via du Python pour avoir un language plus évolué.
Sinon, en autre fonctionnalité, il faudra que je rajoute la ligne qui va bien qui permettra, une fois les epub générés, d’en faire une copie automatique sur ma liseuse au montage de celle-ci.