Notice
Recent Posts
Recent Comments
Link
투케이2K
1028. (Android/Java) [간단 소스] 안드로이드 arthenica ffmpeg 라이브러리 사용해 특정 비디오 파일 코덱 (Codec) 및 bitrate 정보 확인 본문
Android
1028. (Android/Java) [간단 소스] 안드로이드 arthenica ffmpeg 라이브러리 사용해 특정 비디오 파일 코덱 (Codec) 및 bitrate 정보 확인
투케이2K 2025. 9. 11. 21:43728x90
[개발 환경 설정]
개발 툴 : 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
반응형
'Android' 카테고리의 다른 글
Comments