سلام دوستان
من یه برنامه نوشتم برای تبدیل فایل های mp3 به mp4 با تعداد بالا (به همراه عکس) با استفاده از ffmpeg
برنامه خیلی خوب اجرا میشه و هیچ مشکلی نداره
ولی وقتی میخوام فایل اجرایی بسازم یه سری مشکلات پیش میاد
از pyinstaller استفاده میکنم
بعد از ساخت فایل اجرایی بازم مشکلی نیست ولی اون پنجرا کنسول خیلی تو چشمه و چون میخوام به مشتری تحویل بدم خیلی بده که تو چشم باشه
اومدم با '-w' به pyinstaller گفتم پنجره کنسولو نذاره ولی اینبار دیگه برنامه کار نمیکنه و هیچ فایلی تبدیل نمیشه .. کلا برنامه بهم میریزه البته همه جای برنامه درسته فقط وقتی میزنم تا mp4 بسازه و میره اون قسمت که ....

کد قسمتی که ffmpeg رو فراخوانی میکنه اینه

def _cli(self ,cls_wnd ,cmd):
errors = False
cmd_output=""

line=''
try:
p = subprocess.Popen(cmd ,stdout=subprocess.PIPE ,
stderr=subprocess.STDOUT ,
universal_newlines=True ,
shell=False ,
creationflags = subprocess.CREATE_NO_WINDOW)

for line in p.stdout:
if cls_wnd.bt02.cget('text').lower()!="cancel":
p.kill()
return cmd_output, True ,'cancel'
cmd_output+=line
if line.lower().find('duration:')>-1 or line.lower().find('frame=')<1:
cls_wnd.pbar_step(line.lower())
cls_wnd.root.update()

stdoutdata, stderrdata = p.communicate()
if p.wait() != 0:
p.kill()
return cmd_output, True ,line
p.kill()
return cmd_output, errors ,' '
except OSError as e:
p.kill()
return cmd_output,True,' exit from except '
return '',True,'exit from _cli end'


تو برنامه دو کلاس دارم یکیش ککنترل GUI رو به عهده داره یکی هم برای تبدیل mp4 که تو این تابع تو خط
cls_wnd.pbar_step(line.lower())

اومده با خوندن خروجی ffmpeg تو فرم اصلی progressbar رو تنظیم میکنه و مقدار میده تا کاربر ببینه کجای کاره

خود ffmpeg رو وقتی اجرا میکنیم یه پنجره کنسول باز میکنه ولی اونو با
creationflags = subprocess.CREATE_NO_WINDOW


بستم و دیده نمیشه که مشکلی هم نداره

ولی بستن کنسول خود فایل exe کلا این تابع رو بهم میزنه نمیدونم چیکار کنم موندمم توش
هر حالت و پارامتری رو تو pyinstaller امتحان کردم ولی جواب نداده