How to split an MP3 file into multiple tracks using specified start and end times

 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!


Viết nhận xét

Các bạn có thể viết lời nhận xét cho bài viết, nhưng cần tuân thủ một số quy tắc sau:

» Các nhận xét/bình luận phải nghiêm túc, không dung tục, không spam.
» Nội dung phải liên quan tới chủ đề bài viết.
» Viết bằng tiếng việt có dấu hoặc tiếng Anh. Nội dung viết không dấu sẽ bị xóa.
» Hãy để lại tên của bạn khi nhận xét/bình luận, để tôi có thể dễ dàng trả lời bạn khi cần.