pull/1873/head
KyleBoyer 2 years ago
parent cba1c6c0e0
commit 00d0339714

@ -10,10 +10,12 @@ WORKDIR /app
ADD requirements.txt /app/requirements.txt ADD requirements.txt /app/requirements.txt
RUN pip install -r requirements.txt RUN pip install -r requirements.txt
RUN python3 -m spacy download en_core_web_sm RUN python3 -m spacy download en_core_web_sm
ADD . /app
# tricks for pytube : https://github.com/elebumm/RedditVideoMakerBot/issues/142 # tricks for pytube : https://github.com/elebumm/RedditVideoMakerBot/issues/142
# (NOTE : This is no longer useful since pytube was removed from the dependencies) # (NOTE : This is no longer useful since pytube was removed from the dependencies)
# RUN sed -i 's/re.compile(r"^\\w+\\W")/re.compile(r"^\\$*\\w+\\W")/' /usr/local/lib/python3.8/dist-packages/pytube/cipher.py # RUN sed -i 's/re.compile(r"^\\w+\\W")/re.compile(r"^\\$*\\w+\\W")/' /usr/local/lib/python3.8/dist-packages/pytube/cipher.py
RUN echo ZmluZCAvIC1wYXRoICcqL21vdmllcHkvdG9vbHMucHknIC1wcmludDAgfCB3aGlsZSByZWFkIC1kICQnXDAnIGZpbGU7IGRvCiAgc2VkIC1pIC1lICdzLyciJyInTW92aWVweSAtIFJ1bm5pbmc6XFxuPj4+ICIrICIgIi5qb2luKGNtZCknIiciJy8iTW92aWVweSAtIFJ1bm5pbmc6XFxuPj4+ICIgKyAiICIuam9pbihjbWQpL2cnICIkZmlsZSIKZG9uZQ== | base64 --decode | bash RUN echo ZmluZCAvIC1wYXRoICcqL21vdmllcHkvdG9vbHMucHknIC1wcmludDAgfCB3aGlsZSByZWFkIC1kICQnXDAnIGZpbGU7IGRvCiAgc2VkIC1pIC1lICdzLyciJyInTW92aWVweSAtIFJ1bm5pbmc6XFxuPj4+ICIrICIgIi5qb2luKGNtZCknIiciJy8iTW92aWVweSAtIFJ1bm5pbmc6XFxuPj4+ICIgKyAiICIuam9pbihjbWQpL2cnICIkZmlsZSIKZG9uZQ== | base64 --decode | bash
ADD . /app
CMD ["python3", "main.py"] CMD ["python3", "main.py"]

@ -1,56 +1,57 @@
import ffmpeg import ffmpeg
from pydub import AudioSegment from pydub import AudioSegment
# from moviepy.editor import VideoFileClip, AudioFileClip from moviepy.editor import VideoFileClip, AudioFileClip
# from tqdm import tqdm # from tqdm import tqdm
from rich.progress import Progress, BarColumn, TextColumn, TaskProgressColumn, TimeRemainingColumn from rich.progress import Progress, BarColumn, TextColumn, TaskProgressColumn, TimeRemainingColumn
from utils.ffmpeg_progress import ProgressFfmpeg from utils.ffmpeg_progress import ProgressFfmpeg
def get_duration(filename): def get_duration(filename, skip_accurate_decode=False):
# ffmpeg_cmd = ffmpeg.input(filename).output('/dev/null', f="null", progress='/dev/stdout') if not skip_accurate_decode:
# ffmpeg_stdout, ffmpeg_stderr = ffmpeg_cmd.run(capture_stdout=True, capture_stderr=True) ffmpeg_cmd = ffmpeg.input(filename).output('/dev/null', f="null", progress='/dev/stdout')
# stdout=ffmpeg_stdout.decode('UTF-8') ffmpeg_stdout, ffmpeg_stderr = ffmpeg_cmd.run(capture_stdout=True, capture_stderr=True)
# stdout_lines=stdout.splitlines() stdout=ffmpeg_stdout.decode('UTF-8')
# for line in reversed(stdout_lines): stdout_lines=stdout.splitlines()
# if "out_time_ms" in line: for line in reversed(stdout_lines):
# out_time_ms_str = line.split("=")[1].strip() if "out_time_ms" in line:
# if out_time_ms_str.isnumeric(): out_time_ms_str = line.split("=")[1].strip()
# duration=float(out_time_ms_str) / 1000000.0 if out_time_ms_str.isnumeric():
# # print(f"Returning duration {duration} from ffmpeg null muxer out_time_ms for {filename}...") duration=float(out_time_ms_str) / 1000000.0
# return duration # print(f"Returning duration {duration} from ffmpeg null muxer out_time_ms for {filename}...")
# stderr=ffmpeg_stderr.decode('UTF-8') return duration
# stderr_lines=stderr.splitlines() stderr=ffmpeg_stderr.decode('UTF-8')
# stream_durations=[] stderr_lines=stderr.splitlines()
# for line in reversed(stderr_lines): stream_durations=[]
# if "Duration:" in line: for line in reversed(stderr_lines):
# timestamp = line.split("Duration:")[1].strip().split(',')[0].strip() if "Duration:" in line:
# h, m, s_ms = timestamp.split(':') timestamp = line.split("Duration:")[1].strip().split(',')[0].strip()
# s, ms = s_ms.split('.') h, m, s_ms = timestamp.split(':')
# stream_durations.append(int(h) * 3600 + int(m) * 60 + int(s) + float(f".{ms}")) s, ms = s_ms.split('.')
# if len(stream_durations) > 0: stream_durations.append(int(h) * 3600 + int(m) * 60 + int(s) + float(f".{ms}"))
# duration=max(stream_durations) # sum? if len(stream_durations) > 0:
# # print(f"Returning duration {duration} from ffmpeg null muxer stream duration for {filename}...") duration=max(stream_durations) # sum?
# return duration # print(f"Returning duration {duration} from ffmpeg null muxer stream duration for {filename}...")
# if filename.lower().endswith('.mp3'): return duration
# try: if filename.lower().endswith('.mp3'):
# duration=float(AudioSegment.from_mp3(filename).duration_seconds) try:
# # print(f"Returning duration {duration} from AudioSegment for {filename}...") duration=float(AudioSegment.from_mp3(filename).duration_seconds)
# return duration # print(f"Returning duration {duration} from AudioSegment for {filename}...")
# except: return duration
# pass except:
# try: pass
# duration=float(AudioFileClip(filename).duration) try:
# # print(f"Returning duration {duration} from AudioFileClip for {filename}...") duration=float(AudioFileClip(filename).duration)
# return duration # print(f"Returning duration {duration} from AudioFileClip for {filename}...")
# except: return duration
# pass except:
# if filename.lower().endswith('.mp4'): pass
# try: if filename.lower().endswith('.mp4'):
# duration=float(VideoFileClip(filename).duration) try:
# # print(f"Returning duration {duration} from VideoFileClip for {filename}...") duration=float(VideoFileClip(filename).duration)
# return duration # print(f"Returning duration {duration} from VideoFileClip for {filename}...")
# except: return duration
# pass except:
pass
probe_info=ffmpeg.probe(filename) probe_info=ffmpeg.probe(filename)
duration=float(probe_info["format"]["duration"]) duration=float(probe_info["format"]["duration"])
# print(f"Returning duration {duration} from ffprobe for {filename}...") # print(f"Returning duration {duration} from ffprobe for {filename}...")

@ -166,13 +166,11 @@ def chop_background(background_config: Dict[str, Tuple], video_length: int, redd
# background_audio.write_audiofile(f"assets/temp/{id}/background.mp3") # background_audio.write_audiofile(f"assets/temp/{id}/background.mp3")
# background_audio.close() # background_audio.close()
ffmpeg_progress_run( ffmpeg_progress_run(
ffmpeg.input(audio_file_path).output( ffmpeg.input(audio_file_path, ss=("%0.2f" % start_time_audio), t=("%0.2f" % (end_time_audio-start_time_audio))).output(
f"assets/temp/{id}/background.mp3", f"assets/temp/{id}/background.mp3",
# acodec="copy", # acodec="copy",
# acodec="libmp3lame", # acodec="libmp3lame",
map="0", map="0",
ss=start_time_audio,
to=end_time_audio
).overwrite_output(), ).overwrite_output(),
end_time_audio-start_time_audio, end_time_audio-start_time_audio,
"✂️ Chopping background audio..." "✂️ Chopping background audio..."

Loading…
Cancel
Save