ffmpeg cli wrapper
1.0.0
작성자: Andrew Brampton(bramp.net)(c) 2013-2024
Java에서 FFmpeg를 실행하기 위한 유창한 인터페이스입니다.
GitHub | API 문서
현재 Java 8 이상을 지원합니다. Maven을 사용하여 종속성을 설치합니다.
< dependency >
< groupId >net.bramp.ffmpeg</ groupId >
< artifactId >ffmpeg</ artifactId >
< version >0.8.0</ version >
</ dependency >
암호:
FFmpeg ffmpeg = new FFmpeg ( "/path/to/ffmpeg" );
FFprobe ffprobe = new FFprobe ( "/path/to/ffprobe" );
FFmpegBuilder builder = new FFmpegBuilder ()
. setInput ( "input.mp4" ) // Filename, or a FFmpegProbeResult
. done ()
. overrideOutputFiles ( true ) // Override the output if it exists
. addOutput ( "output.mp4" ) // Filename for the destination
. setFormat ( "mp4" ) // Format is inferred from filename, or can be set
. setTargetSize ( 250_000 ) // Aim for a 250KB file
. disableSubtitle () // No subtiles
. setAudioChannels ( 1 ) // Mono audio
. setAudioCodec ( "aac" ) // using the aac codec
. setAudioSampleRate ( 48_000 ) // at 48KHz
. setAudioBitRate ( 32768 ) // at 32 kbit/s
. setVideoCodec ( "libx264" ) // Video using x264
. setVideoFrameRate ( 24 , 1 ) // at 24 frames per second
. setVideoResolution ( 640 , 480 ) // at 640x480 resolution
. setStrict ( FFmpegBuilder . Strict . EXPERIMENTAL ) // Allow FFmpeg to use experimental specs
. done ();
FFmpegExecutor executor = new FFmpegExecutor ( ffmpeg , ffprobe );
// Run a one-pass encode
executor . createJob ( builder ). run ();
// Or run a two-pass encode (which is better quality at the cost of being slower)
executor . createTwoPassJob ( builder ). run ();
암호:
FFprobe ffprobe = new FFprobe ( "/path/to/ffprobe" );
FFmpegProbeResult probeResult = ffprobe . probe ( "input.mp4" );
FFmpegFormat format = probeResult . getFormat ();
System . out . format ( "%nFile: '%s' ; Format: '%s' ; Duration: %.3fs" ,
format . filename ,
format . format_long_name ,
format . duration
);
FFmpegStream stream = probeResult . getStreams (). get ( 0 );
System . out . format ( "%nCodec: '%s' ; Width: %dpx ; Height: %dpx" ,
stream . codec_long_name ,
stream . width ,
stream . height
);
FFmpegExecutor executor = new FFmpegExecutor ( ffmpeg , ffprobe );
FFmpegProbeResult in = ffprobe . probe ( "input.flv" );
FFmpegBuilder builder = new FFmpegBuilder ()
. setInput ( in ) // Or filename
. done ()
. addOutput ( "output.mp4" )
. done ();
FFmpegJob job = executor . createJob ( builder , new ProgressListener () {
// Using the FFmpegProbeResult determine the duration of the input
final double duration_ns = in . getFormat (). duration * TimeUnit . SECONDS . toNanos ( 1 );
@ Override
public void progress ( Progress progress ) {
double percentage = progress . out_time_ns / duration_ns ;
// Print out interesting information about the progress
System . out . println ( String . format (
"[%.0f%%] status:%s frame:%d time:%s ms fps:%.0f speed:%.2fx" ,
percentage * 100 ,
progress . status ,
progress . frame ,
FFmpegUtils . toTimecode ( progress . out_time_ns , TimeUnit . NANOSECONDS ),
progress . fps . doubleValue (),
progress . speed
));
}
});
job . run ();
변경하려는 경우 빌드 및 릴리스는 간단합니다.
# To build
mvn
# To test
mvn test
# To release (pushing jar to maven central)
# (don't forget to set up your ~/.m2/settings.xml)
mvn release:prepare
mvn release:perform
# To publish javadoc
git checkout ffmpeg-0.x
mvn clean javadoc:aggregate scm-publish:publish-scm
# Update Maven Plugins
mvn versions:display-plugin-updates
# Library Dependencies
mvn versions:display-dependency-updates
우리는 libav 버전이 아닌 원본 FFmpeg만 지원합니다. Ubuntu 12.04 이전과 15.04 이상에서는 원본 FFmpeg가 배송됩니다. libav가 포함된 버전에서 실행해야 하는 경우 PPA에서 또는 정적 빌드를 사용하여 FFmpeg를 설치할 수 있습니다. 자세한 내용은 여기를 참조하세요
우리는 기여를 환영합니다. 이슈 트래커를 확인해주세요. 작업하고 싶은 내용이 있으면 문제에 대해 의견을 말하거나 끌어오기 요청을 보내주세요. 다른 작업을 하고 싶은 경우 문제를 열면 논의할 수 있습니다! 문서 개선, 코드 정리 또는 새로운 기능에 감사드립니다. 모든 작업은 자원봉사로 이루어지기 때문에 답변이 느릴 수 있다는 점 양해 부탁드립니다.
Copyright (c) 2013-2024, Andrew Brampton
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.