Automatisierung der Bildkonvertierung mit Python: Eine Einführung in das AVIF-Format

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.

  1. Verzeichnisvorbereitung: Das Skript stellt zunächst sicher, dass der Ausgabeordner existiert. Falls nicht, wird er erstellt.
  2. Dateiverarbeitung: Es durchläuft alle Dateien im Quellverzeichnis und wählt die aus, die mit gängigen Bildformaten wie .png, .jpg oder .jpeg enden.
  3. 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.
  4. 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.

🤞 1x pro Monat unsere News, Tipps und Tutorials gebündelt direkt in dein Postfach!

Wir senden keinen Spam! Erfahre mehr in unserer Datenschutzerklärung.


Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.