2009-08-15 33 views
34

Tôi khá mới đối với Java, cần viết chương trình nghe hướng dẫn chuyển đổi video và chuyển đổi video khi hướng dẫn mới đến (hướng dẫn được lưu trữ trong SQS của Amazon, nhưng không liên quan đến câu hỏi của tôi)sử dụng trình bao bọc java-ffmpeg hoặc chỉ cần sử dụng thời gian chạy java để thực thi ffmpeg?

I 'm phải đối mặt với một sự lựa chọn, hoặc sử dụng Java RunTime để chuyển đổi' ffmpeg 'exec (như từ dòng lệnh), hoặc tôi có thể sử dụng một wrapper ffmpeg được viết bằng cách sử dụng Java Runtime để exec ffmpeg trực tiếp, hoặc tôi có thể sử dụng một wrapper ffmpeg được viết bằng cách sử dụng Java Runtime để exec ffmpeg một cách trực tiếp, và tránh sử dụng trình bao bọc java-ffmpeg vì tôi phải học thư viện. vì vậy câu hỏi của tôi là có bất kỳ lợi ích bằng cách sử dụng wrapper java-ffmpeg hơn exec ffmpeg trực tiếp bằng cách sử dụng Runtime? Tôi không cần ffmpeg để chơi video, chỉ cần chuyển đổi video

Cảm ơn

Trả lời

33

Nếu tôi không nhầm, dự án "ffmpeg wrapper" mà bạn đã liên kết đã lỗi thời và không được duy trì. ffmpeg là một dự án rất tích cực, rất nhiều thay đổi và phát hành mọi lúc.

Bạn nên xem xét dự án Xuggler, điều này cung cấp một API Java cho những gì bạn muốn làm, và chúng có tích hợp chặt chẽ với ffmpeg.

http://www.xuggle.com/xuggler/

Nếu bạn chọn để đi xuống Runtime.exec() con đường, chủ đề Red5 này nên có ích:

http://www.nabble.com/java-call-ffmpeg-ts15886850.html

+0

Cảm ơn thông tin, tôi sẽ digg vào xuggler, âm thanh thú vị – Beier

+0

chỉ cần xem qua tài liệu về xuggler, chính xác những gì tôi cần. cảm ơn vì đã giúp đỡ! – Beier

+0

Tuyệt vời. Chỉ cần lưu ý rằng đó là GPL, bạn có thể cần giấy phép thương mại trong sản xuất. –

3

Những lợi ích của việc sử dụng các wrapper sẽ là chủ yếu mà nó cung cấp nhiều hạt mịn và chức năng không thể truy cập qua dòng lệnh (không liên quan đến bạn) và làm cho việc xử lý lỗi và kiểm soát trạng thái dễ dàng hơn - bạn sẽ phải phân tích cú pháp đầu ra tiêu chuẩn của công cụ dòng lệnh và các luồng lỗi.

+0

thanks for the info – Beier

8

Ngoài ra, như các Xuggler 3.3, Xuggler là ý nghĩa LGPL bạn không cần giấy phép thương mại.

+1

Có hỗ trợ chuyển đổi hình ảnh và mp3 sang tệp video không? cảm ơn – Felix

19

tôi cũng đang tìm kiếm cái gì đó để quấn FFMPEG trong Java. Trong khi tìm kiếm, tôi thấy điều này: https://github.com/bramp/ffmpeg-cli-wrapper.

Tính đến hôm nay, dường như đã được sửa đổi cách đây một tháng. Vì vậy, hy vọng nó sẽ dính xung quanh trong một thời gian.

Một mẫu từ tài liệu của họ:

FFmpeg ffmpeg = new FFmpeg("/path/to/ffmpeg"); 
FFprobe ffprobe = new FFprobe("/path/to/ffprobe"); 

FFmpegBuilder builder = new FFmpegBuilder() 
    .setInput(in) 
    .overrideOutputFiles(true) 
    .addOutput("output.mp4") 
     .setFormat("mp4") 
     .setTargetSize(250000) 

     .disableSubtitle() 

     .setAudioChannels(1) 
     .setAudioCodec("libfdk_aac") 
     .setAudioRate(48000) 
     .setAudioBitrate(32768) 

     .setVideoCodec("libx264") 
     .setVideoFramerate(Fraction.getFraction(24, 1)) 
     .setVideoResolution(640, 480) 

     .setStrict(FFmpegBuilder.Strict.EXPERIMENTAL) 
     .done(); 

FFmpegExecutor executor = new FFmpegExecutor(ffmpeg, ffprobe); 
executor.createTwoPassJob(builder).run(); 
+0

hiện nó có giải pháp để trích xuất các thông tin meta âm thanh hoặc video? – VijayM

+0

có sử dụng ffprobe đi trên trang web trên github bạn sẽ thấy một ví dụ – cyril

3

Có rất nhiều thư viện Java cung cấp giấy gói FFMPEG. Tuy nhiên, hầu hết các thư viện này không may là đã lỗi thời và sử dụng các phiên bản FFMPEG cũ thiếu một số codec quan trọng (ví dụ: Xuggler, video khiêm tốn, JavaAV, JavaAVC và jave). Vì vậy, hãy cẩn thận khi sử dụng các dự án đó!

Tuy nhiên, có một FFMPEG wrapper mà vẫn là tích cực phát triển và hỗ trợ FFMPEG 3, quá:

  • JavaCPP FFMPEG - với các đồ tạo tác maven kèm đầy đủ

Hoặc bạn có thể sử dụng một trình bao bọc cho giao diện dòng lệnh của FFMPEG, chẳng hạn như ffmpeg-cli-wrapper. Sau đó, nó trong tay của bạn để cập nhật ffmpeg bằng tay mà không cần phải chờ đợi cho một bản phát hành mới của thư viện wrapper.

0

Tôi thử một số cách, đơn giản nhất đối với tôi là ffmpeg-cli-wrapper, vì nó sử dụng ffmpeg mặc định hoặc cụ thể, hơn nữa bạn có thể cấu hình nhiều cấu hình như tỷ lệ, bitrate ... nhận thời lượng ... JAVE từ sauronsoftware thực hiện rất nhiều lỗi, XUGGLE và khác tôi thấy nó quá phức tạp

1

Tôi đã viết trình bao bọc dòng lệnh Java ffmpeg của riêng mình: Jaffree. Nó hoạt động với cả ffprobe và ffmpeg. Ngoài ra nó có trong quan điểm của tôi thuận tiện hơn API chất lỏng.

Dưới đây là một ví dụ sử dụng ffprobe:

FFprobeResult result = FFprobe.atPath(BIN) 
     .setInputPath(VIDEO_MP4) 
     .setShowStreams(true) 
     .setShowError(true) 
     .execute(); 

if (result.getError() != null) { 
    //TODO handle ffprobe error message 
    return; 
} 

for (Stream stream : probe.getStreams().getStream()) { 
    //TODO analyze stream data 
} 

ProgressListener listener = new ProgressListener() { 
    @Override 
    public void onProgress(FFmpegProgress progress) { 
     //TODO handle progress data 
    } 
}; 

Và đây là dành cho ffmpeg:

FFmpegResult result = FFmpeg.atPath(BIN) 
     .addInput(Input.fromPath(VIDEO_MP4)) 
     .addOutput(Output.toPath(outputPath) 
       .addCodec(null, "copy") 
     ) 
     .setProgressListener(listener) 
     .execute(); 
+0

Hi, làm thế nào có thể quản lý một thư viện giao diện java khi ffprobe xsd thay đổi trên mỗi phiên bản ffmpeg? P.S. Cách tiếp cận của tôi tương tự như của bạn, nhưng vấn đề này làm cho tôi dính vào một phiên bản ffmpeg cụ thể. – saurabheights

+0

Tôi chỉ thử nghiệm trên phiên bản ffmpeg mới nhất, có một tùy chọn "bit đầu ra chính xác". –

Các vấn đề liên quan