투케이2K

1028. (Android/Java) [간단 소스] 안드로이드 arthenica ffmpeg 라이브러리 사용해 특정 비디오 파일 코덱 (Codec) 및 bitrate 정보 확인 본문

Android

1028. (Android/Java) [간단 소스] 안드로이드 arthenica ffmpeg 라이브러리 사용해 특정 비디오 파일 코덱 (Codec) 및 bitrate 정보 확인

투케이2K 2025. 9. 11. 21:43
728x90

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : Java / Kotlin

 

[소스 코드]

// --------------------------------------------------------------------------------------
[개발 및 테스트 환경]
// --------------------------------------------------------------------------------------

- 언어 : Java / Kotlin


- 개발 툴 : AndroidStudio


- 기술 구분 : ffmpeg / video / transfer


- 사전) AWS 의존성 부여 설정 (com.arthenica 주소로 라이브러리 당겨올 수 없음 : 다이렉트 aar 파일 추가)

  // --------------------------------------------
  // [Aws build.gradle 라이브러리 정의] : targetSdk 33 ~ 34
  // --------------------------------------------
  // TODO [ffmpeg : 미디어 포맷 변환 도구]
  // --------------------------------------------
  implementation files('libs/ffmpeg-kit-full-gpl-6.0-2.LTS.aar') // [웹 사이트에서 aar 파일 다운로드 받은 후 안드로이드 프로젝트 libs 폴더에 추가]
  implementation 'com.arthenica:smart-exception-java:0.2.1'


- 사전) 프로젝트 설정 사항

  >> 안드로이드 프로젝트에 libs 폴더 생성

  >> 웹 사이트에서 다운로드 받은 ffmpeg aar 파일을 libs 폴더에 추가

  >> 안드로이드 build.gradle 설정에서 implementation 의존성 설정

  >> 안드로이드 프로젝트 gradle sync 동기화 수행

    - import com.arthenica.ffmpegkit.FFmpegKit;
    - import com.arthenica.ffmpegkit.ReturnCode;

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[소스 코드]
// --------------------------------------------------------------------------------------

// --------------------------------------------
// [변수 선언]
// --------------------------------------------
String FILE_PATH = "/storage/emulated/0/Download/video.mp4"; // [mp4 파일이 저장 된 경로 : 휴대폰 다운로드 폴더]


// --------------------------------------------
// [command : 파일 정보 확인 커맨드 명령어 작성]
// --------------------------------------------
// hide_banner 는 FFmpeg 의 로고 및 라이센스 정보 숨김
// --------------------------------------------
String command = String.format("-hide_banner -i %s", FILE_PATH);

S_Log._W_(ACTIVITY_NAME + " :: 특정 비디오 파일 정보 (codec , bitrate) 확인 커맨드", new String[]{
        "FILE_PATH :: " + FILE_PATH
});


// --------------------------------------------
// [FFmpegKit.executeAsync 사용해 비디오 파일 분석 및 로그 파일 확인]
// --------------------------------------------
// implementation 'com.arthenica:smart-exception-java:0.2.1' 라이브러리가 없는 경우 에러가 발생하니 필수 추가 필요
// ---------------------------------------------
FFmpegKit.executeAsync(command, session -> {

    // ---------------------------------------------
    // TODO [코덱 정보만 확인할 목적으로 ReturnCode 가 1이어도 무시하고 로그를 파싱]
    // ---------------------------------------------
    // if (ReturnCode.isSuccess(session.getReturnCode())) {}
    // ---------------------------------------------
    if (session.getFailStackTrace() != null && C_Util.stringNotNull(String.valueOf(session.getFailStackTrace())) == true) {
        S_Log._E_(ACTIVITY_NAME + " :: getFileInfo :: 특정 비디오 파일 정보 (codec , bitrate) 확인 실패", new String[]{
                "getSessionId :: " + String.valueOf(session.getSessionId()),
                "getCommand :: " + String.valueOf(session.getCommand()),
                "getReturnCode :: " + String.valueOf(session.getReturnCode()),
                "getFailStackTrace :: " + String.valueOf(session.getFailStackTrace()),
        });

    } else {
        S_Log._W_(ACTIVITY_NAME + " :: getFileInfo :: 특정 비디오 파일 정보 (codec , bitrate) 확인 성공", new String[]{
                "getSessionId :: " + String.valueOf(session.getSessionId()),
                "getCommand :: " + String.valueOf(session.getCommand()),
                "getAllLogsAsString :: " + "\n\n"+String.valueOf(session.getAllLogsAsString())+"\n\n",
        });

        /**
          * -----------------------------------------------

          * TODO [예시 비디오 파일 확인 로그]
          * -----------------------------------------------
          * Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/storage/emulated/0/Download/video.mp4':
          *       Metadata:
          *         major_brand     : mp42
          *         minor_version   : 0
          *         compatible_brands: isommp42
          *         creation_time   : 2025-09-02T09:54:42.000000Z
          *         com.android.version: 15
          *       Duration: 00:00:21.27, start: 0.000000, bitrate: 5316 kb/s
          *       Stream #0:0[0x1](eng): Video: h264 (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1280x720, 5302 kb/s, 30 fps, 30 tbr, 90k tbn (default)
          *         Metadata:
          *           creation_time   : 2025-09-02T09:54:42.000000Z
          *           handler_name    : VideoHandle
          *           vendor_id       : [0][0][0][0]
          *         Side data:
          *           displaymatrix: rotation of -90.00 degrees
          *       Stream #0:1[0x2](eng): Audio: aac (mp4a / 0x6134706D), 8000 Hz, mono, fltp, 12 kb/s (default)
          *         Metadata:
          *           creation_time   : 2025-09-02T09:54:42.000000Z
          *           handler_name    : SoundHandle
          *           vendor_id       : [0][0][0][0]
          *     At least one output file must be specified
          * -----------------------------------------------
          * */
    }
});

// --------------------------------------------------------------------------------------





// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------

[ffmpeg aar 파일 다운로드 사이트]

https://artifactory.appodeal.com/appodeal-public/com/arthenica/ffmpeg-kit-full-gpl/6.0-2.LTS/


[라이브러리 Git 사이트]

https://github.com/arthenica/ffmpeg-kit/wiki/Android


[ffmpeg 라이브러리 빌드 관련 이슈]

https://stackoverflow.com/questions/79600161/could-not-find-com-arthenicaffmpeg-kit-full6-0-2


[안드로이드 프로젝트 libs 폴더 생성 방법]

https://blog.naver.com/kkh0977/222355981962?trackingCode=blog_bloghome_searchlist


[간단 소스] 안드로이드 arthenica ffmpeg 미디오 포맷 변환 라이브러리 사용해 mp4 파일을 mkv 파일로 변환 수행

https://blog.naver.com/kkh0977/223990678835

// --------------------------------------------------------------------------------------
 
728x90
반응형
Comments