Actualizaciones a mi script paq8px_script para comprimir archivos usando PAQ8PX

Actualizaciones a mi script paq8px_script para comprimir archivos usando PAQ8PX

Hola a todos,

En los pasados días, revisité mi script paq8px_script que escribí para comprimir archivos usando el compresor paq8px. Este script crea una lista de archivos que luego pasamos a paq8px para que pueda comprimir varios archivos creando un archivo. En el 2018, escribí un post sobre este script.

Una actualización que hice en el 2020 fue añadir compresión usando multiples hilos para que cada uno comprima un archivo, creando archivos paq8px individuales como resultado. Esto es util cuando tenemos varios archivos grandes y queremos maximizar los recursos de nuestra PC. Este código funcionó, pero nunca lo probé intensamente ni hice un post oficial como resultado.

Ahora, en el 2022, he revisitado este script. Lo he actualizado y probado en Ubuntu Linux 22.10. Estos son los cambios que le he hecho desde entonces:

Nuevos Cambios

Los siguientes son los cambios que le he hecho a este script desde que lo introduje:

  • -n o --nativecpu: Usa el ejecutable «Native CPU» (Nativo) de paq8px. Acostumbro a añadir el postifjo _nativecpu a estas versiones. Son compiladas en máquinas con instrucciones AVX2, por lo que sólamente esta versión se debe usar en CPUs que tengan este set de instrucción. Si lo usamos en otros CPUs que no tengan esto, es muy probable que tengamos problemas. En estos casos, no deberiamos usar esta opción.
  • -mt o --multithread: Comprime un archivo por cada hilo del CPU. Esto creará archivos paq8px individuales en vez de añadirlos todos a un mismo archivo.
  • -to o --test-only: Verificará sólamente un archivo que hayamos comprimido anteriormente. La acción por defecto del script es sólamente comprimir. Puedes probar un archivo luego de comprimirlo pasando la opción -t, pero si sólo quieres probar un archivo que hayas comprimido, entonces usamos -to.
  • La versión de paq8px usada por defecto en esta versión del script es paq8px v207.
  • El argumento de compresión es por defecto -9.

Próximos pasos

Los próximos pasos son añadir soporte para extraer archivos. También añadir verificación de archivos cuando usamos múltiples hilos, ya que esto actualmente no está implementado si intentamos usar la opción -t.

El script ha sido refactorizado y dividido en funciones, haciendo más fácil programar y expandir el script.

Desde que cambié a Linux, he estado usando Python constantemente para crear scripts que me ayuden con mis tareas, y este script es una pieza esencial para comprimir mis archivos.

Argumentos del script a partir de esta versión

usage: paq8px_script.py [-h] -i INPUT [-v VERSION] [-l LEVEL] [-o OUTPUT] [-t] [-to] [-r] [-mt]
                        [-n]

This script will generate a filelist file which will be used by paq8px_v207 for compressing. It is
also used for testing if you use the -t or -to argument

options:
  -h, --help            show this help message and exit

required arguments:
  -i INPUT, --input INPUT
                        Input file or folder to compress. REQUIRED

optional arguments:
  -v VERSION, --version VERSION
                        Version of PAQ8PX to use. Example: 207. Default is 207
  -l LEVEL, --level LEVEL
                        Compression level and switches. Example: 9a to compress using level 9 and
                        with the 'Adaptive learning rate' switch. Default is 9
  -o OUTPUT, --output OUTPUT
                        Output file to use. If not used, the archive will be saved at the root of
                        the parent folder where the file/folder to compress is located. Do not
                        provide extension
  -t, --test            Optional flag to test the archive after compressing it. It is recommended
                        to use this option. Default is not to test
  -to, --test-only      Skip compression and just test the archive.
  -r, --remove          Deletes the filelist text file. Not recommended unless you plan not to
                        test the archive later. Default is not to remove
  -mt, --multithread    Compresses each file on a separate thread. This creates individual
                        archives with just one file
  -n, --nativecpu       Use the native CPU version. These versions usually ends with _nativecpu
                        and may provide performane improvements on your machine over the generic
                        version

Descargas

repositorio de paq8px_script en GitHub.

Ejemplo de salida del script

A continuación se muestra la salida del script cuando comprimí las imágenes de mi post sobre crear códigos QR en Linux:

python paq8px_script.py -i "/home/moisespr123/Pictures/Generating QR codes using qrencode on Linux" -o "/home/moisespr123/Pictures/Generating QR codes using qrencode on Linux/screenshots" -n -t -r
Listing files to compress and test
1 - Installing qrencode.png
2 - qrencode installed.png
3 - Creating a QR code and displaying on the screen.png
4 - QR code shown on screen with imagemagick's display tool.png
5 - Saving a QR code as a PNG image.png
6 - QR code saved.png
7 - Install imagemagick.png
Writing filelist.txt

Starting compression...

./paq8px_v207_nativecpu -9 "@/home/moisespr123/Pictures/Generating QR codes using qrencode on Linux/Generating QR codes using qrencode on Linux.txt" "/home/moisespr123/Pictures/Generating QR codes using qrencode on Linux/screenshots.paq8px207"
paq8px archiver v207 (c) 2022, Matt Mahoney et al.

Creating archive /home/moisespr123/Pictures/Generating QR codes using qrencode on Linux/screenshots.paq8px207 in multiple file mode with 7 files...
1/2 - Filename of listfile : 48 bytes
2/2 - Content of listfile  : 267 bytes
----- Compressed to        : 143 bytes

1/7 - Filename: /home/moisespr123/Pictures/Generating QR codes using qrencode on Linux/1 - Installing qrencode.png (18928 bytes)
Block segmentation:
 0           | default          |     18928 bytes [0 - 18927]
File input size       : 18928
File compressed size  : 17077

2/7 - Filename: /home/moisespr123/Pictures/Generating QR codes using qrencode on Linux/2 - qrencode installed.png (78253 bytes)
Block segmentation:
 0           | default          |     78253 bytes [0 - 78252]
File input size       : 78253
File compressed size  : 72124

3/7 - Filename: /home/moisespr123/Pictures/Generating QR codes using qrencode on Linux/3 - Creating a QR code and displaying on the screen.png (54622 bytes)
Block segmentation:
 0           | default          |     54622 bytes [0 - 54621]
File input size       : 54622
File compressed size  : 52977

4/7 - Filename: /home/moisespr123/Pictures/Generating QR codes using qrencode on Linux/4 - QR code shown on screen with imagemagick's display tool.png (21197 bytes)
Block segmentation:
 0           | default          |     21197 bytes [0 - 21196]
File input size       : 21197
File compressed size  : 18950

5/7 - Filename: /home/moisespr123/Pictures/Generating QR codes using qrencode on Linux/5 - Saving a QR code as a PNG image.png (21843 bytes)
Block segmentation:
 0           | default          |     21843 bytes [0 - 21842]
File input size       : 21843
File compressed size  : 19512

6/7 - Filename: /home/moisespr123/Pictures/Generating QR codes using qrencode on Linux/6 - QR code saved.png (25529 bytes)
Block segmentation:
 0           | default          |     25529 bytes [0 - 25528]
File input size       : 25529
File compressed size  : 22719

7/7 - Filename: /home/moisespr123/Pictures/Generating QR codes using qrencode on Linux/7 - Install imagemagick.png (36709 bytes)
Block segmentation:
 0           | default          |     36709 bytes [0 - 36708]
File input size       : 36709
File compressed size  : 33347
-----------------------
Total input size     : 257081
Total archive size   : 236858

Time 57.74 sec, used 4348 MB (4560025975 bytes) of memory

Verifying archive...

./paq8px_v207_nativecpu -t "/home/moisespr123/Pictures/Generating QR codes using qrencode on Linux/screenshots.paq8px207" "/home/moisespr123/Pictures/Generating QR codes using qrencode on Linux"
paq8px archiver v207 (c) 2022, Matt Mahoney et al.

Comparing /home/moisespr123/Pictures/Generating QR codes using qrencode on Linux/1 - Installing qrencode.png 18928 bytes -> identical
Comparing /home/moisespr123/Pictures/Generating QR codes using qrencode on Linux/2 - qrencode installed.png 78253 bytes -> identical
Comparing /home/moisespr123/Pictures/Generating QR codes using qrencode on Linux/3 - Creating a QR code and displaying on the screen.png 54622 bytes -> identical
Comparing /home/moisespr123/Pictures/Generating QR codes using qrencode on Linux/4 - QR code shown on screen with imagemagick's display tool.png 21197 bytes -> identical
Comparing /home/moisespr123/Pictures/Generating QR codes using qrencode on Linux/5 - Saving a QR code as a PNG image.png 21843 bytes -> identical
Comparing /home/moisespr123/Pictures/Generating QR codes using qrencode on Linux/6 - QR code saved.png 25529 bytes -> identical
Comparing /home/moisespr123/Pictures/Generating QR codes using qrencode on Linux/7 - Install imagemagick.png 36709 bytes -> identical
Time 56.33 sec, used 4348 MB (4560021823 bytes) of memory

Removing the filelist file

Compression and testing finished!