使用ffmpeg压制硬字幕与logo

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用ffmpeg压制硬字幕与logo相关的知识,希望对你有一定的参考价值。

参考技术A 2018.9.17更新
命令改成这样,不然将会压制出来两条视频轨道,一条有字幕一条没有 = =

btw, [1]scale=100:100[logo]; 这一句顾名思义是缩放的意思

%pos% 可以选下面这几种

这个需求其实挺变态的
我之前压制硬字幕的命令是
ffmpeg -i input.mp4 -vf "ass=input.ass" output.mp4
压制logo的命令是
ffmpeg -i input.mp4 -i logo.ico -filter_complex overlay output.mp4

于是我想当然地把这两条语句结合
ffmpeg -i input.mp4 -i logo.ico -filter_complex overlay -vf "ass=input.ass" output.mp4
结果出现了报错

大致意思就是 -vf 选项不能和 -filter_complex 滤镜一起使用
头大

然后一番搜索之后,照着 这篇 的解释和 这篇 ,拼凑出了下面这条命令

我说一下自己的理解
首先看到命令中有两个输入,一个是视频文件,为 input0,一个是 logo 图像,为 input1.
filter_complex 滤镜的参数里面 [0:v] 的 0 是 input0, v 代表处理的是视频而不是音频,处理音频的待会儿再讲
整体来看, [0:v][1:v]overlay[logo] 是一个2输入1输出的管子,管子把 input1 的视频流(此处为一张图)叠加到 input0 的上面,出来的产品叫做 [logo]
然后下一句 [logo]ass=source.ass[sub] 中,可以把中间那个ass滤镜当做一个1输入1输出的管子,这个管子对每个视频流进行处理,在视频上打上字幕,出来的产品叫做 [sub]
最终把这个 [sub] 映射到 output.final.mp4 上面

这样处理出来的视频logo和字幕都有了,但还有一个问题:音频流全部丢失,处理出来的是无声视频,大致猜测是由于我们只处理了视频流,导致音频流丢失。

又是一番搜索,终于在 这里 看到了一点蛛丝马迹

也就是把第一个输入(input0)的第一个音轨(stream0)映射到输出中

手残的我在命令里加入了一句 -map 0,0

误打误撞居然有声音了
我也不知道为什么,难道说是我的版本把这个命令的用法改了??有人知道吗

附上我的环境

FFmpeg 硬编码字幕 fontconfig 错误

【中文标题】FFmpeg 硬编码字幕 fontconfig 错误【英文标题】:FFmpeg hardcoding subtitles fontconfig error 【发布时间】:2017-09-14 06:43:49 【问题描述】:

我试图在虚拟机上运行命令:ffmpeg -i vid1.mp4 -vf "ass=subtitle.ass" vidOut.mp4 并遇到错误:

Fontconfig error: Cannot load default config file
No usable fontconfig configuration file found, using fallback.
Fontconfig error: cannot load default config file

ffmpeg 然后完成了命令运行,但它生成的视频没有字幕。我尝试添加一个 fonts.conf 文件,并设置FC_CONFIG_FILE= C:\ffmpeg\fonts.conf and FC_CONFIG_DIR= C:\ffmpeg\,但我仍然遇到同样的错误。

我在我的普通机器上使用相同的 ASS 和 mp4 文件运行相同的代码,并且代码运行良好。对我的问题的任何建议将不胜感激。

编辑:我正在使用 FFmpeg 版本 3.3.3 的静态构建

【问题讨论】:

【参考方案1】:

事实证明,在使用命令时直接指定 ffmpeg 的路径可以解决问题。 C:\ffmpeg\bin\ffmpeg -i vid1.mp4 -vf "ass=subtitle.ass" vidOut.mp4 完美运行

【讨论】:

以上是关于使用ffmpeg压制硬字幕与logo的主要内容,如果未能解决你的问题,请参考以下文章

ffmpeg显卡快速压制单/双语字幕视频

FFmpeg 硬编码字幕 fontconfig 错误

批处理使用ffmpeg为mp4批量加入字幕

ffmpeg - 添加和删除字幕而不更改视频

合并视频文件和字幕

android 中使用ffmpeg,将视频加入字幕,用ass文件,在PC上可以,但在Android上一直不行