Probleme mit ffmpeg

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Armigator
User
Beiträge: 3
Registriert: Sonntag 15. Oktober 2023, 19:45

Hallo Leute,

habe heute mithilfe von chatGPT ein Programm geschrieben mit dem ich M4A Dateien in MP3 Dateien konvertieren kann.
Jedoch habe ich das Problem das mein Python nicht mein ffmpeg nicht findet obwohl es in meinem Systempfad ist.

C:\Users\Armin\PycharmProjects\Test\venv\Lib\site-packages\pydub\utils.py:170: RuntimeWarning: Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work
warn("Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work", RuntimeWarning)
Traceback (most recent call last):
File "C:\Users\Armin\PycharmProjects\Test\App.py", line 8, in <module>
subprocess.call([ffmpeg_path, '-version'])
File "C:\Users\Armin\AppData\Local\Programs\Python\Python312\Lib\subprocess.py", line 389, in call
with Popen(*popenargs, **kwargs) as p:
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Armin\AppData\Local\Programs\Python\Python312\Lib\subprocess.py", line 1026, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File "C:\Users\Armin\AppData\Local\Programs\Python\Python312\Lib\subprocess.py", line 1538, in _execute_child
hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
PermissionError: [WinError 5] Zugriff verweigert

dies wäre der genaue Fehlercode den ich bekomme.
Der Ordner in dem das ffmpeg ist hat vollzugriff und ich starte das Programm als Admin ich hoffe man kann mir hier helfen weil ChatGPT konnte es nicht.

Ich habe übrigens keinen Programmierhintergrund und keine Vorkenntnisse, dies ist das erste mal das ich etwas programmiere.

Vielen Dank für die Hilfe
Armigator
User
Beiträge: 3
Registriert: Sonntag 15. Oktober 2023, 19:45

Hier wäre der Code falls jemand Fragt

Code: Alles auswählen

import os
from PyQt5.QtWidgets import QMainWindow, QLabel, QPushButton, QFileDialog, QListWidget, QProgressBar, QVBoxLayout, QWidget, QApplication
from PyQt5.QtCore import QThread, pyqtSignal
from pydub import AudioSegment
import subprocess

ffmpeg_path = r"C:\Users\Armin\Desktop\Neuer Ordner\ffmpeg-6.0-essentials_build\bin"
subprocess.call([ffmpeg_path, '-version'])

class ConverterThread(QThread):
    update_signal = pyqtSignal(str)

    def __init__(self, input_files, output_folder):
        super().__init__()
        self.input_files = input_files
        self.output_folder = output_folder

    def run(self):
        for input_file in self.input_files:
            try:
                audio = AudioSegment.from_file(input_file, format="m4a")
                output_file = os.path.join(self.output_folder, os.path.basename(os.path.splitext(input_file)[0] + '.mp3'))
                audio.export(output_file, format="mp3")
                self.update_signal.emit(f"Erfolgreich von {input_file} zu {output_file} konvertiert.")
            except Exception as e:
                self.update_signal.emit(f"Fehler bei der Konvertierung: {e}")

class M4AtoMP3Converter(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("M4A to MP3 Converter")
        self.setGeometry(100, 100, 400, 400)

        self.central_widget = QWidget(self)
        self.setCentralWidget(self.central_widget)

        self.layout = QVBoxLayout()
        self.central_widget.setLayout(self.layout)

        self.label = QLabel("Wählen Sie M4A-Dateien aus, um sie in MP3 zu konvertieren.")
        self.layout.addWidget(self.label)

        self.progress_bar = QProgressBar()
        self.layout.addWidget(self.progress_bar)

        self.browse_button = QPushButton("Durchsuchen")
        self.layout.addWidget(self.browse_button)
        self.browse_button.clicked.connect(self.browse_files)

        self.output_folder = ""
        self.output_folder_button = QPushButton("Zielordner auswählen")
        self.layout.addWidget(self.output_folder_button)
        self.output_folder_button.clicked.connect(self.select_output_folder)

        self.output_folder_label = QLabel("Zielordner:")
        self.layout.addWidget(self.output_folder_label)

        self.file_list = QListWidget()
        self.layout.addWidget(self.file_list)

        self.convert_button = QPushButton("Konvertieren")
        self.layout.addWidget(self.convert_button)
        self.convert_button.clicked.connect(self.start_conversion)

        self.setAcceptDrops(True)
        self.input_files = []
        self.converter_thread = None

    def browse_files(self):
        file_dialog = QFileDialog()
        file_dialog.setFileMode(QFileDialog.ExistingFiles)
        file_dialog.setNameFilter("M4A-Dateien (*.m4a)")
        if file_dialog.exec_():
            self.input_files = file_dialog.selectedFiles()
            self.update_file_list()

    def select_output_folder(self):
        folder_dialog = QFileDialog()
        folder_dialog.setFileMode(QFileDialog.Directory)
        folder_dialog.setOption(QFileDialog.ShowDirsOnly)
        if folder_dialog.exec_():
            self.output_folder = folder_dialog.selectedFiles()[0]
            self.output_folder_label.setText(f"Zielordner: {self.output_folder}")

    def update_file_list(self):
        self.file_list.clear()
        for file in self.input_files:
            self.file_list.addItem(file)

    def start_conversion(self):
        if not self.input_files or not self.output_folder:
            return

        self.convert_button.setDisabled(True)  # Deaktivieren Sie den Konvertieren-Button während der Konvertierung.
        self.converter_thread = ConverterThread(self.input_files, self.output_folder)
        self.converter_thread.update_signal.connect(self.update_progress)
        self.converter_thread.finished.connect(self.enable_convert_button)
        self.converter_thread.start()

    def update_progress(self, message):
        self.label.setText(message)

    def enable_convert_button(self):
        self.convert_button.setDisabled(False)  # Aktivieren Sie den Konvertieren-Button nach Abschluss der Konvertierung.

if __name__ == "__main__":
    app = QApplication([])
    window = M4AtoMP3Converter()
    window.show()
    app.exec_()
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Der Pfad ist ja auch Quatsch. Das ist der Pfad in dem die ffmpeg.exe drin liegt. Den kann man nicht aufrufen. Man kann den bestenfalls zum Systempfad hinzufügen, dann sollte die Warnung weggehen. Und der subprocess Aufruf (wofür auch immer der gut sein soll) muss das ffmpeg.exe beinhalten.

Der Rest ist auch kaputt, es wird ein Signal aus einem Hintergrund-Thread zur Veränderung eine GUI genutzt. Das kracht ebenfalls, GUI-Elemente dürfen nur aus dem Main-Thread verändert werden. Und da schlummern sicher noch mehr Probleme.

Das ganze ist also - wie üblich bei ChatGPT - Murks, den man mit Kenntnissen hinbiegen kann. Wenn du die nicht hast, wird’s schwer.
Armigator
User
Beiträge: 3
Registriert: Sonntag 15. Oktober 2023, 19:45

Vielen dank fürs Feedback.
Habe eben die exe in den Pfad mit reingeschrieben und nochmals versucht das Programm zu starten und siehe einer an es funktioniert.
Nehme an das es an dem Neustart liegt, dass das ffmpeg jetzt auch von Python im Systempfad erkannt wird.
Ich weiß das ChatGPT nur murks schriebt und man das besser schreiben kann aber es tut was es tun muss.
Entschuldigung für die Unannehmlichkeiten die eure Augen bei dem schrecklichen code ertragen musste aber geht halt nicht anders ohne eigene Kenntnisse.
Vielen Dank nochmal.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1240
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Mir sind die Leute lieber, die kein ChatGPT nutzen und ganz normal Fragen stellen. ChatGPT nimmt einem nicht das Lesen der Dokumentation ab.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Benutzeravatar
snafu
User
Beiträge: 6868
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Tja, Pfusch am Bau gilt eben leider auch beim Programmieren. Es wird immer Leute geben, denen alles egal ist, so lange es "funktioniert". Da machste nix.
Antworten