2
나는 mp3 파일과 이미지를 가지고 있습니다. 자바에서 그들을 결합한 비디오를 만들어야합니다.
xuggle로 해보려고했지만 아직 결과가 없습니다.
아무도 내게 어떤 제안을 줄 수 있습니까?생성 된 오디오와 오디오를 결합하십시오.
나는 mp3 파일과 이미지를 가지고 있습니다. 자바에서 그들을 결합한 비디오를 만들어야합니다.
xuggle로 해보려고했지만 아직 결과가 없습니다.
아무도 내게 어떤 제안을 줄 수 있습니까?생성 된 오디오와 오디오를 결합하십시오.
마지막으로 해결책을 찾았습니다.
나는 Xuggle의 예제 코드를 사용했다.
오디오 트랜스 코딩의 문제도 해결했습니다.
내가 왜 작동하는지 설명 할 수 없기 때문에 여기서 코드를 작성 하겠지만 작동 만합니다.
public String make() throws IOException, InterruptedException {
BufferedImage s1 = genImage();
writer = ToolFactory.makeWriter("temp/" + sermon.getFile().getName() + ".flv");
String filename = sermon.getFile().getAbsolutePath();
IContainer container = IContainer.make();
if (container.open(filename, IContainer.Type.READ, null) < 0) {
throw new IllegalArgumentException("could not open file: " + filename);
}
int numStreams = container.getNumStreams();
int audioStreamId = -1;
IStreamCoder audioCoder = null;
for (int i = 0; i < numStreams; i++) {
IStream stream = container.getStream(i);
IStreamCoder coder = stream.getStreamCoder();
if (coder.getCodecType() == ICodec.Type.CODEC_TYPE_AUDIO) {
audioStreamId = i;
audioCoder = coder;
break;
}
}
if (audioStreamId == -1) {
throw new RuntimeException("could not find audio stream in container: " + filename);
}
if (audioCoder.open() < 0) {
throw new RuntimeException("could not open audio decoder for container: " + filename);
}
writer.addAudioStream(0, 0, audioCoder.getChannels(), audioCoder.getSampleRate());
writer.addVideoStream(1, 1, width, height);
IPacket packet = IPacket.make();
int n = 0;
while (container.readNextPacket(packet) >= 0) {
n++;
if (packet.getStreamIndex() == audioStreamId) {
IAudioSamples samples = IAudioSamples.make(2048, audioCoder.getChannels());
int offset = 0;
while (offset < packet.getSize()) {
try {
int bytesDecoded = audioCoder.decodeAudio(samples, packet, offset);
if (bytesDecoded < 0) {
//throw new RuntimeException("got error decoding audio in: " + filename);
break;
}
offset += bytesDecoded;
if (samples.isComplete()) {
if (n % 1000 == 0) {
writer.flush();
System.out.println(n);
System.gc();
}
writer.encodeAudio(0, samples);
}
} catch (Exception e) {
System.out.println(e);
}
}
} else {
do {
} while (false);
}
}
for (int i = 0; i < container.getDuration()/1000000; i++) {
writer.encodeVideo(1, s1, i, TimeUnit.SECONDS);
}
writer.close();
if (audioCoder != null) {
audioCoder.close();
audioCoder = null;
}
if (container != null) {
container.close();
container = null;
}
return "temp/" + sermon.getFile().getName() + ".flv";
}
감사합니다. 행운을 빈다.
어떻게 지내니? MediaTool을 사용해야할까요? (참조 : [MediaTool 소개] (http://wiki.xuggle.com/MediaTool_Introduction)) – mrzasa
저는 Xuggle을 처음 접했습니다. 나는 2 개의 스트림, 하나는 오디오 용, 다른 하나는 비디오 용 (사이트의 몇 가지 예와 같이)을 만들려고 시도했지만 아마도 실패 할 것이기 때문에 아마 뭔가 잘못하고있는 것입니다 ... – user584397
내 문제는 비디오가 생성 될 때입니다. 날아 오르지 만, 오디오는 이미 디스크에 있고, 나는 함께 모으는 법을 모른다. 나는 비디오만을 저장하고 그들을 연결하려고 생각했다. ([link] http://code.google.com/p/xuggle/source/browse/trunk/java/xuggle-xuggler/src/com/xuggle/mediatool/ 데모/ConcatenateAudioAndVideo.java [/ 링크])하지만이 샘플을 위해 일하지 않았다 ... – user584397