I am a fresh programmer and I am learning the Python language. I have been trying to design a graphical application (using tkinter and ffmpeg-python libraries) that converts an image file along with audio into a video of audio length displaying the image. Unfortunately whenever I try run program I keep encountering errors
At first it was due to installing the ffmpeg library in pip package manager instead of ffmpeg-python. I uninstalled the previous one, installing the correct one making sure no other package causes problems. Using a short script like this, the library functioned smoothly:
'''
The Error causing Statement
import ffmpeg
(
ffmpeg.input("something.mp3")
.output("output.wav")
.run()
)
'''
# When I tried to use the ffmpeg library in a graphics program within a function, unfortunately I was not able to get it to work
import tkinter as tk
from tkinter import filedialog
from tkinter import ttk
def select_image():
file_path = filedialog.askopenfilename(title="Select a file", filetypes=[("image files","*.jpg;*.png;*.gif;*.jfif;")])
print("Selected file:", file_path)
def select_audio():
file_path = filedialog.askopenfilename(title="Select a file", filetypes=[("audio files","*.mp3;*.wav;*.ogg;*.flac;*.m4a;*.acc;")])
print("Selected file:", file_path)
def create_video(image_file, audio_file, output_format):
import ffmpeg
(
ffmpeg.input(image_file, loop=1)
.input(audio_file)
.output("output" + output_format)
.run()
)
def choose_directory():
directory_path = filedialog.askdirectory(title="Select directory")
print("Selected directory:", directory_path)
root = tk.Tk()
root.title("Audio To Video Converter")
root.geometry("500x700")
title = tk.Label(root, text="Audio To Video Converter", font=('Arial', 28))
title.pack(padx=20, pady=20)
selectImage_button = tk.Button(root, text="Select image", command=select_image, height=3, width=50)
selectImage_button.pack(pady=10, padx=20)
selectAudio_button = tk.Button(root, text="Select audio", command=select_audio, height=3, width=50)
selectAudio_button.pack(pady=10, padx=20)
label1 = tk.Label(root, text="Output video format", font=('Arial', 16))
label1.pack(padx=20, pady=10)
outputFormat = ttk.Combobox(root, width=55)
outputFormat['values'] = ('.avi', '.mkv', '.mp4', '.webm')
outputFormat['state'] = 'readonly'
outputFormat.pack(pady=5, padx=20)
label2 = tk.Label(root, text="Output directory", font=('Arial', 16))
label2.pack(padx=20, pady=10)
outputDirectory_button = tk.Button(root, text="Select directory", command=choose_directory, height=3, width=50)
outputDirectory_button.pack(pady=5, padx=60)
convert_button = tk.Button(root, text="Convert", height=3, width=50, command=create_video(selectImage_button, selectAudio_button, outputFormat['values'] ))
root.mainloop()
This is the only thing the console displayed after attempting to run
Traceback (most recent call last):
File "c:\Users\Admin\Documents\konwerter\konwerter.py", line 56, in <module>
convert_button = tk.Button(root, text="Convert", height=3, width=50, command=create_video(selectImage_button, selectAudio_button, outputFormat['values'] ))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "c:\Users\Admin\Documents\konwerter\konwerter.py", line 17, in create_video
.input(audio_file)
^^^^^
AttributeError: 'FilterableStream' object has no attribute 'input'
I did some research and did not find any information about this error except that it may be due to installing the wrong libraries. This is my list of installed libraries in pip package manager:
colored 2.2.4 customtkinter 5.2.2 darkdetect 0.8.0 ffmpeg-python 0.2.0 future 1.0.0 Gooey 1.0.8.1 packaging 24.1 pillow 10.4.0 pip 24.2 psutil 6.0.0 pyee 12.0.0 pygtrie 2.5.0 six 1.16.0 tkinterdnd2 0.4.2 typing_extensions 4.12.2 wxPython 4.2.2
Perhaps the solution to the problem is simple, but I am new and don't understand many things. I will be very grateful for your answer!
tk.Buttonincreate_video? Also you have this problem with your code. I also recommend that you read this Wikipedia article because right now the path for the selected image/audio are only being printed out and never stored in a variable accessable fromcreate_video.