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 und Qualität, was es zu einer attraktiven Wahl für Web- und Anwendungsdesigner macht. In diesem Blogbeitrag stellen wir ein Python-Skript vor, das den Prozess der 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 eine hohe Kompressionsrate und unterstützt gleichzeitig eine ausgezeichnete Bildqualität, sogar bei niedrigeren Bitraten. Dieses Format ist besonders nützlich für Webseiten, da es die Ladezeiten verbessert und die Bandbreitennutzung reduziert, ohne die visuelle Erfahrung zu beeinträchtigen.
Überblick über das Skript
Das vorgestellte Python-Skript verwendet die Bibliotheken os
und subprocess
, um Bilder in einem angegebenen Ordner zu finden und sie dann mit Hilfe von FFmpeg, einem leistungsstarken Multimedia-Framework, in das AVIF-Format zu konvertieren.
- Verzeichnisvorbereitung: Das Skript stellt zunächst sicher, dass der Ausgabeordner existiert. Falls nicht, wird er erstellt.
- Dateiverarbeitung: Es durchläuft alle Dateien im Quellverzeichnis und wählt die aus, die mit gängigen Bildformaten wie
.png
,.jpg
oder.jpeg
enden. - Konvertierung: Für jede gefundene Bilddatei wird FFmpeg aufgerufen, um die Datei ins AVIF-Format zu konvertieren. Hierbei werden verschiedene Parameter wie Codec (
libaom-av1
), Qualität (-crf
) und Einstellung (-preset
) verwendet. - Eingesparte Dateigröße: Nach der Konvertierung berechnet das Skript die prozentuale Reduzierung der Dateigröße und gibt diese aus.
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')): # Add more formats if needed
total_files += 1
# Full path for source and destination images
source_file = os.path.join(source_folder, filename)
output_file = os.path.join(output_folder, os.path.splitext(filename)[0] + '.avif')
# Get the size of the original file
original_size = os.path.getsize(source_file)
# Conversion command for ffmpeg
command = [
'ffmpeg',
'-i', source_file, # Source file
'-c:v', 'libaom-av1', # Video codec
'-crf', '30', # Quality setting
'-preset', 'slow', # Encoding setting
output_file # Output file
]
# Execute the command
try:
subprocess.run(command, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
converted_files += 1
# Get the size of the converted file
new_size = os.path.getsize(output_file)
# Calculate the reduction percentage
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 summary of conversion
print(f'Konvertierung abgeschlossen. {converted_files} von {total_files} Dateien wurden konvertiert.')
# Paths to your directories
source_folder = '<Quellordner>'
output_folder = '<Zielordner>'
convert_to_avif(source_folder, output_folder)
Stelle vor dem ausführen sicher das du die Quell-und Zielordner angepasst und die ffmpeg Bibliothek installiert hast. Ffmpeg findest Du bei bedarf hier.
Schreibe einen Kommentar