본문 바로가기
IT 모바일 Gear Up

kotlin 동영상 mp3 변환 안드로이드 앱 만들기

by sk2nd 2024. 7. 7.
반응형

kotlin 동영상 MP3 변환하는 안드로이드 앱 만들기

스마트폰이 대중화되면서 다양한 멀티미디어 콘텐츠를 손쉽게 접근할 수 있게 되었습니다. 그중에서도 동영상에서 오디오만 추출하여 MP3로 변환하는 기능은 많은 사용자들이 필요로 하는 기능 중 하나입니다. 이번 포스팅에서는 kotlin 안드로이드 앱을 통해 동영상을 MP3로 변환하는 방법을 단계별로 설명하겠습니다.

kotlin 동영상 mp3변환 앱 만들기 요구 사항

앱을 만들기 위해 필요한 기본적인 요구 사항은 다음과 같습니다:

  1. 안드로이드 스튜디오 설치
  2. Java 또는 Kotlin 프로그래밍 언어에 대한 기본적인 이해
  3. FFMPEG 라이브러리 사용

단계별 설명

1. 프로젝트 설정

안드로이드 스튜디오를 열고 새로운 프로젝트를 생성합니다. 프로젝트 생성 시 다음과 같은 설정을 진행합니다:

  • 프로젝트 이름: VideoToMp3Converter
  • 언어: Kotlin (또는 Java)
  • Minimum API Level: API 21 (Lollipop)

2. FFMPEG 라이브러리 추가

FFMPEG는 다양한 멀티미디어 포맷을 처리할 수 있는 강력한 라이브러리입니다. 이를 사용하여 동영상을 MP3로 변환할 수 있습니다. FFMPEG 라이브러리를 안드로이드 프로젝트에 추가하기 위해 FFmpeg Android Java 라이브러리를 사용하겠습니다.

프로젝트의 build.gradle 파일에 다음 의존성을 추가합니다:

implementation 'com.writingminds:FFmpegAndroid:0.3.2'

3. 권한 설정

동영상을 변환하기 위해서는 외부 저장소에 접근할 수 있는 권한이 필요합니다. AndroidManifest.xml 파일에 다음 권한을 추가합니다:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

또한, 안드로이드 6.0 이상에서는 런타임 권한 요청이 필요합니다. 이를 처리하기 위해 다음 코드를 MainActivity.kt에 추가합니다:

if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE), 1)
}
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), 1)
}

4. UI 디자인

사용자 인터페이스(UI)는 동영상 파일을 선택하고 변환 버튼을 포함해야 합니다. activity_main.xml 파일을 다음과 같이 수정합니다:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp">

    <Button
        android:id="@+id/btnSelectVideo"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Select Video"/>

    <Button
        android:id="@+id/btnConvert"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Convert to MP3"
        android:visibility="gone"/>
</LinearLayout>

5. 동영상 선택 기능 구현

동영상을 선택하기 위해 btnSelectVideo 버튼에 클릭 리스너를 추가하고, Intent를 사용하여 파일 선택기를 엽니다:

btnSelectVideo.setOnClickListener {
    val intent = Intent(Intent.ACTION_PICK, MediaStore.Video.Media.EXTERNAL_CONTENT_URI)
    startActivityForResult(intent, REQUEST_CODE_PICK_VIDEO)
}

선택된 동영상 파일의 경로를 얻기 위해 onActivityResult 메서드를 오버라이드합니다:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if (requestCode == REQUEST_CODE_PICK_VIDEO && resultCode == Activity.RESULT_OK) {
        val selectedVideoUri = data?.data
        selectedVideoPath = getPath(selectedVideoUri)
        btnConvert.visibility = View.VISIBLE
    }
}

private fun getPath(uri: Uri?): String {
    var path: String? = null
    val projection = arrayOf(MediaStore.Video.Media.DATA)
    val cursor = contentResolver.query(uri!!, projection, null, null, null)
    cursor?.moveToFirst()
    path = cursor?.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA))
    cursor?.close()
    return path!!
}

6. 동영상을 MP3로 변환

동영상을 MP3로 변환하기 위해 btnConvert 버튼에 클릭 리스너를 추가하고 FFMPEG 명령어를 실행합니다:

btnConvert.setOnClickListener {
    val outputPath = "${Environment.getExternalStorageDirectory()}/output.mp3"
    val cmd = arrayOf("-i", selectedVideoPath, outputPath)

    FFmpeg.getInstance(this).execute(cmd, object : ExecuteBinaryResponseHandler() {
        override fun onSuccess(message: String?) {
            Toast.makeText(this@MainActivity, "Conversion successful!", Toast.LENGTH_LONG).show()
        }

        override fun onFailure(message: String?) {
            Toast.makeText(this@MainActivity, "Conversion failed!", Toast.LENGTH_LONG).show()
        }

        override fun onProgress(message: String?) {
            Log.d("FFmpeg", "onProgress: $message")
        }

        override fun onStart() {
            Log.d("FFmpeg", "onStart")
        }

        override fun onFinish() {
            Log.d("FFmpeg", "onFinish")
        }
    })
}

마무리

이제 안드로이드 앱에서 동영상을 MP3로 변환할 수 있습니다. 이 과정에서 FFMPEG 라이브러리의 강력함을 경험할 수 있었을 것입니다. 이번 포스팅에서는 기본적인 변환 기능을 구현했지만, 앞으로는 다양한 포맷 지원, UI 개선, 백그라운드 작업 처리 등의 추가 기능을 고려할 수 있습니다.

결론

동영상을 MP3로 변환하는 안드로이드 앱을 만드는 과정은 여러 단계로 구성되어 있으며, 각각의 단계마다 중요한 포인트가 있습니다. 이번 포스팅을 통해 이러한 과정을 이해하고, 실제로 구현해보는 데 도움이 되었기를 바랍니다.

키워드

동영상 변환, MP3 변환, 안드로이드 개발, FFMPEG, Kotlin, Java, 안드로이드 스튜디오, 멀티미디어 앱, 파일 선택, 권한 설정

반응형

댓글