Rockali commited on
Commit
60ffa21
·
verified ·
1 Parent(s): 48f1f3b

Update app.py from anycoder

Browse files
Files changed (1) hide show
  1. app.py +34 -21
app.py CHANGED
@@ -34,7 +34,7 @@ def create_smooth_transition(clip1, clip2, transition_type, duration=0.5):
34
  elif transition_type == "حل شدن (Dissolve)":
35
  # Cross dissolve effect
36
  dissolve_duration = min(duration, clip1.duration * 0.3, clip2.duration * 0.3)
37
- return clip1.crossfadein(dissolve_duration)
38
  elif transition_type == "انتقال سفید (White Flash)":
39
  flash_duration = min(0.3, clip1.duration * 0.2, clip2.duration * 0.2)
40
  return clip1.crossfadein(flash_duration)
@@ -133,16 +133,7 @@ def merge_videos(
133
  start_trim = 0
134
  end_trim = clip.duration
135
 
136
- # اگر ویدیو اول نباشد، صدای انتهای ویدیو قبلی را بررسی کنید
137
- if i > 0 and len(trimmed_clips) > 0:
138
- last_clip = trimmed_clips[-1]
139
- # بررسی اینکه آیا انتهای ویدیو قبلی سکوت است
140
- if hasattr(last_clip, 'audio') and last_clip.audio:
141
- # حفظ ویدیو بدون تغییر
142
- pass
143
-
144
  if end_trim > start_trim:
145
- # ✅ تصحیح: از subclipped به جای subclip استفاده شود (moviepy نسخه جدید)
146
  trimmed_clip = clip.subclipped(start_trim, end_trim)
147
  trimmed_clips.append(trimmed_clip)
148
  else:
@@ -164,11 +155,9 @@ def merge_videos(
164
  # کوتاه کردن انتهای clip1 و ابتدای clip2 برای حذف فاصله
165
  if remove_gaps:
166
  # حذف 0.1 ثانیه از انتهای clip1
167
- # ✅ تصحیح: از subclipped به جای subclip استفاده شود
168
  if clip1.duration > 0.2:
169
  clip1 = clip1.subclipped(0, clip1.duration - 0.1)
170
  # حذف 0.1 ثانیه از ابتدای clip2
171
- # ✅ تصحیح: از subclipped به جای subclip استفاده شود
172
  if clip2.duration > 0.2:
173
  clip2 = clip2.subclipped(0.1, clip2.duration)
174
 
@@ -194,15 +183,39 @@ def merge_videos(
194
  else:
195
  bitrate = "8M" # پیش‌فرض
196
 
197
- final_clip.write_videofile(
198
- output_path,
199
- codec='libx264',
200
- audio_codec='aac',
201
- bitrate=bitrate,
202
- fps=target_fps,
203
- verbose=False,
204
- logger=None
205
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
206
 
207
  # محاسبه آمار
208
  original_duration = sum(clip.duration for clip in clips)
 
34
  elif transition_type == "حل شدن (Dissolve)":
35
  # Cross dissolve effect
36
  dissolve_duration = min(duration, clip1.duration * 0.3, clip2.duration * 0.3)
37
+ return clip1.crossfadein(dolve_duration)
38
  elif transition_type == "انتقال سفید (White Flash)":
39
  flash_duration = min(0.3, clip1.duration * 0.2, clip2.duration * 0.2)
40
  return clip1.crossfadein(flash_duration)
 
133
  start_trim = 0
134
  end_trim = clip.duration
135
 
 
 
 
 
 
 
 
 
136
  if end_trim > start_trim:
 
137
  trimmed_clip = clip.subclipped(start_trim, end_trim)
138
  trimmed_clips.append(trimmed_clip)
139
  else:
 
155
  # کوتاه کردن انتهای clip1 و ابتدای clip2 برای حذف فاصله
156
  if remove_gaps:
157
  # حذف 0.1 ثانیه از انتهای clip1
 
158
  if clip1.duration > 0.2:
159
  clip1 = clip1.subclipped(0, clip1.duration - 0.1)
160
  # حذف 0.1 ثانیه از ابتدای clip2
 
161
  if clip2.duration > 0.2:
162
  clip2 = clip2.subclipped(0.1, clip2.duration)
163
 
 
183
  else:
184
  bitrate = "8M" # پیش‌فرض
185
 
186
+ # ✅ اصلاح: حذف پارامتر verbose و logger (در MoviePy نسخه جدید پشتیبانی نمی‌شود)
187
+ # همچنین audio_codec به audio_fps تغییر کرده در نسخه‌های جدید
188
+ try:
189
+ # روش اول: MoviePy v2.x (جدید)
190
+ final_clip.write_videofile(
191
+ output_path,
192
+ codec='libx264',
193
+ bitrate=bitrate,
194
+ fps=target_fps,
195
+ audio=True,
196
+ audio_codec='aac',
197
+ )
198
+ except TypeError:
199
+ # روش دوم: MoviePy v1.x (قدیمی‌تر)
200
+ try:
201
+ final_clip.write_videofile(
202
+ output_path,
203
+ codec='libx264',
204
+ audio_codec='aac',
205
+ bitrate=bitrate,
206
+ fps=target_fps,
207
+ )
208
+ except TypeError as e:
209
+ if "audio_codec" in str(e):
210
+ # اگر audio_codec پشتیبانی نمی‌شود
211
+ final_clip.write_videofile(
212
+ output_path,
213
+ codec='libx264',
214
+ bitrate=bitrate,
215
+ fps=target_fps,
216
+ )
217
+ else:
218
+ raise e
219
 
220
  # محاسبه آمار
221
  original_duration = sum(clip.duration for clip in clips)