I am trying to add srt file to a mp4 video using android mobile-ffmpeg , the code works with no error but the generated video does not contain the subtitle
here is the code :
String cmd = "-i " + videoPath + " -vf subtitles=\"" + subtitlePath + ":force_style='Alignment=10,Fontsize=18'\" " + OutputVideoPath;
FFmpeg.executeAsync(cmd, new ExecuteCallback() {
@Override
public void apply(final long executionId, final int returnCode) {
if (returnCode == RETURN_CODE_SUCCESS) {
} else {
}
}
});
here are the logs
I/mobile-ffmpeg: ffmpeg version v4.4-dev-416
Copyright (c) 2000-2020 the FFmpeg developers
I/mobile-ffmpeg: built with Android (6454773 based on r365631c2) clang version 9.0.8 (https://android.googlesource.com/toolchain/llvm-project 98c855489587874b2a325e7a516b99d838599c6f) (based on LLVM 9.0.8svn)
configuration: --cross-prefix=arm-linux-androideabi- --sysroot=/files/android-sdk/ndk/21.3.6528147/toolchains/llvm/prebuilt/linux-x86_64/sysroot --prefix=/home/taner/Projects/mobile-ffmpeg/prebuilt/android-arm/neon/ffmpeg --pkg-config=/usr/bin/pkg-config --enable-version3 --arch=armv7-a --cpu=armv7-a --cc=armv7a-linux-androideabi24-clang --cxx=armv7a-linux-androideabi24-clang++ --extra-libs='-L/home/taner/Projects/mobile-ffmpeg/prebuilt/android-arm/neon/cpu-features/lib -lndk_compat' --target-os=android --enable-neon --enable-asm --enable-inline-asm --build-suffix=_neon --enable-cross-compile --enable-pic --enable-jni --enable-optimizations --enable-swscale --enable-shared --enable-v4l2-m2m --disable-outdev=fbdev --disable-indev=fbdev --enable-small --disable-openssl --disable-xmm-clobber-test --disable-debug --enable-lto --disable-neon-clobber-test --disable-programs --disable-postproc --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-static --disable-sndio --disable-schannel --disable-securetransport --disable-xlib --disable-cuda --disable-cuvid --disable-nvenc --disable-vaapi --disable-vdpau --disable-videotoolbox --disable-audiotoolbox --disable-appkit --disable-alsa --disable-cuda --disable-cuvid --disable-nvenc --disable-vaapi --disable-vdpau --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-gmp --enable-gnutls --enable-libmp3lame --enable-libass --enable-iconv --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libxml2 --enable-libopencore-amrnb --enable-libshine --enable-libspeex --enable-libwavpack --enable-libkvazaar --enable-libilbc --enable-libopus --enable-libsnappy --enable-libsoxr --enable-libaom --enable-libtwolame --disable-sdl2 --enable-libvo-amrwbenc --enable-zlib --enable-mediacodec
I/mobile-ffmpeg: libavutil 56. 55.100 / 56. 55.100
libavcodec 58. 96.100 / 58. 96.100
I/mobile-ffmpeg: libavformat 58. 48.100 / 58. 48.100
libavdevice 58. 11.101 / 58. 11.101
libavfilter 7. 87.100 / 7. 87.100
libswscale 5. 8.100 / 5. 8.100
I/mobile-ffmpeg: libswresample 3. 8.100 / 3. 8.100
I/mobile-ffmpeg: Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/storage/emulated/0/Download/7b85de4d-6af2-4eea-be9d-0d13c7f7819f/001001.mp4':
Metadata:
major_brand :
I/mobile-ffmpeg: isom
minor_version :
I/mobile-ffmpeg: 512
compatible_brands:
I/mobile-ffmpeg: isomiso2mp41
I/mobile-ffmpeg: encoder :
Lavf58.48.100
I/mobile-ffmpeg: Duration:
00:00:29.60
, start:
I/mobile-ffmpeg: 0.000000
, bitrate:
466 kb/s
I/mobile-ffmpeg: Stream #0:0
(und)
I/mobile-ffmpeg: : Video: mpeg4 (mp4v / 0x7634706D), yuv420p, 640x480 [SAR 1:2 DAR 2:3], 336 kb/s
,
5 fps,
I/mobile-ffmpeg: 5 tbr,
10240 tbn,
5 tbc
I/mobile-ffmpeg: (default)
I/mobile-ffmpeg: Metadata:
handler_name :
VideoHandler
I/mobile-ffmpeg: Stream #0:1
I/mobile-ffmpeg: (und)
: Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s
(default)
I/mobile-ffmpeg: Metadata:
I/mobile-ffmpeg: handler_name :
SoundHandler
W/mobile-ffmpeg: Codec AVOption preset (Configuration preset) specified for output file #0 (/storage/emulated/0/Download/QuranYaser/7b85de4d-6af2-4eea-be9d-0d13c7f7819f/001001_sub.mp4) has not been used for any stream. The most likely reason is either wrong type (e.g. a video option with no video streams) or that it is a private option of some encoder which was not actually used for any stream.
I/mobile-ffmpeg: Stream mapping:
I/mobile-ffmpeg: Stream #0:0 -> #0:0
I/mobile-ffmpeg: (mpeg4 (native) -> mpeg4 (native))
I/mobile-ffmpeg: Stream #0:1 -> #0:1
(aac (native) -> aac (native))
I/mobile-ffmpeg: Press [q] to stop, [?] for help
frame= 0 fps=0.0 q=0.0 size= 0kB time=-577014:32:22.77 bitrate= -0.0kbits/s speed=N/A
I/mobile-ffmpeg: [Parsed_subtitles_0 @ 0xf35ee820] Shaper: FriBidi 1.0.9 (SIMPLE)
I/mobile-ffmpeg: [Parsed_subtitles_0 @ 0xf35ee820]
W/mobile-ffmpeg: [Parsed_subtitles_0 @ 0xf35ee820] No usable fontconfig configuration file found, using fallback.
[Parsed_subtitles_0 @ 0xf35ee820]
I/mobile-ffmpeg: [Parsed_subtitles_0 @ 0xf35ee820] Using font provider fontconfig
[Parsed_subtitles_0 @ 0xf35ee820]
W/mobile-ffmpeg: [graph 0 input from stream 0:0 @ 0xf35ee880] sws_param option is deprecated and ignored
I/mobile-ffmpeg: Output #0, mp4, to '/storage/emulated/0/Download/QuranYaser/7b85de4d-6af2-4eea-be9d-0d13c7f7819f/001001_sub.mp4':
I/mobile-ffmpeg: Metadata:
major_brand :
isom
I/mobile-ffmpeg: minor_version :
512
I/mobile-ffmpeg: compatible_brands:
I/mobile-ffmpeg: isomiso2mp41
encoder :
I/mobile-ffmpeg: Lavf58.48.100
Stream #0:0
I/mobile-ffmpeg: (und)
: Video: mpeg4 (mp4v / 0x7634706D), yuv420p, 640x480 [SAR 1:2 DAR 2:3], q=2-31, 200 kb/s
,
I/mobile-ffmpeg: 5 fps,
I/mobile-ffmpeg: 10240 tbn,
5 tbc
I/mobile-ffmpeg: (default)
Metadata:
I/mobile-ffmpeg: handler_name :
VideoHandler
encoder :
I/mobile-ffmpeg: Lavc58.96.100 mpeg4
Side data:
I/mobile-ffmpeg:
cpb:
bitrate max/min/avg: 0/0/200000 buffer size: 0
vbv_delay: N/A
I/mobile-ffmpeg: Stream #0:1
(und)
I/mobile-ffmpeg: : Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s
(default)
Metadata:
I/mobile-ffmpeg: handler_name :
SoundHandler
I/mobile-ffmpeg: encoder :
Lavc58.96.100 aac
I/mobile-ffmpeg: frame= 11 fps=0.0 q=2.0 size= 0kB time=00:00:03.59 bitrate= 0.1kbits/s speed=7.16x
I/mobile-ffmpeg: frame= 30 fps= 30 q=2.0 size= 256kB time=00:00:07.47 bitrate= 280.5kbits/s speed=7.44x
I/mobile-ffmpeg: frame= 50 fps= 33 q=2.0 size= 512kB time=00:00:11.54 bitrate= 363.5kbits/s speed=7.67x
I/mobile-ffmpeg: frame= 71 fps= 35 q=2.0 size= 768kB time=00:00:15.71 bitrate= 400.2kbits/s speed=7.83x
I/mobile-ffmpeg: frame= 92 fps= 37 q=2.0 size= 1024kB time=00:00:19.78 bitrate= 424.0kbits/s speed=7.88x
I/mobile-ffmpeg: frame= 110 fps= 36 q=2.0 size= 1280kB time=00:00:23.38 bitrate= 448.5kbits/s speed=7.75x
I/mobile-ffmpeg: frame= 128 fps= 36 q=2.0 size= 1280kB time=00:00:27.12 bitrate= 386.6kbits/s speed=7.71x
I/mobile-ffmpeg: frame= 148 fps= 38 q=8.4 Lsize= 1697kB time=00:00:29.40 bitrate= 472.9kbits/s speed=7.56x
video:1225kB audio:462kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead:
I/mobile-ffmpeg: 0.559634%
I/mobile-ffmpeg: [aac @ 0xbe48c800] Qavg: 163.999
here is a sample of srt file I am trying to merge:
1
00:00:00,000 --> 00:00:03,326
Text 1
2
00:00:03,326 --> 00:00:09,962
Text 2
3
00:00:09,962 --> 00:00:16,160
Text 3
4
00:00:16,160 --> 00:00:22,223
Text 4
any idea why the generated video does not contain the subtitle ?
Update
Based on below comment , I changed my code to use the latest ffmpeg-kit version , here is the new code
String cmd = "-i " + videoPath + " -vf subtitles=\"" + subtitlePAth + ":force_style='Alignment=10,Fontsize=18\" " +
outputVideoPath;
FFmpegKit.executeAsync(cmd, new FFmpegSessionCompleteCallback() {
@Override
public void apply(FFmpegSession session) {
}
}, new LogCallback() {
@Override
public void apply(com.arthenica.ffmpegkit.Log log) {
}
}, new StatisticsCallback() {
@Override
public void apply(Statistics statistics) {
}
});`
and here is the updated log
ffmpeg version v4.5-dev-3393-g30322ebe3c Copyright (c) 2000-2021 the FFmpeg developers
built with Android (7155654, based on r399163b1) clang version 11.0.5 (https://android.googlesource.com/toolchain/llvm-project 87f1315dfbea7c137aa2e6d362dbb457e388158d)
configuration: --cross-prefix=arm-linux-androideabi- --sysroot=/files/android-sdk/ndk/22.1.7171670/toolchains/llvm/prebuilt/linux-x86_64/sysroot --prefix=/storage/light/projects/ffmpeg-kit/prebuilt/android-arm-neon/ffmpeg --pkg-config=/usr/bin/pkg-config --enable-version3 --arch=armv7-a --cpu=armv7-a --target-os=android --enable-neon --enable-asm --enable-inline-asm --build-suffix=_neon --ar=arm-linux-androideabi-ar --cc=armv7a-linux-androideabi24-clang --cxx=armv7a-linux-androideabi24-clang++ --ranlib=arm-linux-androideabi-ranlib --strip=arm-linux-androideabi-strip --nm=arm-linux-androideabi-nm --extra-libs='-L/storage/light/projects/ffmpeg-kit/prebuilt/android-arm-neon/cpu-features/lib -lndk_compat' --disable-autodetect --enable-cross-compile --enable-pic --enable-jni --enable-optimizations --enable-swscale --disable-static --enable-shared --enable-pthreads --enable-v4l2-m2m --disable-outdev=fbdev --disable-indev=fbdev --enable-small --disable-xmm-clobber-test --disable-debug --enable-lto --disable-neon-clobber-test --disable-programs --disable-postproc --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-sndio --disable-schannel --disable-securetransport --disable-xlib --disable-cuda --disable-cuvid --disable-nvenc --disable-vaapi --disable-vdpau --disable-videotoolbox --disable-audiotoolbox --disable-appkit --disable-alsa --disable-cuda --disable-cuvid --disable-nvenc --disable-vaapi --disable-vdpau --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-gmp --enable-gnutls --enable-libmp3lame --enable-libass --enable-iconv --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libxml2 --enable-libopencore-amrnb --enable-libshine --enable-libspeex --enable-libdav1d --enable-libkvazaar --enable-libilbc --enable-libopus --enable-libsnappy --enable-libsoxr --enable-libtwolame --disable-sdl2 --enable-libvo-amrwbenc --enable-libzimg --disable-openssl --enable-zlib --enable-mediacodec
libavutil 57. 13.100 / 57. 13.100
libavcodec 59. 15.102 / 59. 15.102
libavformat 59. 10.100 / 59. 10.100
libavdevice 59. 1.100 / 59. 1.100
libavfilter 8. 21.100 / 8. 21.100
libswscale 6. 1.102 / 6. 1.102
libswresample 4. 0.100 / 4. 0.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/storage/emulated/0/Download/7b85de4d-6af2-4eea-be9d-0d13c7f7819f/001001.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2mp41
encoder : Lavf59.10.100
Duration: 00:00:29.60, start: 0.000000, bitrate: 467 kb/s
Stream #0:0[0x1](und): Video: mpeg4 (mp4v / 0x7634706D), yuv420p(tv, bt470bg/bt709/bt709), 640x480 [SAR 1:2 DAR 2:3], 336 kb/s, 5 fps, 5 tbr, 10240 tbn (default)
Metadata:
handler_name : VideoHandler
vendor_id : [0][0][0][0]
Stream #0:1[0x2](und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 129 kb/s (default)
Metadata:
handler_name : SoundHandler
vendor_id : [0][0][0][0]
[mpeg4 @ 0xbacc1080] The "sub_text_format" option is deprecated: Deprecated, does nothing
[aac @ 0xbacc1400] The "sub_text_format" option is deprecated: Deprecated, does nothing
Stream mapping:
Stream #0:0 -> #0:0 (mpeg4 (native) -> mpeg4 (native))
Stream #0:1 -> #0:1 (aac (native) -> aac (native))
Press [q] to stop, [?] for help
[Parsed_subtitles_0 @ 0xf35141e0] libass API version: 0x1502000[Parsed_subtitles_0 @ 0xf35141e0]
[Parsed_subtitles_0 @ 0xf35141e0] libass source: commit: 0.15.2-0-gc967a5a3d9ec0d36af1148b3fdf2f307a21dd122[Parsed_subtitles_0 @ 0xf35141e0]
[Parsed_subtitles_0 @ 0xf35141e0] Shaper: FriBidi 1.0.11 (SIMPLE) HarfBuzz-ng 3.2.0 (COMPLEX)[Parsed_subtitles_0 @ 0xf35141e0]
[Parsed_subtitles_0 @ 0xf35141e0] No usable fontconfig configuration file found, using fallback.[Parsed_subtitles_0 @ 0xf35141e0]
[Parsed_subtitles_0 @ 0xf35141e0] Using font provider fontconfig[Parsed_subtitles_0 @ 0xf35141e0]
[Parsed_subtitles_0 @ 0xf35141e0] fontselect: failed to find any fallback with glyph 0x0 for font: (Arial, 400, 0)[Parsed_subtitles_0 @ 0xf35141e0]
Output #0, mp4, to '/storage/emulated/0/Download/7b85de4d-6af2-4eea-be9d-0d13c7f7819f/001001_sub5.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2mp41
encoder : Lavf59.10.100
Stream #0:0(und): Video: mpeg4 (mp4v / 0x7634706D), yuv420p(tv, bt470bg/bt709/bt709, progressive), 640x480 [SAR 1:2 DAR 2:3], q=2-31, 200 kb/s, 5 fps, 10240 tbn (default)
Metadata:
handler_name : VideoHandler
vendor_id : [0][0][0][0]
encoder : Lavc59.15.102 mpeg4
Side data:
cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: N/A
Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
Metadata:
handler_name : SoundHandler
vendor_id : [0][0][0][0]
encoder : Lavc59.15.102 aac
frame= 1 fps=0.0 q=5.7 size= 0kB time=00:00:01.55 bitrate= 0.2kbits/s speed= 2.4x
frame= 10 fps=8.7 q=2.0 size= 0kB time=00:00:03.50 bitrate= 0.1kbits/s speed=3.04x
frame= 20 fps= 12 q=2.0 size= 0kB time=00:00:05.36 bitrate= 0.1kbits/s speed=3.24x
frame= 32 fps= 15 q=2.0 size= 256kB time=00:00:07.87 bitrate= 266.5kbits/s speed=3.65x
frame= 45 fps= 17 q=2.0 size= 256kB time=00:00:10.49 bitrate= 199.8kbits/s speed=3.95x
frame= 58 fps= 18 q=2.0 size= 512kB time=00:00:12.97 bitrate= 323.2kbits/s speed=4.11x
frame= 69 fps= 19 q=2.0 size= 768kB time=00:00:15.23 bitrate= 413.1kbits/s speed=4.16x
frame= 81 fps= 19 q=2.0 size= 768kB time=00:00:17.60 bitrate= 357.5kbits/s speed=4.23x
frame= 92 fps= 20 q=2.0 size= 1024kB time=00:00:19.85 bitrate= 422.6kbits/s speed=4.26x
frame= 102 fps= 20 q=2.0 size= 1024kB time=00:00:21.89 bitrate= 383.1kbits/s speed=4.24x
frame= 115 fps= 20 q=2.0 size= 1280kB time=00:00:24.40 bitrate= 429.7kbits/s speed=4.31x
frame= 126 fps= 20 q=2.0 size= 1280kB time=00:00:26.67 bitrate= 393.0kbits/s speed=4.32x
frame= 139 fps= 21 q=2.0 size= 1536kB time=00:00:29.28 bitrate= 429.8kbits/s speed=4.39x
frame= 148 fps= 22 q=8.4 Lsize= 1701kB time=00:00:29.40 bitrate= 473.9kbits/s speed=4.34x
video:1225kB audio:466kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.561835%
[aac @ 0xbacc2200] Qavg: 482.514
I ran into the same problem and was able to fix it by reading the comments in this post.
As described here ffmpeg requires a valid fontconfig configuration to render subtitles. I achieved this by using the following code:
Change "app/src/main/assets/fonts" to where your font directory is located.