Fontconfig error: Cannot load default config file
[Parsed_ass_0 @ 00000000042c33c0] No usable fontconfig configuration file found, using fallback.
Fontconfig error: Cannot load default config file
[Parsed_ass_0 @ 00000000042c33c0] Added subtitle file: ‘subs.ass’ (3 styles, 68 events)
解决办法参考:
https://superuser.com/questions/794014/ffmpeg-ass-filter-not-working
http://www.yaosansi.com/post/ffmpeg-burn-subtitles-into-video/
也就是要配置一下fonts.conf。
windows下
增加环境变量:
export FC_CONFIG_DIR=$(pwd)/conf
export FONTCONFIG_FILE=$(pwd)/conf/fonts.conf
export FONTCONFIG_PATH=$(pwd)/conf
export
VS2013调试设置环境变量:
ffmpeg.exe所在的目录ffmpeg-3.3\msvc\MSVC_ffmpeg-3.0\Debug,下面新增conf目录,config目录下面放fonts.conf,fonts.conf内容如下:
<?xml version="1.0"?>
<fontconfig>
<dir>C:\WINDOWS\Fonts</dir>
<match target="pattern">
<test qual="any" name="family"><string>mono</string></test>
<edit name="family" mode="assign"><string>monospace</string></edit>
</match>
<match target="pattern">
<test qual="all" name="family" compare="not_eq"><string>sans-serif</string></test>
<test qual="all" name="family" compare="not_eq"><string>serif</string></test>
<test qual="all" name="family" compare="not_eq"><string>monospace</string></test>
<edit name="family" mode="append_last"><string>sans-serif</string></edit>
</match>
<alias>
<family>Times</family>
<prefer><family>Times New Roman</family></prefer>
<default><family>serif</family></default>
</alias>
<alias>
<family>Helvetica</family>
<prefer><family>Arial</family></prefer>
<default><family>sans</family></default>
</alias>
<alias>
<family>Courier</family>
<prefer><family>Courier New</family></prefer>
<default><family>monospace</family></default>
</alias>
<alias>
<family>serif</family>
<prefer><family>Times New Roman</family></prefer>
</alias>
<alias>
<family>sans</family>
<prefer><family>Arial</family></prefer>
</alias>
<alias>
<family>monospace</family>
<prefer><family>Andale Mono</family></prefer>
</alias>
<match target="pattern">
<test name="family" compare="eq">
<string>Courier New</string>
</test>
<edit name="family" mode="prepend">
<string>monospace</string>
</edit>
</match>
<match target="pattern">
<test name="family" compare="eq">
<string>Courier</string>
</test>
<edit name="family" mode="prepend">
<string>monospace</string>
</edit>
</match>
</fontconfig>
字幕嵌入视频
下面的命令可以将字幕合成到视频里面,成为硬字幕,不是放到mkv容器里面,所以需要重新编码:
ffmpeg -ss 00:01:15 -i "input.mkv" -vf ass=" input.ass" -t 00:02:00 -map 0:0 -acodec copy " output.mkv"
字幕放入mkv容器
片源input.mkv,字幕input.ass。原始片源有mkv内嵌字幕,ffmpeg没有找到参数来去掉mkv内嵌的字幕,可以用MKVToolNix GUI来去掉(https://mkvtoolnix.download/index.html)。MKVToolNix GUI版本12.0.0,其64位版本在win7下有问题,报mkvmerge启动不了,32位的可以在win7下运行。

选择混流,打开input.mkv后,不要勾选SubRip/SRT,然后单击“开始混流”按钮,处理完后的码流就没有内嵌字幕了。
libass好像只支持UTF-8编码的字幕,libass/ass.c里面的process_text函数,只处理了0xEFBBBF这个BOM前缀:
while (1) {
if ((p == '\r') || (p == '\n'))
else if (p[0] == '\xef' && p[1] == '\xbb' && p[2] == '\xbf')
p += 3;
break;
BOM前缀编码:
Byte-order mark Description
EF BB BF UTF-8
FF FE UTF-16 aka UCS-2, little endian
FE FF UTF-16 aka UCS-2, big endian
00 00 FF FE UTF-32 aka UCS-4, little endian.
00 00 FE FF UTF-32 aka UCS-4, big-endian.
所以非UTF-8编码的字幕,需要用aegisub32.exe转换一下,打开字幕后,菜单->文件->导出字幕,在下面的对话框中的“文字编码”选择UTF-8,点导出就可以保存成UTF-8编码的字幕:

ffmpeg命令合成mkv:
ffmpeg -i input.mkv -i input.ass -c copy output.mkv
不能用-map参数,-map参数会重新编码并将字幕嵌入到视频上面,成为硬字幕。
将上面的命令中输出文件改成mp4后缀,不能将字幕放入mp4容器,有可能mp4只支持苹果的MOV text。
ffmpeg处理字幕ffmpeg加载font以ass为例,第一次用ffmpeg将ass字幕加到视频里面的时候报下面的错误: Fontconfig error: Cannot load default config file [Parsed_ass_0 @ 00000000042c33c0] No usable fontconfig configuration fil...
在使用 FFmpeg 的 subtitles filter 或 ass filter 时,可能会出现类似于下面这样的错误:
Fontconfig error: Cannot load default config file
[Parsed_subtitles_0 @ 0000000004b181c0] No usable fontconfig configuration file found,
Author:lihaiping1603@aliyun.com
Create:2019-09-04
最近对ffmpeg给视频文件添加字幕效果,进行了一些调试和研究,个人做个笔记,方便以后查找和使用。
将字幕加入到视频文件中,有两种方式:
1)第一种是将字幕以除了音视频之外的字幕流的形式添加到视频文件格式中,然后播放器在...
有些电影的视频与字幕是分离的,如果在视频中嵌入字幕,那么观看起来会更方便一些,不必在播放前额外去加载字幕文件。
在Linux中,可以使用ffmpeg命令实现上述功能。
ffmpeg -i infile.mp4 -i infile.srt -c copy -c:s mov_text outfile.mp4
注意,-c copy -c:s m...
### 回答1:
Java ffmpeg 字幕合成是指使用Java编程语言和ffmpeg这个强大的多媒体处理工具,将视频和字幕文件合成为一个新的视频文件的过程。一般来说,字幕文件可以是SRT、ASS、SSA等常见的格式,而视频文件格式则没有限制。
在Java中使用ffmpeg进行字幕合成的步骤如下:
1.下载和安装ffmpeg,并配置好环境变量。
2.在Java程序中引入ffmpeg相关的库文件。
3.编写Java代码,使用ProcessBuilder类创建一个新的进程,并在命令行中传递ffmpeg命令和参数,用于指定输入文件、输出文件、字幕文件及其格式等信息。
4.启动进程,并等待ffmpeg的执行结果。
5.如果合成成功,则可以得到一个新的视频文件,包含了原始视频和字幕。如果有必要,可以使用Java程序来对新文件进行进一步处理。
Java ffmpeg 字幕合成可以应用于很多场景,比如制作字幕影片、合成公司宣传视频等。如果您需要使用Java ffmpeg 字幕合成技术,需要掌握ffmpeg的使用方法和Java语言的编程技巧。同时,您还需要了解视频和字幕文件之间的格式转换和编码等知识,以确保最终合成的文件质量和兼容性。
### 回答2:
Java是一种广泛使用的编程语言,被用于开发各种类型的应用程序,而FFmpeg是一个流行的开源视频处理工具。在Java中使用FFmpeg进行字幕合成是非常常见的。字幕合成是将字幕嵌入到视频中的过程,使得观众可以看到字幕并理解视频的内容。
为了在Java中使用FFmpeg进行字幕合成,首先需要下载并安装FFmpeg程序。然后,可以使用Java中的ProcessBuilder类来调用FFmpeg程序并使用它的命令行参数来合成字幕。简单的代码示例如下:
ProcessBuilder pb = new ProcessBuilder("ffmpeg", "-i", "video.mp4", "-vf", "subtitles=subs.srt", "output.mp4");
pb.start();
在这个例子中,我们使用ProcessBuilder来创建一个新的进程并运行FFmpeg程序,使用其命令行参数来合成字幕。该命令行参数包括输入视频文件名(video.mp4)、字幕文件名(subs.srt)以及输出文件名(output.mp4)。
在Java中使用FFmpeg合成字幕可以让开发者方便地为自己的视频添加字幕,并提供更好的观看体验。此外,由于Java是跨平台的编程语言,因此该过程在不同平台上都可以使用。
### 回答3:
Java FFMPEG 字幕合成是一种将字幕和视频合并在一起,生成新的视频文件的技术。在实际应用中,通常使用 FFMPEG 提供的 API 将字幕文件与视频文件进行合并。使用 Java 编程语言可以方便地操作 API,并实现将字幕和视频合并成一段新的视频的功能。在合成字幕时,需要指定字幕的样式、字体、位置、颜色、大小以及出现和消失的时间等参数。Java 语言具有简单、易读、易于维护和交互性好等特点,利用 Java 语言编写的 FFMPEG 字幕合成程序可以实现更好的用户交互性。另外,合成的视频文件的质量在很大程度上依赖于 FFMPEG 命令行工具的配置。因此,在编写 Java FFMPEG 字幕合成程序时,需要根据具体情况,适时地进行参数调整和优化,确保合成出来的视频文件质量达到最佳效果。总之,Java FFMPEG 字幕合成技术为用户提供了一个可定制和灵活的视频字幕合成方案,既方便了用户使用,又提高了视频合成的质量。