aboutsummaryrefslogtreecommitdiffstats
path: root/src/util.py
blob: fd14e2e59466fea7cadaf3a310aed6ba06c52de9 (plain) (blame)
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
import os
import av
from kivy.utils import platform

def get_default_download_dir() -> str:
    if platform == "android":
        return "/sdcard/Download"
    else:
        from pathlib import Path
        return os.path.join(str(Path.home()), "Downloads")

# Chatgpt code (:
# I use av instead of ffmpeg so I can run it on android.
def convert_mp4_to_mp3(input_file: str, output_file: str) -> None:
    # Open the input video file
    with av.open(input_file) as container:
        # Find the audio stream
        audio_stream = next(
            (stream for stream in container.streams if stream.type == 'audio'),
            None
        )

        if audio_stream is None:
            raise ValueError("No audio stream found in the input file")

        # Open an output file for writing
        with av.open(output_file, 'w') as output_container:
            # Create an audio stream in the output container
            output_audio_stream = output_container.add_stream('mp3')

            # Iterate through frames, decode audio, and encode into the output stream
            for frame in container.decode(audio_stream):
                # Encode the frame into the output stream
                output_packet = output_audio_stream.encode(frame)

                # Write the encoded packet to the output file
                if output_packet:
                    output_container.mux(output_packet)