[Windows Forms] ffmpeg를 사용하여 동영상 파일을 오디오 파일로 변환하기
배경
동영상 파일에서 음성을 추출해서 듣고 싶을 때가 있습니다. 기본 Windows 앱 기능이 있을 줄 알고 알아봤는데 동영상 구간 편집 기능은 있지만 음성만 추출하는 기능을 찾지 못했습니다. 간단하게 변환해 주는 사이트가 있어서 편하게 이용하면 되지만, 업무 상 보안에 관련된 영상을 무료 온라인 사이트를 사용해도 될지 망설여지는 순간이 있습니다. 마침 운영 관련된 프로그램을 만들고 있는 터라 공부할 겸 동영상 파일을 음성 변환하는 프로그램을 만들었습니다.
프로그램 화면
사용한 라이브러리
프로그램 : ffmpeg
ffmpeg는 무료로 사용할 수 있는 오픈 소스 멀티미디어 프레임워크입니다. 모든 영상의 디코딩/인코딩을 지향하고 있기 때문에 ffmpeg.exe 파일 하나로 인코딩이 가능하다.
사전 설정
ffmpeg 설치
공식 페이지(https://ffmpeg.org/download.html)로 가서 맞는 OS를 선택하여 라이브러리를 다운로드 받습니다. 다운로드 받을 수 있는 여러 가지 옵션이 있는데, 저는 자체 실행할 수 있는 fmpeg-master-latest-win64-gpl-shared.zip을 다운로드 받았습니다.
디운로드 한 파일을 압축 해제하고 명령 프롬프트에서 편하게 사용할 수 있게 시스템 속성에서 환경 변수에 ffmpeg 를 추가하였습니다.
프로그램 구성
Process 클래스를 사용하여 외부 프로세스 간 통신하는 방법을 사용합니다. 외부 프로세스인 ffmpeg를 실행하여 인코딩합니다.
private void btnExtractAudio_Click(object sender, EventArgs e)
{
string videoFilePath = @"D:\test\local\test.mp4"; // 비디오 파일 경로
string outputAudioFilePath = @"D:\test\local\audioTest.mp3"; // 추출된 오디오 저장 경로
// FFmpeg 실행 명령어
string ffmpegCmd = $"-i \"{videoFilePath}\" -vn -acodec libmp3lame -ab 128k -ar 44100 -ac 2 \"{outputAudioFilePath}\"";
// FFmpeg 프로세스 실행
ProcessStartInfo processStartInfo = new ProcessStartInfo
{
FileName = "ffmpeg.exe",
Arguments = ffmpegCmd,
UseShellExecute = false,
RedirectStandardOutput = true,
CreateNoWindow = true
};
Process process = new Process
{
StartInfo = processStartInfo
};
process.Start();
process.WaitForExit();
MessageBox.Show("완료");
}
ffmpeg 명령어
-i : 입력 파일을 지정하는 옵션으로, 추출하는 비디오 파일의 경로입니다.
-vn : 비디오 스트림을 무시하고 오디오 스트림만 추출하는 옵션
-acodec libmp3lame : 오디오를 MP3 형식으로 인코딩하는 옵션, LAME MP3 인코더를 사용한다는 의미입니다.
-ar 44100 : 인코딩할 MP3 파일의 샘플 레이트를 44100 Hz로 지정합니다 (44.1 kHz)
-ac 2 : 채널 수를 설정하는 옵션으로, 인코딩할 MP3 파일의 채널 수를 2로 지정합니다 (스테레오).
비디오 파일에서 오디오를 추출해서 128 kbps, 44.1 kHz 인코딩된 .mp3 파일이 만들어집니다.
참고
ffmpeg : https://ko.wikipedia.org/wiki/FFmpeg
ffmpeg : https://namu.wiki/w/FFmpeg
https://github.com/BtbN/FFmpeg-Builds/releases
Windows Forms : https://learn.microsoft.com/en-us/visualstudio/ide/create-csharp-winform-visual-studio?view=vs-2022
https://ko.wikipedia.org/wiki/%EC%9C%88%EB%8F%84%EC%9A%B0_%ED%8F%BC