Просмотр файлов как картинок

Здесь обсуждаются темы, косвенно связанные с Far.
Post Reply
User avatar
SlashNet
Posts: 617
Joined: Fri 20 Mar, 2009 09:43
Location: Львов
Has thanked: 7 times
Been thanked: 12 times

Просмотр файлов как картинок

Post by SlashNet »

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

Здесь же я хочу рассмотреть файлы с другой стороны, а именно преобразовывая или извлекая из них различные изображения.
Тема витала на форуме уже давно и первые начинания были ещё в 2009 году. С тех пор находились новые утилитки и исследовались различные типы файлов.

Как и в предыдущих темах, активно используются вспомогательные утилитки портированные из Линукса.

Тема будет полезна тем кто пользуется плагинами просмотра картинок такие как Review, Multimedia Viewer и (кажется) PictureView3 - такие, которые умеют автоматически определять тип файла открытого во встроенном вьювере Far.

:!: Основная настройка плагинов должна быть следующей:
  • включить автоматическое распознавание файлов изображений во встроенном вьювере Far;
  • добавить расширение TMP в список какого-нибудь универсального декодера (у меня GFL)
Также, для более удобного перехода к просмотру следующего файла, был создан дополнительный макрос (к плагину Review, которым я пользуюсь) для перехода к следующему/предыдущему файлу
Last edited by SlashNet on Fri 14 Jan, 2022 21:12, edited 2 times in total.
ədиw wo⊥є ʚ o⊥ʎнdəʚədəu əɔʚ
User avatar
SlashNet
Posts: 617
Joined: Fri 20 Mar, 2009 09:43
Location: Львов
Has thanked: 7 times
Been thanked: 12 times

Просмотр файлов как картинок

Post by SlashNet »

Начну, пожалуй, с самого интересного: видеофайлы.
Как и другие пользователи, я столкнулся с нестабильными но очень раздражающими вылетами плагина (а за ним и Фара) при открытии видеофайлов. Видео я в Фаре не смотрю - мне необходимо всего лишь понять что это за файл без запуска внешнего плейера. Поэтому возникла идея генерировать превьюшки с кадрами из видео и автоматически их показывать.

С этой задачей неплохо справляется утилитка Movie Thumbnailer (mtn) она довольно шустрая (по крайней мере на современных компьютерах) и поддерживает большинство популярных форматов видео. Из минусов отмечу, что генерирует картинку исключительно в файл с тем же названием, что и у оригинального видео, и нет поддержки HEVC-кодека (ещё, почему-то, спотыкается на некоторых коротких файлах). Но для 90% файлов справляется на ура.

Батник для базового использования будет выглядеть примерно так:
  1. @echo off
  2. md "%TEMP%\mtn_temp" 1>nul 2>nul
  3. D:\Soft\_Tools_\Video\MTN\mtn.exe -b 0,70 -D 6 -c 4 -r 4 -P -k 404040 -F FFFFFF:10 -O "%temp%\mtn_temp" "%~1" 1>nul 2>nul
  4. if exist "%temp%\mtn_temp\%~n1_s.jpg" type "%temp%\mtn_temp\%~n1_s.jpg"
  5. rmdir /q /s "%TEMP%\mtn_temp" 1>nul 2>nul
ассоциация для файлов самая обычная: view:<iviewvideo.cmd "!\!.!"

А выглядеть это будет как-то так (цвет заголовка можно настроить):
klip_s.jpg
В моём же случае мне этого показалось мало - некоторые видеофайлы вышеописанной программой обрабатываться не захотели и было решено добавить вспомогательную программу именно для таких случаев. А какая самая многофункциональная программа обработки видео? Правильно - ffdshow. После различных экспериментов стало понятно, что процесс создания превьюшки этой программой значительно медленнее (особенно на менее современных компьютерах). Поэтому ограничился отображением всего четырёх кадров.

Выглядит это примерно так:
Clipboard_14.01.2022_20-42-56,32.jpg
Но всё же такая картинка генерировалась заново при каждом новом просмотре (и не всегда с приемлемой скоростью). Так что появилась ещё одна идея: сохранять сгенерированные превьюшки, а затем просто показывать их без повторной генерации. Наиболее удобным местом для хранения данной информации мне приглянулось одно из свойств файловой системы NTFS, а именно альтернативные потоки файлов.
Так что на данный момент, мой текущий батник обрабатывает видеофайлы следующим образом:
  • При открытии проверяется у файла видео наличие альтернативного потока с названием VideoThumb.jpg.
  • Если он есть - показываем готовую превьюшку
  • Если его нет - генерируем новую, показываем и пытаемся записать её в альтернативный поток видеофайла (если файловая система не поддерживает альтернативные потоки - FAT32, файлы на CD-дисках или на сетевых шарах, то для этих файлов превьюшка будет просто генериться каждый раз заново).
К тому же он значительно распух из-за всяких дополнительных функций которые я дописывал время от времени.
Используются в нём следующие программы:
  • вышеупомянутый mtn - для основного функционала
  • ffdshow - для генерации дополнительных превьюшек
  • MediaInfo и ImageMagick - в качестве вспомогательных
Также, для вертикальных видео с телефонов, превьюшка создаётся не 2х2, а 4х1 для лучшего заполнения экрана.

:!: Обратите внимание: при добавлении превьюшки в альтернативный поток файла у него обновится дата и время последней записи / изменения на текущие.

Выглядит мой файл SetThumbtoVideo.cmd вот так:
  1. @echo off
  2. md "%TEMP%\mtn_temp" 1>nul 2>nul
  3. D:\Soft\_Tools_\Video\MTN\mtn.exe -b 0,70 -D 6 -c 4 -r 4 -P -k 404040 -F FFFFFF:10 -O "%temp%\mtn_temp" "%~1" 1>nul 2>nul
  4. if exist "%temp%\mtn_temp\%~n1_s.jpg" goto ext
  5.  
  6. for /F "usebackq delims=" %%i in (`D:\Soft\_Tools_\Video\MediaInfo\MediaInfo.exe "--Output=Video;%%Duration/String3%%" "%~1"`) do @set tt=%%i
  7.  
  8. for /F "eol=. tokens=1,2* delims=:" %%i in ('echo %tt%') do set hrs=%%i& set mnts=%%j& set secs=%%k
  9. set secs=%secs:~,2%
  10. rem remove trail zeros
  11. cmd /c exit /b %hrs%
  12. set hrs=%errorlevel%
  13. cmd /c exit /b %mnts%
  14. set mnts=%errorlevel%
  15. cmd /c exit /b %secs%
  16. set secs=%errorlevel%
  17.  
  18. set /a tots=%hrs%*3600+%mnts%*60+%secs%
  19. set /a ss=%tots%/5
  20. set /A "hh=ss/3600+100,ss%%=3600,mm=ss/60+100,ss=ss%%60+100"
  21. set tstamp1=%hh:~1%:%mm:~1%:%ss:~1%
  22. set /a ss=%tots%/5*2
  23. set /A "hh=ss/3600+100,ss%%=3600,mm=ss/60+100,ss=ss%%60+100"
  24. set tstamp2=%hh:~1%:%mm:~1%:%ss:~1%
  25. set /a ss=%tots%/5*3
  26. set /A "hh=ss/3600+100,ss%%=3600,mm=ss/60+100,ss=ss%%60+100"
  27. set tstamp3=%hh:~1%:%mm:~1%:%ss:~1%
  28. set /a ss=%tots%/5*4
  29. set /A "hh=ss/3600+100,ss%%=3600,mm=ss/60+100,ss=ss%%60+100"
  30. set tstamp4=%hh:~1%:%mm:~1%:%ss:~1%
  31.  
  32. D:\Soft\_Tools_\Video\FFMpeg\bin\ffmpeg.exe -ss %tstamp1% -i "%~1" -vframes 1 -f mjpeg "%temp%\mtn_temp\thumb1.jpg" -v quiet
  33. D:\Soft\_Tools_\Video\FFMpeg\bin\ffmpeg.exe -ss %tstamp2% -i "%~1" -vframes 1 -f mjpeg "%temp%\mtn_temp\thumb2.jpg" -v quiet
  34. D:\Soft\_Tools_\Video\FFMpeg\bin\ffmpeg.exe -ss %tstamp3% -i "%~1" -vframes 1 -f mjpeg "%temp%\mtn_temp\thumb3.jpg" -v quiet
  35. D:\Soft\_Tools_\Video\FFMpeg\bin\ffmpeg.exe -ss %tstamp4% -i "%~1" -vframes 1 -f mjpeg "%temp%\mtn_temp\thumb4.jpg" -v quiet
  36.  
  37. for /F "usebackq delims=" %%i in (`D:\Soft\_Tools_\Video\MediaInfo\MediaInfo.exe "--Output=Video;%%Width%%" "%~1"`) do @set vwidth=%%i
  38. for /F "usebackq delims=" %%i in (`D:\Soft\_Tools_\Video\MediaInfo\MediaInfo.exe "--Output=Video;%%Height%%" "%~1"`) do @set vheight=%%i
  39. for /F "usebackq delims=" %%i in (`D:\Soft\_Tools_\Video\MediaInfo\MediaInfo.exe "--Output=Video;%%Rotation%%" "%~1"`) do @set vrot=%%i
  40. rem echo %vheight% GEQ %vwidth%
  41. if "%vrot%" EQU "90.000" goto swapsides
  42. if "%vrot%" EQU "270.000" goto swapsides
  43. goto mont
  44. :swapsides
  45. set t_t=%vheight%
  46. set vheight=%vwidth%
  47. set vwidth=%t_t%
  48.  
  49. :mont
  50. rem echo %vheight% GEQ %vwidth%
  51. if %vheight% GEQ %vwidth% goto rawmontage
  52. D:\Soft\_Tools_\Graphics\ImageMagick\montage.exe "%temp%\mtn_temp\thumb1.jpg" "%temp%\mtn_temp\thumb2.jpg" "%temp%\mtn_temp\thumb3.jpg" "%temp%\mtn_temp\thumb4.jpg" -geometry +2+2 "%temp%\mtn_temp\thumbs.jpg" >nul
  53. D:\Soft\_Tools_\Graphics\ImageMagick\convert.exe -resize 1204 -antialias -pointsize 16 -font "Arial-Black" -fill "#ffffff" -stroke "#808080" -draw "text 10,20 'Duration: %tt%'" "%temp%\mtn_temp\thumbs.jpg" "%temp%\mtn_temp\%~n1_s.jpg" >nul
  54. goto ext
  55. :rawmontage
  56. D:\Soft\_Tools_\Graphics\ImageMagick\montage.exe "%temp%\mtn_temp\thumb1.jpg" "%temp%\mtn_temp\thumb2.jpg" "%temp%\mtn_temp\thumb3.jpg" "%temp%\mtn_temp\thumb4.jpg" -geometry +2+2 -tile 4x "%temp%\mtn_temp\thumbs.jpg" >nul
  57. D:\Soft\_Tools_\Graphics\ImageMagick\convert.exe -resize 1440 -antialias -pointsize 16 -font "Arial-Black" -fill "#ffffff" -stroke "#808080" -draw "text 10,20 'Duration: %tt%'" "%temp%\mtn_temp\thumbs.jpg" "%temp%\mtn_temp\%~n1_s.jpg" >nul
  58. :ext
  59. type "%temp%\mtn_temp\%~n1_s.jpg" > "%~1:VideoThumb.jpg"
  60. type "%temp%\mtn_temp\%~n1_s.jpg"
  61. rmdir /q /s "%TEMP%\mtn_temp" 1>nul 2>nul
А вызывается он из другого батника (в котором и проверяется наличие готовой превьюшки в альтернативном потоке):

Code: Select all

%binpath%\UnxUtils\cat.exe "%~1:VideoThumb.jpg" 2>nul
if %ERRORLEVEL% NEQ 0 (
call %binpath%\Video\SetThumbtoVideo.cmd "%~1"
)
Обрабатываемые расширения файлов у меня сейчас такие: .AVI .MKV .MP4 .M4V .MOV .WMV .FLV .MPG .WEBM .OGV .3GP .WTV .RV
Last edited by SlashNet on Fri 14 Jan, 2022 21:12, edited 7 times in total.
ədиw wo⊥є ʚ o⊥ʎнdəʚədəu əɔʚ
User avatar
SlashNet
Posts: 617
Joined: Fri 20 Mar, 2009 09:43
Location: Львов
Has thanked: 7 times
Been thanked: 12 times

Просмотр файлов как картинок

Post by SlashNet »

В современных аудиофайлах тоже можно отыскать картинки которые можно посмотреть.
Нет. Мы не будем генерировать спектрограмму файла (я пробовал :ha: - результат огорчил своим быстродействием).
Довольно часто можно обнаружить обложки музыкальных альбомов в файлах .mp3, .flac и .m4a.
Для их вытаскивания пригодится утилитка работы с метаданными - ExifTool

Для MP3 и FLAC командная строка будет выглядеть следующим образом:

Code: Select all

view:< exiftool.exe -Picture -b "!\!.!"
А для M4A немного иначе:

Code: Select all

view:< exiftool.exe -CoverArt -b "!\!.!"
Last edited by SlashNet on Fri 14 Jan, 2022 21:12, edited 4 times in total.
ədиw wo⊥є ʚ o⊥ʎнdəʚədəu əɔʚ
User avatar
HaRT
Moderator
Posts: 9989
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 145 times
Been thanked: 287 times

Просмотр файлов как картинок

Post by HaRT »

В родственной теме обсуждается также просмотр .dot и .svg.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
SlashNet
Posts: 617
Joined: Fri 20 Mar, 2009 09:43
Location: Львов
Has thanked: 7 times
Been thanked: 12 times

Просмотр файлов как картинок

Post by SlashNet »

Я про эти сообщения помню.
Как буду проходиться по всему своему списку расширений, то и их сюда добавлю.
Last edited by SlashNet on Fri 14 Jan, 2022 22:34, edited 1 time in total.
ədиw wo⊥є ʚ o⊥ʎнdəʚədəu əɔʚ
User avatar
SlashNet
Posts: 617
Joined: Fri 20 Mar, 2009 09:43
Location: Львов
Has thanked: 7 times
Been thanked: 12 times

Просмотр файлов как картинок

Post by SlashNet »

Для предпросмотра следующих типов файлов нам будут необходимы обычные архиваторы (а точнее - разархиваторы).

.CDR - файл векторного редактора Corel Draw
  1. @echo off
  2. set binpath=D:\Soft\_Tools_
  3. %binpath%\UnxUtils\head.exe --bytes=3 "%~1" | %binpath%\UnxUtils\grep.exe -E --regexp="RI" > nul
  4. if %errorlevel% == 0 goto oldCDRfile
  5. %binpath%\Archivers\ZIP\unzip.exe -p "%~1" "previews\thumbnail.png" 2>nul
  6. %binpath%\Archivers\ZIP\unzip.exe -p "%~1" "metadata\thumbnails\thumbnail.bmp" 2>nul
  7. exit /b
  8.  
  9. :oldCDRfile
  10. %binpath%\Graphics\Xn\XnView\nconvert.exe -quiet -o "%temp%\tmpcnv.png" -clevel 0 -out png "%~1"
  11. type "%temp%\tmpcnv.png" 2>&0
  12. del /q "%temp%\tmpcnv.png" > nul
  13. exit /b
Вызывается, как обычно: view:< CDRview.cmd "!\!.!"
Используется автоопределение формата файла.
В случае предпросмотра файла старого формата - будет показана маленькая превьюшка размером 96*96 (если она присутствует в файле).
Файлы более свежих форматов содержат превьюшки значительно лучшего качества.


.XPS - Неудавшаяся попытка Майкрософт придумать PDF
Самый простой способ заглянуть в файл - следующий:

Code: Select all

view:< unzip.exe -p "%~1" "Documents\1\Metadata\Page1_Thumbnail.JPG"
Конечно, превьюшка содержащаяся в файле слишком мелкая и некачественная, но как получше рассмотреть первую страницу - напишу немного ниже.


.PPTX, .PPSX - PowerPoint презентация
В файле, обычно, содержится превьюшка небольших размеров. Чаще всего это JPEG-файл, реже - WMF. Во втором случае у меня используется дополнительная утилитка NConvert от XnView для конвертации картинки в растровый формат (её, думаю, вполне можно заменить чем-нибудь аналогичным). Так же и с ZIP-архиватором - тут (по историческим причинам) используется pkzipc.exe, но можно использовать и аналогичный.
  1. @echo off
  2. set binpath=D:\Soft\_Tools_
  3. %binpath%\Archivers\ZIP\pkzipc.exe -Silent -NoZipExtension -print="%temp%\temp_thumb.jpg" "%~1" "docProps\thumbnail.jpeg" 2>nul 1>nul
  4. if exist "%temp%\temp_thumb.jpg" goto showPPTXpic
  5. %binpath%\Archivers\ZIP\pkzipc.exe -Silent -NoZipExtension -print="%temp%\temp_thumb.wmf" "%~1" "docProps\thumbnail.wmf" 2>nul
  6. %binpath%\Graphics\Xn\XnView\nconvert.exe -quiet -o "%temp%\temp_thumb.jpg" -q 100 -out jpeg "%temp%\temp_thumb.wmf" 2>nul 1>nul
  7. if exist "%temp%\temp_thumb.jpg" goto showPPTXpic
  8. echo !!! No Preview
  9. exit /b
  10. :showPPTXpic
  11. type "%temp%\temp_thumb.jpg"
  12. del /q "%temp%\temp_thumb.jpg" 2>nul
  13. del /q "%temp%\temp_thumb.wmf" 2>nul
  14. exit /b
Вызывается, как обычно: view:< PPTXpreview.cmd "!\!.!"


.CBR и .CBZ - близнецы-братья представляющие собой архив rar или zip с картинками. Используются, обычно, для комиксов, но, нередко и для сканов других печатных изданий. Конечно, можно зайти в такой файл вручную и просмотреть изображения обычным способом. Но для просмотра первой по списку картинки (обычно это обложка печатного издания) можно использовать следующий командный файл (используется автоопределение типа файла, так как нередко расширения бывают перепутаны):
  1. @echo off
  2. set binpath=D:\Soft\_Tools_
  3. %binpath%\UnxUtils\head.exe --bytes=2 "%~1" | %binpath%\UnxUtils\grep.exe "Ra" > nul
  4. if %errorlevel% == 0 goto CBRfile
  5.  
  6. :CBZfile
  7. chcp 866 > nul
  8. for /f "delims=" %%b in ('%binpath%\Archivers\ZIP\unzip.exe -l "%~1" ^| %binpath%\UnxUtils\grep.exe -E --regexp=".jpg|.jpeg|.png|.gif|.webp" ^| sort /+31 ^| %binpath%\UnxUtils\head.exe --lines=1 ^| %binpath%\UnxUtils\tail.exe --bytes=+29') do %binpath%\Archivers\ZIP\unzip.exe -p "%~1" "%%b"
  9. exit /b
  10.  
  11. :CBRfile
  12. chcp 866 > nul
  13. for /f "delims=" %%b in ('%binpath%\Archivers\RAR\Rar_400.exe v "%~1" ^| %binpath%\UnxUtils\grep.exe -E --regexp=".jpg|.jpeg|.png|.gif|.JPG|.webp" ^| sort ^| %binpath%\UnxUtils\head.exe --lines=1 ^| %binpath%\UnxUtils\tail.exe --bytes=+2') do %binpath%\Archivers\RAR\Rar_400.exe p -inul -- "%~1" "%%b"
  14. exit /b
Вызывается, как обычно: view:< CBZpreview.cmd "!\!.!"
Архиватор RAR тут используется старой версии (4.00), так как в новых версиях архиватора слегка изменился формат вывода списка файлов, а руки у меня так и не дошли переделать батник. :pardon:


.EMZ - gzip-нутый emf-файл
Не помню где мне попались эти файлы, но пусть будут для коллекции.
  1. @echo off
  2. set binpath=D:\Soft\_Tools_
  3. %binpath%\Archivers\7ZIP\7za.exe e "%~1" -so > "%temp%\temp_thumb.emf"
  4. %binpath%\Graphics\Xn\XnView\nconvert.exe -quiet -o "%temp%\tmpcnv.png" -clevel 0 -out png "%temp%\temp_thumb.emf"
  5. type "%temp%\tmpcnv.png"
  6. del /q "%temp%\tmpcnv.png"
  7. del /q "%temp%\temp_thumb.emf"
  8. exit /b

.3DXML - трехмерная модель
Файл попался вместе с каким-то просмотрщиком 3D-моделей.

Code: Select all

view:< unzip.exe -p "!\!.!" "Preview2D.png"

.STA - сейвстейт эмулятора blueMSX

Code: Select all

view:< unzip.exe -p "!\!.!" "screenshot.bmp"

.FB3 - наследник формата электронных книг FB2
(кто-нибудь видел книги в этом формате кроме образца на сайте автора?)

Code: Select all

view:< unzip.exe -p "!\!.!" "cover.jpg"
Last edited by SlashNet on Sat 15 Jan, 2022 17:30, edited 3 times in total.
User avatar
HaRT
Moderator
Posts: 9989
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 145 times
Been thanked: 287 times

Просмотр файлов как картинок

Post by HaRT »

Правильно ли я понимаю, что технически возможно скомпоновать общий скрипт, который будет анализировать расширение и выдавать картинку для любого из перечисленных типов файлов?
Такой скрипт было бы удобно использовать «широким кругам пользователей».
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
SlashNet
Posts: 617
Joined: Fri 20 Mar, 2009 09:43
Location: Львов
Has thanked: 7 times
Been thanked: 12 times

Просмотр файлов как картинок

Post by SlashNet »

HaRT wrote: Sat 15 Jan, 2022 16:21 Правильно ли я понимаю, что технически возможно скомпоновать общий скрипт,
У меня сейчас так и есть (так удобнее вносить правки или добавлять новые форматы). Сюда просто выдёргиваю более-менее причёсанные куски относящиеся к тому или иному типу файлов. Первая версия выглядела именно так как показано в этом посте.
Но на данный момент этот батник жутко непричёсан, с кучей закоментированных строк от предыдущих решений и неиспользуемых секций.
ədиw wo⊥є ʚ o⊥ʎнdəʚədəu əɔʚ
User avatar
SlashNet
Posts: 617
Joined: Fri 20 Mar, 2009 09:43
Location: Львов
Has thanked: 7 times
Been thanked: 12 times

Просмотр файлов как картинок

Post by SlashNet »

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

Для .PDF и .XPS/.OXPS (как и обещал ранее) можно воспользоваться небольшой, но отлично работающей программой MuPDF.
Кстати, тоже умеет извлекать внедрённые картинки и текст.
  1. @echo off
  2. D:\Soft\_Tools_\Textual\muPDF\mutool.exe draw -w 1024 -h 912 -A 8 -o "%temp%\temp_thumb.png" "%~1" 1 2>nul
  3. type "%temp%\temp_thumb.png"
  4. del /q "%temp%\temp_thumb.png"
  5. exit /b

Аналогично посмотреть первую страницу можно и у .DJVU файлов.
Подойдёт для этих целей программа djvudecode которую можно взять из пакета DjVuSmall.
К сожалению, работает не так шустро как хотелось бы, но пусть будет.
В батник добавлено дополнительное преобразование формата изображения - по моим ощущениям, так работает немного быстрее.
  1. @echo off
  2. D:\Soft\_Tools_\Textual\DjVuSmall\bin\djvudecode.exe --output-format=bmp --layer=all --page-range=1 "%~1" "%temp%\temp_pic.bmp"
  3. D:\Soft\_Tools_\Graphics\ImageMagick\convert.exe "%temp%\temp_pic.bmp" -resize 800x800 PNG:compression-level=0 "%temp%\temp_pic.png" 2>nul 1>nul
  4. type "%temp%\temp_pic.png"
  5. del /q "%temp%\temp_pic.bmp"
  6. del /q "%temp%\temp_pic.png"
  7. exit /b

Раз можно посмотреть на пдф-ки, значит можно посмотреть и на .DVI-файлы (это те которые создаются пакетом программ TeX, LaTeX и т.п.)
Поможет в этом деле программа dvipdfmx из пакета MiKTeX (есть portable-версия). Но пакет большой, так что смысл его ставить только если действительно этим занимаетесь. А выдернуть из него только те файлы, которые нужны для утилитки - у меня не вышло.
  1. @echo off
  2. D:\miktex-portable\texmfs\install\miktex\bin\x64\dvipdfmx.exe -o "%temp%\temp_dvi.pdf" -s 1 -q "%~1" 2>nul
  3. D:\Soft\_Tools_\Textual\muPDF\mutool.exe draw -w 1024 -h 912 -A 8 -o "%temp%\temp_thumb.png" "%temp%\temp_dvi.pdf" 1 2>nul
  4. type "%temp%\temp_thumb.png"
  5. del /q "%temp%\temp_dvi.pdf"
  6. del /q "%temp%\temp_thumb.png"
  7. exit /b
Дополнительное преобразование через пдф пришлось делать, так как рендер напрямую в пнг выдавал слишком странные результаты.


Что насчёт электронных книг? На их обложки тоже можно посмотреть.
Для книг .FB2 существует программа извлечения изображений из файлов данного формата fb2bin (кстати, её возможно прикрутить к МультиАрку).
Основная сложность в том что файл, который является обложкой, не всегда имеет одно и то же название. Обычно это "cover.jpg", но нередко попадаются книги в которых файл обложки обозван как попало.

Поэтому, использовать fb2bin для просмотра обложек можно, но решение не будет универсальным:
  1. @echo off
  2. mkdir "%TMP%\fb2cvr"
  3. D:\Soft\_Tools_\Textual\FB\fb2bin.exe -x --base-dir="%TMP%\fb2cvr" "%~1" cover.jpg
  4. type "%TMP%\fb2cvr\cover.jpg"
  5. rmdir /q /s "%TMP%\fb2cvr"
  6. exit /b

Лично для себя я написал скрипт на Python 3.7, которым возможно определить и извлечь файл, который используется в качестве обложки (например:<coverpage><image l:href="#cb_120092big.jpg"/></coverpage>). Исключение составляют только слишком уж криво составленные книги, где обложка тупо вставлена в основной текст.
  1. @echo off
  2. python D:\Soft\_Tools_\Textual\FB\PythScripts\fb2Extractor.py covr "%~1" "%temp%\covr.tmp"
  3. if %errorlevel% == 1 exit /b
  4. if not exist "%temp%\covr.tmp" copy /b D:\Soft\_Tools_\Textual\FB\FB2_NoCover.png "%temp%\covr.tmp" 2>nul 1>nul
  5. type "%temp%\covr.tmp"
  6. del /q "%temp%\covr.tmp" > nul
  7. exit /b
fb2Extractor.rar
скрипт на Python 3.7 для извлечения изображений из FB2-книг.
(14.47 KiB) Not downloaded yet
В комплекте прилагается картинка, которая подставляется, если обложки у файла нет.


Аналогичная ситуация и с книгами .EPUB.
Вроде обычный zip-архив, но файл с обложкой может располагаться и называться как угодно. Чтоб узнать название необходимо распарсить пару файлов (первый чтоб узнать где находится второй файл, а во втором уже и смерть Кощеева написано какой файл изображения нам нужен). К счастью, на этот раз мне не пришлось вспоминать программирование - я нашёл готовое решение, но тоже на Питоне - epub-thumbnailer.
  1. @echo off
  2. python D:\Soft\_Tools_\Textual\eBooks\epub-thumbnailer\epub-thumbnailer.py "%~1" "%temp%\covr.png" 800 >nul
  3. if not exist "%temp%\covr.png" copy /b %binpath%\Textual\eBooks\ePUB_NoCover.png "%temp%\covr.png" 2>nul 1>nul
  4. type "%temp%\covr.png"
  5. del /q "%temp%\covr.png" > nul
  6. exit /b

Теоретически возможно извлекать обложки и из книг .LIT и .MOBI - есть распаковщики этих форматов, но у меня таких файлов почти нет и как и желания писать парсер для извлечения названия нужного файла с обложкой.
Post Reply

Return to “Операционные системы, командные оболочки и прочее”