-
Notifications
You must be signed in to change notification settings - Fork 621
Android
-
Declare
mavenCentral
repository and addFFmpegKit
dependency to yourbuild.gradle
inffmpeg-kit-<package name>
pattern. Use one of theFFmpegKit
package names given in the project README.repositories { mavenCentral() } dependencies { implementation 'com.arthenica:ffmpeg-kit-full:6.0-2' }
-
Execute synchronous
FFmpeg
commands.import com.arthenica.ffmpegkit.FFmpegKit; FFmpegSession session = FFmpegKit.execute("-i file1.mp4 -c:v mpeg4 file2.mp4"); if (ReturnCode.isSuccess(session.getReturnCode())) { // SUCCESS } else if (ReturnCode.isCancel(session.getReturnCode())) { // CANCEL } else { // FAILURE Log.d(TAG, String.format("Command failed with state %s and rc %s.%s", session.getState(), session.getReturnCode(), session.getFailStackTrace())); }
-
Each
execute
call (sync or async) creates a new session. Access every detail about your execution from the session created.FFmpegSession session = FFmpegKit.execute("-i file1.mp4 -c:v mpeg4 file2.mp4"); // Unique session id created for this execution long sessionId = session.getSessionId(); // Command arguments as a single string String command = session.getCommand(); // Command arguments String[] arguments = session.getArguments(); // State of the execution. Shows whether it is still running or completed SessionState state = session.getState(); // Return code for completed sessions. Will be null if session is still running or ends with a failure ReturnCode returnCode = session.getReturnCode(); Date startTime = session.getStartTime(); Date endTime = session.getEndTime(); long duration = session.getDuration(); // Console output generated for this execution String output = session.getOutput(); // The stack trace if FFmpegKit fails to run a command String failStackTrace = session.getFailStackTrace(); // The list of logs generated for this execution List<com.arthenica.ffmpegkit.Log> logs = session.getLogs(); // The list of statistics generated for this execution List<Statistics> statistics = session.getStatistics();
-
Execute asynchronous
FFmpeg
commands by providing session specificexecute
/log
/session
callbacks.FFmpegKit.executeAsync("-i file1.mp4 -c:v mpeg4 file2.mp4", new FFmpegSessionCompleteCallback() { @Override public void apply(FFmpegSession session) { SessionState state = session.getState(); ReturnCode returnCode = session.getReturnCode(); // CALLED WHEN SESSION IS EXECUTED Log.d(TAG, String.format("FFmpeg process exited with state %s and rc %s.%s", state, returnCode, session.getFailStackTrace())); } }, new LogCallback() { @Override public void apply(com.arthenica.ffmpegkit.Log log) { // CALLED WHEN SESSION PRINTS LOGS } }, new StatisticsCallback() { @Override public void apply(Statistics statistics) { // CALLED WHEN SESSION GENERATES STATISTICS } });
-
Execute
FFprobe
commands.- Synchronous
FFprobeSession session = FFprobeKit.execute(ffprobeCommand); if (!ReturnCode.isSuccess(session.getReturnCode())) { Log.d(TAG, "Command failed. Please check output for the details."); }
- Asynchronous
FFprobeKit.executeAsync(ffprobeCommand, new FFprobeSessionCompleteCallback() { @Override public void apply(FFprobeSession session) { CALLED WHEN SESSION IS EXECUTED } });
-
Get media information for a file.
MediaInformationSession mediaInformation = FFprobeKit.getMediaInformation("<file path or uri>"); mediaInformation.getMediaInformation();
-
Stop ongoing
FFmpeg
operations.- Stop all executions
FFmpegKit.cancel();
- Stop a specific session
FFmpegKit.cancel(sessionId);
- Stop all executions
-
Convert Storage Access Framework (SAF) Uris into paths that can be read or written by
FFmpegKit
.-
Reading a file:
Uri safUri = intent.getData(); String inputVideoPath = FFmpegKitConfig.getSafParameterForRead(requireContext(), safUri); FFmpegKit.execute("-i " + inputVideoPath + " -c:v mpeg4 file2.mp4");
-
Writing to a file:
Uri safUri = intent.getData(); String outputVideoPath = FFmpegKitConfig.getSafParameterForWrite(requireContext(), safUri); FFmpegKit.execute("-i file1.mp4 -c:v mpeg4 " + outputVideoPath);
-
Writing to a file in a custom mode.
Uri safUri = intent.getData(); String path = FFmpegKitConfig.getSafParameter(requireContext(), safUri, "rw"); FFmpegKit.execute("-i file1.mp4 -c:v mpeg4 " + path);
-
-
Get previous
FFmpeg
andFFprobe
sessions from session history.List<Session> sessions = FFmpegKitConfig.getSessions(); for (int i = 0; i < sessions.size(); i++) { Session session = sessions.get(i); Log.d(TAG, String.format("Session %d = id:%d, startTime:%s, duration:%s, state:%s, returnCode:%s.", i, session.getSessionId(), session.getStartTime(), session.getDuration(), session.getState(), session.getReturnCode())); }
-
Enable global callbacks.
-
Session type specific Complete Callbacks, called when an async session has been completed
FFmpegKitConfig.enableFFmpegSessionCompleteCallback(new FFmpegSessionCompleteCallback() { @Override public void apply(FFmpegSession session) { } }); FFmpegKitConfig.enableFFprobeSessionCompleteCallback(new FFprobeSessionCompleteCallback() { @Override public void apply(FFprobeSession session) { } }); FFmpegKitConfig.enableMediaInformationSessionCompleteCallback(new MediaInformationSessionCompleteCallback() { @Override public void apply(MediaInformationSession session) { } });
-
Log Callback, called when a session generates logs
FFmpegKitConfig.enableLogCallback(new LogCallback() { @Override public void apply(final com.arthenica.ffmpegkit.Log log) { ... } });
-
Statistics Callback, called when a session generates statistics
FFmpegKitConfig.enableStatisticsCallback(new StatisticsCallback() { @Override public void apply(final Statistics newStatistics) { ... } });
-
-
Ignore the handling of a signal. Required by
Mono
and frameworks that useMono
, e.g.Unity
andXamarin
.FFmpegKitConfig.ignoreSignal(Signal.SIGXCPU);
-
Register system fonts and custom font directories.
FFmpegKitConfig.setFontDirectoryList(context, Arrays.asList("/system/fonts", "<folder with fonts>"), Collections.EMPTY_MAP);
Copyright (c) 2021-2024 FFmpegKit
- Status
- Versions
- Changelog
- Project Layout
- API
- Using
- Building
- External Libraries
- Patents
- License