지난 포스팅에서 FFmpeg 설치를 하고 mp3 파일을 합치는 법을 설명했는데요. 여러 개의 MP3 파일을 하나로 합치면서 특정 지점을 구분해야 할 때가 있습니다. 요즘은 유튜브에 음악 영상을 올릴 때도 하나의 파일로 올리지만 타임라인을 구분하는 경우가 많습니다. 예를 들면 팟캐스트로 에피소드별 타임라인 추가하거나 합친 음악의 트랙 구분을 하는 경우 많이죠. 오늘은 Python과 FFmpeg를 사용하여 MP3 파일을 하나로 합치면서 타임라인을 자동 생성하는 방법을 소개합니다.


2. 필요한 도구
이 작업을 위해 다음 도구가 필요합니다.
- FFmpeg: 오디오/비디오 처리 라이브러리
- Python: 스크립트 작성
- pyperclip: 타임라인을 클립보드로 복사
2.1. FFmpeg 설치
FFmpeg는 공식 사이트에서 다운로드할 수 있습니다. 설치 후, 터미널에서 정상 작동하는지 확인하세요.
자세한 내용은 이전 포스팅에 자세하게 설명해놓았습니다.
3. Python 코드 설명
3.1. 폴더 내 MP3 파일 리스트 가져오기
import os
import subprocess
import pyperclip # 클립보드 복사 라이브러리
# MP3 파일이 들어 있는 폴더
mp3_folder = r"C:/~ 저장할 경로"
# MP3 파일 리스트 가져오기
mp3_files = [f for f in os.listdir(mp3_folder) if f.endswith('.mp3')]
os.listdir()
을 사용해 지정한 폴더(저장할 경오) 내 .mp3
파일들을 가져옵니다.
3.2. file_list.txt
생성 ( FFmpeg 리스트 파일)
file_list_path = os.path.join(mp3_folder, "file_list.txt")
FFmpeg는 파일을 합칠 때 리스트 파일을 사용해야 합니다.
3.3. FFmpeg MP3 파일 길이 확인 및 타임라인 생성
current_time = 0 # 시작 시간 초기화
with open(file_list_path, "w", encoding="utf-8") as f:
timeline = [] # 유튜브 타임라인 저장 리스트
for file in mp3_files:
file_name = file.replace("(1)", "part2").replace(".mp3", "") # 파일명 변경
file_path = os.path.join(mp3_folder, file).replace("\\", "/") # 경로 변경
# FFmpeg의 ffprobe로 파일 길이 확인
command = [
'ffprobe', '-v', 'error', '-show_entries', 'format=duration',
'-of', 'default=noprint_wrappers=1:nokey=1', file_path
]
result = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
duration = float(result.stdout.strip())
# 시작 시간을 HH:MM:SS로 변환
minutes, seconds = divmod(current_time, 60)
hours, minutes = divmod(minutes, 60)
start_time = f"{int(hours):02}:{int(minutes):02}:{int(seconds):02}"
# 타임라인 추가
timeline.append(f"{start_time} {file_name}")
f.write(f"file '{file_path}'\n") # FFmpeg용 파일 리스트 기록
current_time += duration # 다음 파일 시작 시간 갱신
ffprobe
를 사용해 MP3 파일의 길이를 가져옵니다.- 시작 시간을
HH:MM:SS
형식으로 변환 후 리스트에 추가합니다. file_list.txt
에 FFmpeg가 사용할 형식으로 파일 경로를 기록합니다.
3.4. 타임라인 클립보드 복사
timeline_text = "\n".join(timeline)
pyperclip.copy(timeline_text)
📌 설명:
유튜브 등에서 사용할 수 있도록 타임라인을 클립보드에 복사합니다.
3.5. FFmpeg로 MP3 파일 합치기
output_file = os.path.join(mp3_folder, "merged_audio.mp3")
subprocess.run(['ffmpeg', '-f', 'concat', '-safe', '0', '-i', file_list_path, '-c', 'copy', output_file])
print(f"파일 합치기 완료: {output_file}")
print("\n===== 유튜브 타임라인 복사 완료! =====")
print(timeline_text)
ffmpeg -f concat -safe 0 -i file_list.txt -c copy merged_audio.mp3
명령어를 실행해 MP3 파일을 합칩니다.print()
로 결과를 출력합니다.
4. 실행 결과
실행 후 터미널에서 다음과 같은 메시지가 출력됩니다.
===== 유튜브 타임라인 복사 완료! =====
00:00:00 파일1
00:03:45 파일2
00:07:20 파일3
...
그리고 타임라인이 자동으로 클립보드에 복사되므로 유튜브나 문서에 바로 붙여넣을 수 있습니다.
5. 마무리
오늘은 MP3 파일을 자동으로 합치고, 타임라인을 생성하고 간편하게 복사 붙여넣기 하는 작업을 만들어 보았습니다.
- FFmpeg를 활용하면 오디오 편집을 자동화할 수 있습니다.
- 필요에 따라 파일명을 더 정리하거나, UI를 추가하는 등 확장할 수 있습니다.
필요한 분들에게 도움이 되었으면 좋겠습니다! 😊
답글 남기기