def run_ffmpeg(progress_filename, uploaded_file_path, params, output_name): # If running locally, change this to the correct path. ffmpeg_path = '/home/h/bin/ffmpeg' progress_file_path = os.path.join('ffmpeg-progress', progress_filename) log.info(f'Conversion progress will be saved to: {progress_file_path}') # Split params into a list as I want to use subprocess.run() with an array of arguments. params = params.split(' ') params.append(output_name) log.info(params) log.info(f'Converting {uploaded_file_path}...') start_time = time() try: subprocess.run([ ffmpeg_path, '-hide_banner', '-progress', progress_file_path, '-y', '-i', uploaded_file_path, '-metadata', 'comment=Transcoded using free-av-tools.com', '-metadata', 'encoded_by=free-av-tools.com', '-id3v2_version', '3', '-write_id3v1', 'true' ] + params) end_time = time() time_taken = round((end_time - start_time), 2) log.info(f'File converted. Conversion took {time_taken} seconds.') except Exception as error: log.error(f'Unable to convert file: \n{error}')
def return_world_record(): current_datetime = (datetime.now() + timedelta(hours=1)).strftime('%d-%m-%y at %H:%M:%S') user = request.environ.get("HTTP_X_REAL_IP").split(',')[0] user_agent = request.headers.get('User-Agent') score = request.form['score'] times_missed = request.form['times_missed'] canvas_width = request.form['canvas_width'] canvas_height = request.form['canvas_height'] try: int(score) int(times_missed) int(canvas_width) int(canvas_width) except ValueError: log.error("GAME 1: The user changed something to a non-int.") else: with open("Game Scores/HighScores.txt", "a") as f: f.write( f'{score} | {times_missed} | {user} | {user_agent} | {canvas_width}' f'x{canvas_height} | {current_datetime}\n') finally: just_scores = [] with open('Game Scores/HighScores.txt', 'r') as f: lines = f.readlines() for line in lines: just_scores.append(line.split('|')[0].strip()) valid_scores = [x for x in just_scores if int(x) < 100] world_record = max(valid_scores, key=lambda x: int(x)) return world_record
def trim_file(): if request.form["request_type"] == "upload_complete": chosen_file = request.files["chosen_file"] # Make the filename safe filename_secure = secure_filename(chosen_file.filename) # Save the uploaded file to the uploads folder. chosen_file.save(os.path.join("uploads", filename_secure)) return '' if request.form["request_type"] == "trim": filename = request.form["filename"] log_this(f'wants to trim: {filename}') uploaded_file_path = os.path.join("uploads", secure_filename(filename)) start_time = request.form["start_time"] log.info(f'START TIME: {start_time}') end_time = request.form["end_time"] log.info(f'END TIME: {end_time}') ext = "." + filename.split(".")[-1] just_name = filename.split(".")[0] output_name = just_name + " [trimmed]" + ext output_file_path = os.path.join('trims', output_name) try: subprocess.run([ 'ffmpeg', '-y', '-i', uploaded_file_path, '-ss', start_time, '-to', end_time, '-map', '0', '-c', 'copy', output_file_path ], shell=False) except Exception as error: log.error(f'Unable to trim file: \n{error}') return output_file_path
def return_world_record(): current_datetime = datetime.now().strftime('%d-%m-%y at %H:%M:%S') user = request.environ.get("HTTP_X_REAL_IP").split(',')[0] user_agent = request.headers.get('User-Agent') score = request.form['score'] times_missed = request.form['times_missed'] canvas_width = request.form['canvas_width'] canvas_height = request.form['canvas_height'] try: int(score) int(times_missed) int(canvas_width) int(canvas_height) except ValueError: log.error("[Game 1] The user changed something to a non-int.") else: os.makedirs('GameScores', exist_ok=True) with open("GameScores/HighScores.txt", "a") as f: f.write( f'{score} | {times_missed} | {user} | {user_agent} | {canvas_width}' f'x{canvas_height} | {current_datetime}\n') finally: just_scores = [] with open('GameScores/HighScores.txt', 'r') as f: lines = f.readlines() for line in lines: just_scores.append(line.split('|')[0].strip()) return ''
def download_file(filename): log.info(f'https://free-av-tools.com/trims/{filename}') mimetype_value = 'audio/mp4' if os.path.splitext(filename)[1] == ".m4a" else '' try: return send_from_directory('trims', filename, mimetype=mimetype_value, as_attachment=True) except Exception as error: log.error(f'Unable to send file. Error: \n{error}')
def send_file(filename): time_now = datetime.now().strftime('%H:%M:%S') log.info(f'[{time_now}] https://free-av-tools.com/downloads/{filename}') mimetype_value = 'audio/mp4' if os.path.splitext(filename)[1] == ".m4a" else '' try: return send_from_directory(download_dir, filename, mimetype=mimetype_value, as_attachment=True) except Exception as error: log.error(f'Unable to send file. Error: \n{error}')
def sum(self, var): i = self.axes()[var] info = self.infoCopy() if var not in self.variables(): log.error('Summing out variable %s that hasn\'t been multiplied in!', var) else: info[-1]['variables'] = info[-1]['variables'].replace(var, '') info.pop(i) return Factor(super(Factor, self).sum(axis=(i,)), info=info)
def sum(self, var): i = self.axes()[var] info = self.infoCopy() if var not in self.variables(): log.error( 'Summing out variable %s that hasn\'t been multiplied in!', var) else: info[-1]['variables'] = info[-1]['variables'].replace(var, '') info.pop(i) return Factor(super(Factor, self).sum(axis=(i, )), info=info)
def send_file(filename): log.info(f'https://freeaudioconverter.net/conversions/{filename}') mimetype_value = 'audio/mp4' if os.path.splitext( filename)[1] == ".m4a" else '' try: return send_from_directory('conversions', filename, mimetype=mimetype_value, as_attachment=True) except Exception as error: log.error(f'Unable to send file. Error: \n{error}')
def run_youtube_dl(video_link, options): with YoutubeDL(options) as ydl: info = ydl.extract_info(video_link, download=False) session['filename_stem'] = Path(ydl.prepare_filename(info)).stem try: ydl.download([video_link]) except Exception as error: log.error(f'Error downloading {session["filename_stem"]}:\n{str(error)}') session['youtube_dl_error'] = str(error) else: log_downloads_per_day()
def run_youtube_dl(download_type, args): download_start_time = time() try: # Using subprocess.run() this way allows the stdout to be written to a file. with open(session['progress_file_path'], 'w') as f: subprocess.run(args, stdout=f) except Exception as error: log.error(f'Unable to download video: \n{error}') download_complete_time = time() log.info( f'{download_type} was chosen. Download took: {round((download_complete_time - download_start_time), 1)}s' )
def run_youtube_dl(video_link, options): is_downloading = True download_start_time = time() try: with YoutubeDL(options) as ydl: ydl.download(video_link) except Exception as error: log.error(f'Error downloading file:\n{error}') session['youtube_dl_error'] = str(error) else: download_complete_time = time() log.info(f'Download took {round((download_complete_time - download_start_time), 1)}s') log_downloads_per_day() finally: is_downloading = False
def send_file(filename): log.info( f'[{datetime.now().strftime("[%H:%M:%S]")}] https://free-av-tools.com/downloads/{filename}' ) mimetype_value = 'audio/mp4' if os.path.splitext( filename)[1] == ".m4a" else '' try: return send_from_directory(download_dir, filename, mimetype=mimetype_value, as_attachment=True) except Exception as error: log.error(f'Unable to send downloads/{filename}. Error: \n{error}') finally: os.remove(f'downloads/{session["new_filename"]}')
def run_youtube_dl(video_link, options): try: with YoutubeDL(options) as ydl: info = ydl.extract_info(video_link, download=False) global filename # Remove the file extension and the 'downloads/' at the start. filename = os.path.splitext(ydl.prepare_filename(info))[0][10:] download_start_time = time() ydl.download([video_link]) except Exception as error: log.error(f'Error downloading file:\n{error}') session['youtube_dl_error'] = str(error) else: download_complete_time = time() log.info( f'Download took {round((download_complete_time - download_start_time), 1)}s' ) log_downloads_per_day()
def save_game2_stats(): current_datetime = datetime.now().strftime('%d-%m-%y at %H:%M:%S') user = request.environ.get("HTTP_X_REAL_IP").split(',')[0] user_agent = request.headers.get('User-Agent') reaction_time = request.form['reaction_time'] try: int(reaction_time) except ValueError: log.error("[Game 2] The user changed reaction_time to a non-int.") else: os.makedirs('GameScores', exist_ok=True) with open("GameScores/ReactionTimes.txt", "a") as f: f.write(f'{reaction_time} ms | {user} | {user_agent} | {current_datetime}\n') finally: reaction_times = [] with open('GameScores/ReactionTimes.txt', 'r') as f: lines = f.readlines() for line in lines: reaction_times.append(line.split('|')[0][:-3].strip()) return ''
def save_game2_stats(): current_datetime = (datetime.now() + timedelta(hours=1)).strftime('%d-%m-%y at %H:%M:%S') user = request.environ.get("HTTP_X_REAL_IP").split(',')[0] user_agent = request.headers.get('User-Agent') reaction_time = request.form['reaction_time'] try: int(reaction_time) except ValueError: log.error("GAME 2: The user changed reaction_time to a non-int.") else: with open("Game Scores/ReactionTimes.txt", "a") as f: f.write(f'{reaction_time} ms | {user} | {user_agent} | {current_datetime}\n') finally: reaction_times = [] with open('Game Scores/ReactionTimes.txt', 'r') as f: lines = f.readlines() for line in lines: reaction_times.append(line.split('|')[0][:-3].strip()) # reaction_record = min(reaction_times, key=lambda x: int(x)) return ''
def trim_file(): if request.form["request_type"] == "upload_complete": uploaded_file = request.files["chosen_file"] # Make the filename safe filename_secure = secure_filename(uploaded_file.filename) # Save the uploaded file to the trims folder. uploaded_file.save(os.path.join('uploads', filename_secure)) # Empty the trims folder to ensure that there will be enough storage space for the trimmed file. if os.path.exists('trims'): for file in os.listdir('trims'): os.remove(os.path.join('trims', file)) log.info(f'Deleted trims/{file}') return '' if request.form["request_type"] == "trim": filename = request.form["filename"] log_this(f'wants to trim: {filename}') uploaded_file_path = os.path.join("uploads", secure_filename(filename)) start_time = request.form["start_time"] log.info(f'Start: {start_time}') end_time = request.form["end_time"] log.info(f'End: {end_time}') just_name = os.path.splitext(filename)[0] extension = os.path.splitext(filename)[1] output_name = f'{just_name} [trimmed]{extension}' output_file_path = os.path.join('trims', output_name) try: subprocess.run([ 'ffmpeg', '-y', '-i', uploaded_file_path, '-ss', start_time, '-to', end_time, '-map', '0', '-c', 'copy', output_file_path ]) except Exception as error: log.error(f'Unable to trim file: \n{error}') return output_file_path