80

Bat-файлы для массового сжатия fb2 в fb2.zip (Win7/10)

На волне выкладывания сборников книг в fb2.


Многие устройства и программы-читалки умеют работать с fb2-файлами книг, сжатыми в zip (fb2.zip). Сжатый файл книги занимает в среднем в 2-6 раз меньше места, чем просто fb2. Проблемы две:

1) книги нужно не просто сжать, а каждый fb2 файл нужно сжать в отдельный fb2.zip

2) fb2-файлы могут быть рассортированы по множеству вложенных папок


Ниже приведён текст простеньких bat-файлов, решающих эту задачу - ищутся все fb2 файлы в этой(откуда запущен bat) и вложенных папках, каждый book.fb2 сжимается в отдельный book.fb2.zip. То есть по большому счёту если надо "сжать вообще все fb2" то достаточно запустить процесс один раз в корневой папке вашей fb2-библиотеки.


update: также в комментах сообщают, что аналогичное можно сделать при помощи Total Commander.


Варианта два: при помощи 7-zip и WinRAR, используйте какой больше нравится. По результату сжатия по тестам результат примерно одинаковый (199 книг объёмом 160Мб сжимаются до 67-69Мб шо тем шо этим). WinRAR быстрее, 7-zip бесплатный.


Требования: Win7/10 (на других не тестировал, вероятно тоже будет работать), должен быть установлен 7-zip/WinRAR в стандартную папку C:\Program Files\... Или отредактируйте путь в строке Set ARC="путь к файлу архиватора", должен быть в кавычках.


Как использовать:

1) скопировать нижеприведённый текст в блокнот, сохранить как текстовый файл с именем например, _fb2_to_zip_7zip.bat

2) переместить/скопировать получившийся bat-файл в папку с fb2-файлами (или в корневую папку fb2-библиотеки)

3) запустить эту копию, ждать.



ВАЖНО!!!

1. лучше сначала попробовать на каком-то небольшом количестве файлов, убедиться что всё ок, а потом уже запускать на всей библиотеке.

2. Если файл сжат успешно, то старый FB2 будет удалён, останется только FB2.ZIP.

3. Некоторые программы/оболочки/каталогизаторы могут не уметь работать с fb2.zip. Их работа после сжатия может поломаться.

4. Для e-ink читалок и программ-ридеров, fb2 и fb2.zip это РАЗНЫЕ файлы/книги, поэтому удаление fb2 и загрузка fb2.zip будет воспринято как удаление старой книги и загрузка новой. Скорее всего история чтения/закладки/заметки будут потеряны! Поэтому если у вас хватает места на читалке,  то сжимать на ней книжки не нужно. Кроме того любая перезапись увеличивает износ внутренней памяти читалки, для некоторых моделей это критично.



_fb2_to_zip_7zip.bat

@Echo Off
chcp 1251 >nul
cls
Set "BoxIn=."
Set "Maska=*.fb2"
Set "Arc="C:\Program Files\7-Zip\7z.exe" a -tzip -mx7 -sdel"
FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%BoxIn%\%Maska%" /b /s /a:-d`) DO (
Echo %%f
%Arc% "%%~f.zip" "%%f"
)
Pause

_fb2_to_zip_WinRAR.bat

@Echo Off
chcp 1251 >nul
cls
Set "BoxIn=."
Set "Maska=*.fb2"
Set "Arc="C:\Program Files\WinRAR\WinRAR.exe" a -m5 -ep -ibck -afzip -df"
FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%BoxIn%\%Maska%" /b /s /a:-d`) DO (
Echo %%f
%Arc% "%%~f.zip" "%%f"
)
Pause

По желанию каждый может переработать под себя. Степень сжатия/скорость можно изменить, для WinRAR надо поменять цифру в -m5 на поменьше (допустимые значения 1-5). В 7-zip это ключ -mx7 (значения от 1 до 9). Семёрка выбрана т.к. на -mx9 сжимает очень медленно, а результат по сжатию почти такой-же.

Книжная лига

30.4K постов83K подписчик

Правила сообщества

Мы не тоталитаристы, здесь всегда рады новым людям и обсуждениям, где соблюдаются нормы приличия и взаимоуважения.


ВАЖНЫЕ ПРАВИЛА

При создании поста обязательно ставьте следующие теги:


«Ищу книгу» — если хотите найти информацию об интересующей вас книге. Если вы нашли желаемую книгу, пропишите в названии поста [Найдено], а в самом посте укажите ссылку на комментарий с ответом или укажите название книги. Это будет полезно и интересно тем, кого также заинтересовала книга;


«Посоветуйте книгу» — пикабушники с удовольствием порекомендуют вам отличные произведения известных и не очень писателей;


«Самиздат» — на ваш страх и риск можете выложить свою книгу или рассказ, но не пробы пера, а законченные произведения. Для конкретной критики советуем лучше публиковаться в тематическом сообществе «Авторские истории».


Частое несоблюдение правил может в завлечь вас в игнор-лист сообщества, будьте осторожны.


ВНИМАНИЕ. Раздача и публикация ссылок на скачивание книг запрещены по требованию Роскомнадзора.

1
Автор поста оценил этот комментарий

Спасибо, тоже воспользовался вашим батником. Только вопрос - степень сжатия файлов архиватор сам назначает или можно настроить ее, изменив один из параметров в вашем коде? Если вообще имеет смысл наращивать сжатие...

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

в самом конце поста про это написано :) Для винрара задан максимум. Для 7zip ультра это 7, я поставил 5.

Мои эксперименты показали что смысла "обязательно ставить ультрасупермаксимум" нет, начиная от "среднее" жмёт достаточно быстро и максимально или близко к нему по объёму. Разница получается в единицы процентов (т.е. выигрыш будет 1-5Мб на сотне Мб книжек или 10-50Мб на гигабайте) при этом чем выше задана степень сжатия, тем дольше будет время, затрачиваемое на сжатие.


В коментариях также есть powershell-скрипт, он жмёт встроенным в винду архиватором, у винды степень сжатия "оптимальная", результат получается при той-же скорости плюс-минус такой-же. Разброс в те-же единицы процентов.

показать ответы
0
Автор поста оценил этот комментарий

А, электронные читалки, там да, не всегда понятно что может быть.
Я интересовался чисто в целях для оптимизации размеров своей библиотеки на смартфоне.
П.С. а когда на читалке открываешь обычный fb2, то он в никакую временную папку не копируется, верно? И насколько безопасны эти временные файлы для памяти читалки?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

На смартфонах многие программы-ридеры тоже умеют открывать fb2.zip без отдельной ручной операции распаковки. Например, FBReader на Android, думаю и CoolReader (по крайней мере сборки для PocketBook умеют) и другие могут тоже. Обычно в поддерживаемых ридером форматах это указано.


Каков точный алгоритм на эл.книгах я не вникал, возможно оно распаковывает не во временный файл, а сразу в память. Не думаю что это сильно влияет на износ. Главное удобство в том, что вот оно у тебя лежит на винте пожатое пофайлово, взял скопировал на эл.книжку/смартфон в таком же виде и всё. Устройство такой формат сразу понимает и можешь открывать и читать.


Опять-же когда библиотека хранится пофайлово, то её удобно синхронизировать между устройствами (можно банально сделать копирование с "пропустить существующие файлы") или синхронизировать с облаком, при этом перекачиваются только изменения, а не весь единый большой архив.


С точки зрения сжатия и занимаемого места я думаю жать в один архив множество файлов будет более эффективно для алгоритма архиватора. Поэтому объём конечного архива получится меньше, но незначительно, разница будет в 1-3%.

показать ответы
0
Автор поста оценил этот комментарий
А в чем, собственно, минусы подхода такого?
У меня в Е-библиотеке лежат много папок с издательскими сериями, и если в таком архиве будут папки по авторам, а там по сериям произведений (если такие будут) то место будет занимать такое же, как если все эти книги в индивидуальных архивах?
П. С. Если такой архив обновлять новыми поступлениями, то у уже читаемых книг прогресс сбросится?
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

разница в том, что когда одна книжка=один архив, то можно их на электронную e-ink книжку так и закидывать, не распаковывая. Устройство это понимает, такие книги индексирует и отображает в библиотеке/каталоге. Если пользователь выбирает "открыть", то устройство само распаковывает архив во временную папку и открывает. Экономится место на устройстве, где его не так много. Аналогично работать с архивами умеют многие программы-ридеры на смартфонах.

Если в одном архиве несколько fb2, то эл.книжка не понимает как с ним быть (возможно некоторые понимают, не проверял).

показать ответы
0
Автор поста оценил этот комментарий

А можно не городить огород, а сделать так:

Иллюстрация к комментарию
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Он папки тоже сжимает вместе со всеми файлами, а этого не нужно.


Например, создаём папку test, в ней папки 111, 222, 333. Раскладываем в каждую по десятку файлов. Выделяем папки, правой кнопкой, сжать, включаем zip, включаем эту опцию. Папки сжимаются в 111.zip 222.zip 333.zip соответственно. А надо чтобы структура папок сохранилась и только fb2 файлы внутри сжались каждые в свой архив.

показать ответы
2
Автор поста оценил этот комментарий
fb2-файлы часто содержат пиксельную графику например обложку,
что сильно снижает эффективность их сжатия
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

это так, и всё-таки даже с обложками файлы книг сжимаются в полтора-три раза.

0
Автор поста оценил этот комментарий

Не, я не запрещаю же никому играться, я просто смысл не понимаю. Ваш пример очень гипотетический. На любую читалку книг fb2/epub/mobi даже без сжатия влазит столько, что хватит на несколько лет. И деревни все давно с интернетом (сам сидел почти посреди леса с 40 мбит/с). А вот pdf/djvu уже не сжимаются. Неужели вы готовитесь сидеть без интернета больше 2-3 лет подряд?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

сжатое занимает меньше места везде. Если у тебя есть библиотека, то сжать её в несколько раз это довольно приятно. Сжимать можно разными способами. Так как читалки понимают пофайлово сжатые книги, имеет смысл жать именно пофайлово. Ну или всю библиотеку целиком. Но желательно всё-таки так чтобы можно было обратиться к каждому файлу и добавлять-удалять-заменять прозрачно без операций переупаковки по 30 минут. Да, если у тебя опдс каталог на никсах - можно использовать zfs или там mount-zip, радибога. Если библиотека личная, хоть на LTO кассету запиши с аппаратным сжатием, при обращении к библиотеке раз в неделю можно и подождать пару минут пока перемотается, а срок хранения для кассет заявляется 30 лет.


В десктопных вариантах (коих я думаю процентов 90+ пользователей) и загрузках в облака, которые тут выкладывают, может быть удобен fb2.zip. Ну или сжатие NTFS на десктопе. Я наблюдаю что выкладывают просто fb2, если пожать то в облаке это будет занимать в 2-3 раза меньше места. Имеет смысл? Думаю да.

0
Автор поста оценил этот комментарий

Качаем книги на читалку
Качаем архивы на читалку
<==== вы находитесь здесь ====<
Качаем архивы на сервер и оттуда выборочно на читалку
Ставим OPDS
Ставим zfs с прозрачным сжатием

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Качаем книги на читалку

Качаем архивы на читалку

Качаем архивы на сервер и оттуда выборочно на читалку

Ставим OPDS

Ставим zfs с прозрачным сжатием

<==== вы находитесь здесь ====<

Уезжаете в деревню Кукуево где не ловит телефон или внезапно кончились интернеты и подключиться к opds невозможно.


Вариантов всегда больше одного. Я не настаиваю что fb2.zip единственно верный путь. Кому-то может быть удобно держать именно сжатый вариант. В то-же время можно пользоваться любым другим способом, например читать epub/djvu или вообще слушать аудиокниги.

показать ответы
0
Exterminate
Автор поста оценил этот комментарий

А поможете распаковать библиотеку флибусты? до fb2? Хочу на свой сервер opds выгрузить.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

а как она запакована? Если нужно рекурсивно обойти все папки и распаковать, то нужно поменять Maska например на *.zip чтобы искались такие файлы. И поменять ключи в строках Set ARC на распаковку..., надо посмотреть на какие и протестировать на каких-то пробных файлах. Если сервер на никсах, возможно проще это сделать сразу на нём через find ... | xargs unzip...

1
Автор поста оценил этот комментарий

Я вот таким скриптом на PS пользуюсь, работает лучше BAT-ников и не требует левых программ.

$cnt = 0
$sizeAll = 0
$sizeAllNew = 0
ls -recurse -filter "*.fb2" -file | foreach {
    $newName = $_.FullName + ".zip"
    if ([System.IO.File]::Exists($newName)) {
        del -literalPath $newName -force
    }
    echo $_.FullName
    echo "Сжатие..."
    [System.Console]::CursorTop = [System.Console]::CursorTop - 1
    compress-archive -literalPath $_.FullName -force -destinationPath $newName
    $oldSize = [math]::Round($_.Length / 1kb)
    $newSize = [math]::Round((gi -LiteralPath $newName).Length / 1024)
    $pc = 100 - [math]::Round($newSize / $oldSize * 100)
    echo ($pc.ToString("00") + "%: " + $oldSize.ToString() + " kB -> " + $newSize.ToString() + " kB")
    $_.Delete()
    $cnt = $cnt + 1
    $sizeAll = $sizeAll + $oldSize
    $sizeAllNew = $sizeAllNew + $newSize
}
echo ""
echo ("Всего обработано файлов: " + $cnt.ToString())
echo ("Сэкономлено места: " + [math]::Round(($sizeAll - $sizeAllNew) / 1024, 2).ToString() + " MB")
pause

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Хороший вариант! Результат по скорости/степени сжатия плюс-минус сравним. То, что не требует внешних программ это плюс. С другой стороны у русскоговорящих 7-zip/WinRAR есть практически на каждом домашнем компе, так что не сказать что "без использования сторонних программ" это экстра-преимущество.

5
Большой Змей
Автор поста оценил этот комментарий

Спасибо за вопрос, благодаря ему разобрался, как упаковать вообще всю библиотеку в пару кликов. До этого умел упаковывать только все файлы в папке разом.

1. Заходим в папку библиотеку (или папку автора, если надо ужать только его одного)
2. Нажимаем Ctrl + B, чтобы показать все файлы в подпапках разом.
3. Выбираем все файлы или только нужные (Ctrl + А для всех, или Ctrl + щелчок по нужным избирательно, или Ctrl + Shift для выбора диапазона)

4. Меню "Файлы - Упаковать"

5. Параметры ставим, как на картинке ниже. Ключевые моменты выделил.
Внимание! Путь для упаковки нужно исправить как на картинке.

Иллюстрация к комментарию
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

на всякий случай рекомендую проверить чтобы нормально сжимались файлы, имеющие в именах хитрые символы, в частности символ двойных угловых кавычек « » (0xBA и 0xBB). Они в названиях книг нередко встречаются и архиваторы на них могут спотыкаться. В моём случае помогло chcp 1251 в батнике, некоторым архиваторам (тому-же 7-zip) используемые кодовые страницы можно задать опциями.

0
DELETED
Автор поста оценил этот комментарий

Так просто сжать не получится. Но можно оптимизировать

Давно писал как-то https://hardworm.github.io/640kb/


И так:

1. Разобрать pdf на странички в tiff (или еще что-то)

2. Прогнать через scantailor - очистка страниц от графического мусора

3. Собрать обратно в pdf или djvu


Конечно в автоматическом режиме это не получится.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

на рутрекере писали что через Acrobat (не ридер) можно и ещё через какие-то утилиты. А так да, разобрать на картинки (например файнридером) а там через какой-нибудь ScanCromsator или похожие утилиты собрать из картинок назад. Времени занимает вагон и не годится для того чтобы обработать десятки/сотни файлов за раз.

показать ответы
0
Автор поста оценил этот комментарий

Да, сканы и чистые пдфки. В основной массе те, что содержат высокодетализированные иллюстрации - у меня есть книги, которые весят больше 100 МБ чисто из-за этого :D


Точно, забыл про рутрекер, спасибо, посмотрю там. Должно что-то быть.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

у меня были такие учебники по 100мб но штучно. Можно поискать аналогичный epub/pdf мЕньшего объёма на том-же z-lib.org или на торрентах. Есличо, читать такие книжки на 6" e-ink всё равно будет нереально.

0
Автор поста оценил этот комментарий

А есть аналогичная штука, но для массового сжатия пдф файлов? Я по одиночке-то спокойно их сжимал на сайтах специальных, а если прям массово?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

ты имеешь в виду чтобы уменьшить объём pdf внутри которого сканы страниц? Не встречал/не было необходимости. На рутрекере есть раздел "Сканирование, обработка сканов" и там есть тема "Как уменьшить размер PDF?", может что-то найдёшь. Также похожие темы по обработке книг были на forum.ru-board.com, но я их не смотрел лет 10-15.


Как совсем тупой вариант если через какую-то программу, то можно автоматизировать процесс при помощи авто-кликеров, записывающих движения мыши и нажатия кнопок, а затем повторяющих. Или поручить какому-нибудь стажёру/студенту/школьнику за небольшое вознаграждение :)

показать ответы
4
Большой Змей
Автор поста оценил этот комментарий

Лучше поставить Total Commander. Там есть функция массовой упаковки/распаковки файлов. Можно обрабатывать все по отдельности, все скопом, по файлам/папкам с именами, удалять после после упаковки, шифровать, использовать различные алгоритмы сжатия...

Кроме того, там есть функция массового переименования файлов по шаблону, что тоже полезно. Да там еще много разных фишек. Это программа не на одну задачу и один день, а навсегда.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Возможно. Отношусь к лагерю пользователей FAR :) Была цель для себя решить более-менее универсально без сторонних программ кроме самих архиваторов, которые уже есть или могут быть установлены бесплатно.

0
DELETED
Автор поста оценил этот комментарий

А чем на ipad открыть fb2? Без покупки прилоги...

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

я использовал KyBook. Он показывает внизу рекламу, но мне не сильно мешало и каким-то образом удавалось её закрыть через некоторое время. Сам буду рад если кто подскажет варианты. В основном текстовые форматы читаю на Pocketbook, на iPad только pdf или epub если оно с графикой.

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества