I tried to put watermark on one video but FFmpeg command won't execute and error code is 3037. I run the same code for trimming video and video is trimmed successfully so there is no issues with inputpath
or outputpath
also I have ic_watermark.png
in assets folder. I tried with image from Drawable
but same error code.
So here is the command which I tried to run and put watermark in right corner:
String[] cmd = new String[]{"-i", videoInputPath, "-i", imagePath, "-filter_complex", "overlay=main_w-overlay_w-5:main_h-overlay_h-5", videoOutPath };
and this is the whole method:
private void executeFFmepg(String inputPath, String outputPath, String customCommand){
final Command command = videoKit.createCommand()
.overwriteOutput()
.inputPath(inputPath)
.outputPath(outputPath)
.customCommand(customCommand)
.experimentalFlag()
.build();
new AsyncCommandExecutor(command, this).execute();
}
I used one library based on FFmpeg
: https://github.com/inFullMobile/videokit-ffmpeg-android
and description says that this is basically invoking FFmpeg main() with CLI arguments.
This is what I get from Log
:
ffmpeg version n3.0.1 Copyright (c) 2000-2016 the FFmpeg developers
built with gcc 4.8 (GCC)
configuration: --target-os=linux --cross-prefix=/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/bin/arm-linux-androideabi- --arch=arm --cpu=cortex-a8 --enable-runtime-cpudetect --sysroot=/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/sysroot --enable-pic --enable-libx264 --enable-libass --enable-libfreetype --enable-libfribidi --enable-libmp3lame --enable-fontconfig --enable-pthreads --disable-debug --disable-ffserver --enable-version3 --enable-hardcoded-tables --disable-ffplay --disable-ffprobe --enable-gpl --enable-yasm --disable-doc --disable-shared --enable-static --pkg-config=/home/vagrant/SourceCode/ffmpeg-android/ffmpeg-pkg-config --prefix=/home/vagrant/SourceCode/ffmpeg-android/build/armeabi-v7a --extra-cflags='-I/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/include -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fstack-protector-all' --extra-ldflags='-L/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/lib -Wl,-z,relro -Wl,-z,now -pie' --extra-libs='-lpng -lexpat -lm' --extra-cxxflags=
libavutil 55. 17.103 / 55. 17.103
libavcodec 57. 24.102 / 57. 24.102
libavformat 57. 25.100 / 57. 25.100
libavdevice 57. 0.101 / 57. 0.101
libavfilter 6. 31.100 / 6. 31.100
libswscale 4. 0.100 / 4. 0.100
libswresample 2. 0.101 / 2. 0.101
libpostproc 54. 0.100 / 54. 0.100
05-29 15:35:08.591 24037-24037/com.cleatchaser D/FFmpeg: Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/storage/emulated/0/DCIM/Camera/20180406_140202.mp4':
Metadata:
major_brand : isom
minor_version : 0
05-29 15:35:08.596 24037-24037/com.cleatchaser D/FFmpeg: compatible_brands: isom3gp4
creation_time : 2018-04-06 12:02:25
Duration: 00:00:15.06, start: 0.000000, bitrate: 17185 kb/s
Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080, 17029 kb/s, 29.95 fps, 30 tbr, 90k tbn, 180k tbc (default)
05-29 15:35:08.601 24037-24037/com.cleatchaser D/FFmpeg: Metadata:
rotate : 90
creation_time : 2018-04-06 12:02:25
handler_name : VideoHandle
Side data:
05-29 15:35:08.606 24037-24037/com.cleatchaser D/FFmpeg: displaymatrix: rotation of -90.00 degrees
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 123 kb/s (default)
Metadata:
creation_time : 2018-04-06 12:02:25
05-29 15:35:08.611 24037-24037/com.cleatchaser D/FFmpeg: handler_name : SoundHandle
05-29 15:35:08.756 24037-24037/com.cleatchaser D/FFmpeg: Input #1, png_pipe, from '/storage/emulated/0/watermark.png':
Duration: N/A, bitrate: N/A
Stream #1:0: Video: png, rgba(pc), 856x1324, 25 tbr, 25 tbn, 25 tbc
I tried many answers from similar questions but none of them worked.
Is possible that error is in quotes?
I don't have experience with FFmpeg so any help would be very appreciated. Thanks
If anyone has the issue in future with putting watermark on video here is how you can do it. This can be done using writingminds compiled FFmpeg library: http://writingminds.github.io/ffmpeg-android-java/
Follow the instructions how to setup
FFmpeg
into your project. After that by running this command I was able to put watermark on video:videoInputPath
- is path of videoimagePath
- is path of an image from external storage. I tried by using image fromDrawable
but didn't find that working (not saying it's not possible)timeInSec
- is length of video which you can get fromMediaMetadataRetriever
:videoOutPath
- path where video is going to be saved after putting watermarkCommand above will also scale watermark on
200:200
you can adjust according to your needs and put it in bottom right side.