
Die Welt der digitalen Bilder entwickelt sich ständig weiter, und mit dem Aufkommen neuer Bildformate wie AVIF (AV1 Image File Format) stehen Nutzern und Entwicklern fortschrittlichere Optionen zur Verfügung. AVIF bietet eine beeindruckende Kompressionseffizienz bei gleichzeitig hoher Bildqualität und ist damit eine attraktive Wahl für Web- und Anwendungsdesign.
In diesem Beitrag wird ein Python-Skript vorgestellt, das die Konvertierung von Bildern in das AVIF-Format automatisiert.
Was ist das AVIF-Format?
AVIF ist ein modernes Bildformat, das auf dem AV1-Video-Codec basiert.
Es bietet:
- sehr hohe Kompressionsraten
- ausgezeichnete Bildqualität auch bei niedrigen Bitraten
- geringere Dateigrößen im Vergleich zu JPEG oder PNG
Besonders für Webseiten ist AVIF interessant, da Ladezeiten und Bandbreitennutzung reduziert werden, ohne sichtbare Qualitätseinbußen.
Überblick über das Skript
Das folgende Python-Skript verwendet die Standardbibliotheken os und subprocess, um:
- Bilder in einem Quellordner zu finden
- diese mithilfe von FFmpeg in das AVIF-Format zu konvertieren
- die Größenersparnis pro Datei auszugeben
Unterstützt werden standardmäßig PNG-, JPG- und JPEG-Dateien.
Python-Skript zur AVIF-Konvertierung
```python
import os
import subprocess
def convert_to_avif(source_folder, output_folder):
# Ensure the output folder exists
if not os.path.exists(output_folder):
os.makedirs(output_folder)
total_files = 0
converted_files = 0
# Iterate through all files in the source directory
for filename in os.listdir(source_folder):
if filename.lower().endswith(('.png', '.jpg', '.jpeg')):
total_files += 1
source_file = os.path.join(source_folder, filename)
output_file = os.path.join(
output_folder,
os.path.splitext(filename)[0] + '.avif'
)
original_size = os.path.getsize(source_file)
command = [
'ffmpeg',
'-i', source_file,
'-c:v', 'libaom-av1',
'-crf', '30',
'-preset', 'slow',
output_file
]
try:
subprocess.run(
command,
check=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
converted_files += 1
new_size = os.path.getsize(output_file)
reduction_percent = 100 * (1 - (new_size / original_size))
print(f"{filename}: Reduzierung um {reduction_percent:.2f}%.")
except subprocess.CalledProcessError as e:
print(f"Fehler bei der Konvertierung: {source_file} – {e}")
print(
f"Konvertierung abgeschlossen. "
f"{converted_files} von {total_files} Dateien wurden konvertiert."
)
Pfade anpassen
source_folder = ""
output_folder = ""
convert_to_avif(source_folder, output_folder)
````
Hinweise vor dem Ausführen
- Passe Quell- und Zielordner im Skript an
- Stelle sicher, dass FFmpeg installiert ist
- FFmpeg kann bei Bedarf von der offiziellen Webseite bezogen werden
Nach der Ausführung werden alle unterstützten Bilder automatisch konvertiert und die jeweilige Größenreduktion ausgegeben.
Kommentare