File size: 4,756 Bytes
fe9dbf9
6459994
 
 
fe9dbf9
 
 
6459994
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fe9dbf9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6459994
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
import os
import time
import uuid
import hashlib
import subprocess


def generate_uuid(user_ip, url):
    """
    Generates a uuid based on User IP, URL & timestamp
    """
    # Converting User IP to bytes and Hashing it using SHA-1
    user_ip_bytes = user_ip.encode('utf-8')
    hashed_user_ip = hashlib.sha1(user_ip_bytes).hexdigest()
    
    # Converting URL to bytes and Hashing it using SHA-1
    url_bytes = url.encode('utf-8')
    hashed_url = hashlib.sha1(url_bytes).hexdigest()

    # Combining Hashed User IP, URL and Current Timestamp to Create a Unique Identifier
    unique_id = f"{hashed_user_ip}-{hashed_url}-{int(time.time())}"

    # Generate a UUID from the Unique Identifier
    uuid_value = uuid.uuid5(uuid.NAMESPACE_URL, unique_id)
    return str(uuid_value)

def extract_audio(video_path):
    """
    Extract audio from a video file (MP4 or WebM) and save it as an MP3 file using ffmpeg.

    Args:
        video_path (str): Path to the input video file.

    Returns:
        str: Path of extracted audio.
    """
    try:
        # Path for Extracted Audio File
        filename, extension = os.path.splitext(video_path)
        audio_path = filename + '.mp3'

        # Choosing the Appropriate Codec for the Output Audio Format (MP3)
        audio_codec = "libmp3lame" if extension.lower() in (".mp4", ".webm") else "mp3"

        # Extracting Audio using FFMPEG Command
        command = ["ffmpeg", "-i", video_path, "-vn", "-acodec", 
                    audio_codec, audio_path, '-loglevel', 'quiet']
        subprocess.run(command, check=True)
        
        return audio_path
    
    except Exception as e:
        print(f"Error in extract_audio: {e}")

def burn_subtitles(video_file_path, subtitle_file_path):
    '''
    Burns the subtitles onto the video

    Args:
        video_file_path (str): Path to the input video file.
        subtitle_file_path (str): Path to the subtitle file.

    Returns:
        str: Path of output video with subtitles.
    '''
    try:
        # Getting Output File Path
        video_filename, video_extension = os.path.splitext(video_file_path)
        subtitle_filename, subtitle_extension = os.path.splitext(subtitle_file_path)
        output_file_path = video_filename + subtitle_extension.replace('.', '_') + video_extension

        # Burning the Subtitles onto Video using FFMPEG Command
        command = ['ffmpeg', '-i', video_file_path, 
                '-vf', f'subtitles={subtitle_file_path}',
                output_file_path, '-loglevel', 'quiet']
        subprocess.run(command, check=True)

        return output_file_path
        
    except Exception as e:
        print(f"Error in burn_subtitles: {e}")

def convert_to_srt_time_format(seconds):
    '''
    Converts seconds into .srt format
    '''
    try:
        hours = seconds // 3600
        seconds %= 3600
        minutes = seconds // 60
        seconds %= 60
        milliseconds = int((seconds - int(seconds)) * 1000)
        return f"{int(hours):02d}:{int(minutes):02d}:{int(seconds):02d},{milliseconds:03d}"
    
    except Exception as e:
        print(f"Error in save_translated_subtitles: {e}")

def save_translated_subtitles(subtitles, media_path):
    '''
    Saves the translated subtitles into .srt file
    '''
    try:
        # Converting to SRT Format
        srt_content = ""
        counter = 1
        for subtitle in subtitles:
            start_time = subtitle['start']
            end_time = subtitle['end']
            text = subtitle['text']
            
            srt_content += f"{counter}\n"
            srt_content += f"{convert_to_srt_time_format(start_time)} --> {convert_to_srt_time_format(end_time)}\n"
            srt_content += f"{text}\n\n"
            
            counter += 1
        
        # Saving SRT content to a .srt file
        subtitles_filename = os.path.splitext(media_path)[0]
        subtitles_filename = f'{subtitles_filename}.srt'
        with open(subtitles_filename, 'w', encoding='utf-8') as srt_file:
            srt_file.write(srt_content)

        return subtitles_filename
    
    except Exception as e:
        print(f"Error in save_translated_subtitles: {e}")

def convert_audio(input_file, audio_format, audio_quality):
    '''
    Converts the audio according to the given audio parameters
    '''
    try:
        # Getting Output File Path
        output_file = f"{input_file.rsplit('.', 1)[0]}_converted.{audio_format}"

        # Running the command using Subprocess
        command = [
            'ffmpeg', '-i', input_file,
            '-b:a', audio_quality[:-3], output_file, 
            '-loglevel', 'quiet'
        ]
        subprocess.run(command)
    
    except Exception as e:
        print(f"Error in convert_audio: {e}")