마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

동영상 저장 시 사이즈 변경.

0 추천
sdcard나 내부저장소 등 기존에 있는 동영상을 가지고 새로 용량을 조절해서 복사하려고 합니다.

일단 원본 동영상을 복사하는데까진 성공했는데, 복사할 때 조건문으로 동영상 크기가 10MB 등 ,

특정 용량 이상일  때 용량을 그 미만으로 만들고 싶은데요..

video trim 기능으로 원하는 구간을 잘라서 용량을 작게 만들고 싶지만, 아직 그 단계는 무리일 것 같아서

구간 상관없이 처음부터 용량이 차는 구간까지만 자르고 싶습니다.

 

가령 A라는 동영상이 있는데 전체 길이는 60초, 파일 용량은 30MB입니다.

요놈을 복사할 때 파일 용량을 9MB로 만들고 싶습니다..첫 0초부터 한 20초 내외로 동영상이 잘리도록요.

이런 기능이 가능 할지 여쭤봅니다.. 구글과 이곳저곳에서 trim이나 split 기능을 찾았는데 동영상쪽은 찾기가 쉽지않네요..
anci (19,950 포인트) 님이 2013년 7월 5일 질문
anci님이 2013년 7월 5일 태그 변경

1개의 답변

+1 추천
 
채택된 답변
TS라면 간단하게 1M단위로 읽어 /sdcard 카드에 적는 기능을 9번 반복하도록 구성하면 되겠지만.

인코딩 형식에 따라  잘 동작하는 영상도 있고, 안 되는 영상도 있습니다.

 
TS나  동영상의 헤더가 앞부분에 있고, 오디오 비디오 정보가 번갈아 있는 컨텐츠라면,

헤더만큼의 시간이 차이가 날 순 있지만  원하시는대로 동작이 가능할 겁니다.

하지만 헤더가 뒤에 있음 헤더가 복사가 안되니 동영상 파싱 자체가 안되며,

비디오 정보와 오디오 정보가 따로 존재하면, 앞부분에 있는 것만 플레이 될 가능성이 높습니다.

 

속도가 문제가 되겠지만 , FFMPEG 같은 것을 사용하여 재 인코딩하시는 것을 권장합니다.
사악미소 (65,330 포인트) 님이 2013년 7월 5일 답변
anci님이 2013년 7월 5일 채택됨
감사합니다 ㅠㅠ어제도 답변 달아주셨는데 오늘도..
아직 실력이 많이 부족한데, 과제는 아니고 해야할 일이라서 인터넷에서 찾고 참고해봐도 동영상 trim/split는 정말 안나오더군요..여기 안펍에서도 질문자는 있지만 답변자는 없었던..ㅠㅠ
그럼 순수 java코딩으로는 동영상을 인위적으로 편집하거나 원하는 용량[크기]로 복사하는 방법은 없는건가요?
인코딩 시간도 시간이고, 구현상
다소 난이도가 있긴 하지만 불가능한건 아닙니다.

안드로이드 단말에서 재생이 되는 컨텐츠라면,
MediaExtractor(http://developer.android.com/reference/android/media/MediaExtractor.html)의
 readSampleData, getSampleTime 를 통해
비디오 오디오 데이터와 해당 데이터가 재생 될 시간을 구할 수 있습니다.

readSampleData 로 계속 읽다 getSampleTime 시간을 보고 원하는 시간이 넘어쓰면 더이상 읽지 않으면,
원하는 시간까지의 데이터가  구해 질접니다.

이 데이터는 H264, AAC 같은 raw 데이터라, 이를 다시 mp4 같은 것으로 변경 해줘야 합니다.

이 건 안드로이드 자바 API에는 마땅한 것이 없고 자바 오픈 소스 중 지원하는 것을 검색해보니
https://code.google.com/p/mp4parser/ 에서 지원하는 듯 합니다.

예제 경로를 보니
https://mp4parser.googlecode.com/svn/trunk/examples/src/main/java/com/googlecode/mp4parser/muxformats/H264Example.java
 FileInputStream 로 를 사용하는 부분을 MediaExtractor로 구한 데이터를 가져 갈 수 있는 InputStream를 넣어주시면 될 듯 합니다.
답변 감사합니다 :D.사이트 참고 해보겠습니다.
...