오디오 파일 (사용자가 가지고있는 형식)과 비디오 파일 (mp4)의 위치를 각각 가리키는 두 개의 변수 Uri audioUri
과 Uri videoUri
이 있습니다. 비디오와 오디오의 길이는 같습니다.비디오의 사운드 트랙을 동일한 길이의 오디오 파일로 변경하십시오.
비디오 파일과 비디오/프레임이 같지만 오디오 파일을 사운드 트랙으로 사용하는 비디오 파일을 만들고 싶습니다.
오디오 파일 (사용자가 가지고있는 형식)과 비디오 파일 (mp4)의 위치를 각각 가리키는 두 개의 변수 Uri audioUri
과 Uri videoUri
이 있습니다. 비디오와 오디오의 길이는 같습니다.비디오의 사운드 트랙을 동일한 길이의 오디오 파일로 변경하십시오.
비디오 파일과 비디오/프레임이 같지만 오디오 파일을 사운드 트랙으로 사용하는 비디오 파일을 만들고 싶습니다.
mp4parser 라이브러리를 사용하게되었습니다. MediaExtractor
과 MediaMuxer
클래스는 각각 API 16과 18에 도입되어 프로젝트에 너무 새로운 클래스입니다.
이 방법의주의 사항은 오디오 소스는 aac 또는 mp3 파일이어야하며 비디오 파일은 mp4 파일이어야한다는 것입니다. 에서 "지금 동기화"버튼을 클릭
열기 Gradle Scripts -> build.gradle (Module: app)
을하고 dependencies
블록
compile 'com.googlecode.mp4parser:isoparser:1.0.+'
의 끝에 추가, 설치하고 다음과 같이 사용할 수 있습니다 안드로이드 Studio 및 Gradle을 사용
이 변경 후 노란색 배너가 나타납니다. 자바 파일 쓰기에서 지금
:try
{
H264TrackImpl h264Track = new H264TrackImpl(new FileDataSourceImpl(videoFile);
MP3TrackImpl mp3Track = new MP3TrackImpl(new FileDataSourceImpl(audioFile);
Movie movie = new Movie();
movie.addTrack(h264Track);
movie.addTrack(mp3Track);
Container mp4file = new DefaultMp4Builder().build(movie);
FileChannel fileChannel = new FileOutputStream(new File(outputFile)).getChannel();
mp4file.writeContainer(fileChannel);
fileChannel.close();
}
catch (Exception e)
{
Toast.makeText(this, "An error occurred: " + e.getMessage(), Toast.LENGTH_SHORT).show();
}
사용 Alt + Enter를 도구 가져온 모든 수업을합니다. 나에게는 Movie
클래스에 대해 여러 가지 선택 사항이 있으므로 com.googlecode.mp4parser
으로 시작하는 클래스를 선택해야합니다.
예외를 처리하고 자체 설명 문자열 outputFile
, audioFile
및 videoFile
을 정의하는 것은 귀하에게 맡깁니다.
['MediaExtractor'] (http://developer.android.com/reference/android/media/MediaExtractor.html) 클래스를 사용하여 비디오 트랙을 추출한 다음 [ 'MediaMuxer'] (https://developer.android.com/reference/android/media/MediaMuxer.html) 클래스? – Michael
@Michael MediaMuxer 클래스가 API 18에 추가되었으며, 내 앱은 API 10+ 용입니다. – stackunderflow
ffmpeg처럼 제 3 자 솔루션을 살펴 봐야 할 것 같습니다. – Michael