How to split an MP3 file into multiple tracks using specified start and end times?
Hôm nay có một bạn học viên hỏi cách cắt một file mp3 ra nhiều file khác nhau với track times cụ thể.
Yêu cầu này cũng thường gặp đối với nhiều người học tiếng Anh hoặc học bất cứ thứ gì từ file mp3, cần cắt ngắn file gốc ra nhiều file nhỏ theo từng bài học.
Vì lười kiếm phần mềm cắt thử rồi test tới lui các kiểu nên tôi viết nhanh đoạn code thực hiện việc này!
Dùng Python code như sau:
"""
pip install pydub
Built with ❤️ by Cuongitl
Happy coding! 🎶✨
"""
import os
import sys
from pydub import AudioSegment
# your MP3 file path
file_mp3 = "your-file.mp3"
# Check if the MP3 file path is valid
if not os.path.isfile(file_mp3):
print(f"The file '{file_mp3}' does not exist or is not a valid file.")
sys.exit(1)
# Load the MP3 file
audio_file = file_mp3
audio = AudioSegment.from_file(audio_file)
# Track start times in MM:SS format
track_times = [
"00:00", # Track 1
"00:52", # Track 2
"02:12", # Track 3
"03:15", # Track 4
"04:02", # Track 5
"05:17", # Track 6
"07:07", # Track 7
"09:52", # Track 8
"11:24", # Track 9
"13:13", # Track 10
"14:05", # Track 11
"15:40", # Track 12
"17:31", # Track 13
"19:49", # Track 14
"20:21", # Track 15
"22:12", # Track 16
"24:42", # Track 17
"27:24", # Track 18
"29:18", # Track 19
"30:41", # Track 20
"31:36", # Track 21
"33:19", # Track 22
"35:58", # Track 23
"37:27" # Track 24
]
# Function to convert MM:SS to milliseconds
def convert_to_milliseconds(time_str):
minutes, seconds = map(int, time_str.split(":"))
return (minutes * 60 + seconds) * 1000
# Convert track times to milliseconds
track_times_ms = [convert_to_milliseconds(t) for t in track_times]
# Get the directory of the source file
output_directory = os.path.dirname(audio_file)
# Create a list to hold the tracks
tracks = []
# Iterate through the track times and create segments
for i in range(len(track_times_ms)):
start_time = track_times_ms[i]
end_time = track_times_ms[i + 1] if i + 1 < len(track_times_ms) else len(audio) # Last track goes to the end
segment = audio[start_time:end_time]
tracks.append(segment)
# Export the tracks to separate MP3 files in the same directory as the source file
for index, track in enumerate(tracks):
# Format the track number with leading zeros
track_number = f"{index + 1:02d}" # Two-digit format
output_file = os.path.join(output_directory, f"track{track_number}.mp3")
track.export(output_file, format="mp3")
print(f"Done! track{track_number}.mp3")
print("Tracks have been cut and exported to the same directory as the source file.")
Rồi nha, tha hồ cắt các bài học English ra từng track với thời gian tương ứng theo ý muốn! :))
I'm a lazy guy!