I'm trying to use the movie filter in my android project with ffmpeg. I use a fork of the guardian project : Cheers-dev
It use a recent version of ffmpeg (~15 days old atm). I added the option --enable-filter=movie
to activate the filter.
I use this command line in my android project :
ffmpeg -i input.mp4 -vf "movie=watermark.png [watermark]; [in][watermark] overlay=main_w-overlay_w-10:main_h-overlay_h-10 [out]" -strict -2 outputvideo.mp4
It perfectly works with my desktop version on Debian Wheezy. But it's impossible to make it work on my Android. All other commands works.
Here the error when it fails : No such filter: 'movie'
.
I also tested with the option -filter_complex
with a somewhat different error:
$ ffmpeg -y -loglevel debug -i /storage/sdcard0/test/hsgjr_export.mp4 -i /storage/sdcard0/test/watermark.png -filter_complex "[0:v][1:v]overlay=main_w-overlay_w-10:main_h-overlay_h-10[out]" -map [out] -map 0:a -codec:a copy /storage/sdcard0/test/hsgjr_watermark.mp4
ffmpeg version N-58429-gccdfa3e Copyright (c) 2000-2013 the FFmpeg developers
built on Dec 10 2013 01:12:39 with gcc 4.4.3 (GCC)
configuration: --arch=arm --cpu=cortex-a8 --target-os=linux --enable-runtime-cpudetect --prefix=/data/data/info.guardianproject.ffmpeg/app_opt --enable-pic --disable-shared --enable-static --cross-prefix=/opt/android/ndk-r8/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi- --sysroot=/opt/android/ndk-r8/platforms/android-14/arch-arm --extra-cflags='-I../x264 -I/Android/cheers/android-ffmpeg/data/data/info.guardianproject.ffmpeg/app_opt/include -mfloat-abi=softfp -mfpu=neon' --extra-ldflags='-L../x264 -L/Android/cheers/android-ffmpeg/data/data/info.guardianproject.ffmpeg/app_opt/lib' --enable-version3 --enable-gpl --enable-yasm --enable-decoders --enable-encoders --enable-muxers --enable-demuxers --enable-parsers --enable-protocols --enable-filter=movie --enable-avresample --enable-libvorbis --disable-indevs --enable-indev=lavfi
libavutil 52. 54.100 / 52. 54.100
libavcodec 55. 44.100 / 55. 44.100
libavformat 55. 21.101 / 55. 21.101
libavdevice 55. 5.100 / 55. 5.100
libavfilter 3. 91.100 / 3. 91.100
libavresample 1. 1. 0 / 1. 1. 0
libswscale 2. 5.101 / 2. 5.101
libswresample 0. 17.104 / 0. 17.104
libpostproc 52. 3.100 / 52. 3.100
Splitting the commandline.
Reading option '-y' ... matched as option 'y' (overwrite output files) with argument '1'.
Reading option '-loglevel' ... matched as option 'loglevel' (set logging level) with argument 'debug'.
Reading option '-i' ... matched as input file with argument '/storage/sdcard0/test/hsgjr_export.mp4'.
Reading option '-i' ... matched as input file with argument '/storage/sdcard0/test/watermark.png'.
Reading option '-filter_complex' ... matched as option 'filter_complex' (create a complex filtergraph) with argument '"[0:v][1:v]overlay=main_w-overlay_w-10:main_h-overlay_h-10[out]"'.
Reading option '-map' ... matched as option 'map' (set input stream mapping) with argument '[out]'.
Reading option '-map' ... matched as option 'map' (set input stream mapping) with argument '0:a'.
Reading option '-codec:a' ... matched as option 'codec' (codec name) with argument 'copy'.
Reading option '/storage/sdcard0/test/hsgjr_watermark.mp4' ... matched as output file.
Finished splitting the commandline.
Parsing a group of options: global .
Applying option y (overwrite output files) with argument 1.
Applying option loglevel (set logging level) with argument debug.
Applying option filter_complex (create a complex filtergraph) with argument "[0:v][1:v]overlay=main_w-overlay_w-10:main_h-overlay_h-10[out]".
Successfully parsed a group of options.
Parsing a group of options: input file /storage/sdcard0/test/hsgjr_export.mp4.
Successfully parsed a group of options.
Opening an input file: /storage/sdcard0/test/hsgjr_export.mp4.
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x1274cd0] Format mov,mp4,m4a,3gp,3g2,mj2 probed with size=2048 and score=100
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x1274cd0] ISO: File Type Major Brand: isom
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x1274cd0] File position before avformat_find_stream_info() is 1196725
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x1274cd0] All info found
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x1274cd0] File position after avformat_find_stream_info() is 30451
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/storage/sdcard0/test/hsgjr_export.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf55.21.101
Duration: 00:00:00.96, start: 0.000000, bitrate: 9972 kb/s
Stream #0:0(und), 1, 1/1200000: Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080, 1/2400000, 9830 kb/s, 25 fps, 25 tbr, 1200k tbn, 2400k tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und), 1, 1/48000: Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 127 kb/s (default)
Metadata:
handler_name : SoundHandler
Successfully opened the file.
Parsing a group of options: input file /storage/sdcard0/test/watermark.png.
Successfully parsed a group of options.
Opening an input file: /storage/sdcard0/test/watermark.png.
[AVIOContext @ 0x12870f0] Statistics: 26515 bytes read, 0 seeks
Input #1, image2, from '/storage/sdcard0/test/watermark.png':
Duration: 00:00:00.04, start: 0.000000, bitrate: N/A
Stream #1:0, 1, 1/25: Video: png, rgba, 400x170, 1/25, 25 tbr, 25 tbn, 25 tbc
Successfully opened the file.
Parsing a group of options: output file /storage/sdcard0/test/hsgjr_watermark.mp4.
Applying option map (set input stream mapping) with argument [out].
Applying option map (set input stream mapping) with argument 0:a.
Applying option codec:a (codec name) with argument copy.
Successfully parsed a group of options.
Opening an output file: /storage/sdcard0/test/hsgjr_watermark.mp4.
[AVFilterGraph @ 0x127d5f0] No such filter: '"'
Error configuring filters.
[AVIOContext @ 0x127d2b0] Statistics: 67296 bytes read, 2 seeks
The output is better than the previous one but I think I'm missing something.
SOLUTION : I removed the quote from the filter_complex argument and it worked.
Here is the working command :
$ ffmpeg -y -i /storage/sdcard0/test/hsgjr_export.mp4 -i /storage/sdcard0/test/watermark.png -filter_complex [0:v][1:v]overlay=main_w-overlay_w-10:main_h-overlay_h-10[out] -map [out] -map 0:a -codec:a copy /storage/sdcard0/test/hsgjr_watermark.mp4
To resolve my problem I removed the double quote around filter_complex argument. Here is the working command :
$ ffmpeg -y -i /storage/sdcard0/test/hsgjr_export.mp4 -i /storage/sdcard0/test/watermark.png -filter_complex [0:v][1:v]overlay=main_w-overlay_w-10:main_h-overlay_h-10[out] -map [out] -map 0:a -codec:a copy /storage/sdcard0/test/hsgjr_watermark.mp4
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With