FFMPEG 同时编码音频和强制字幕?

Posted

技术标签:

【中文标题】FFMPEG 同时编码音频和强制字幕?【英文标题】:FFMPEG encode audio and forced subtitles at same time? 【发布时间】:2017-01-08 07:46:11 【问题描述】:

我正在使用 ffmpeg windows 的最新静态版本。

我的输入文件(.mkv)是:

[video] - 1080, V_MPEG4/ISO/AVC, 14.6 Mbps, ID#0
[audio] - DTS 5.1, 1510 Kbps, ID#1
[subtitles] - S_TEXT/ASS Lossless English, ID#14

我的问题是:我转换了音频,以便我的目标播放器 XB1 控制台 (media support faq) 能够播放音频/视频。但是有时它很难听到或者部分可能是外语,所以我想在转换音频的同时强制英文字幕进入混音。

目前对于音频,我使用以下命令

ffmpeg -i input.mkv -codec copy -acodec ac3 output.mkv

我可以以某种方式绑定强制字幕(到视频上),以节省获取 output.mkv 并尝试强制打开字幕的额外过程吗?

编辑:我尝试使用以下命令提取字幕以便能够编辑它们

ffmpeg -i Movie.mkv -map 0:s:14 subs.srt

但是我得到了错误:Stream map '0:s:14' matches no streams

Edit2:尝试提取字幕并成功

ffmpeg -i input.mkv -map 0:14 -c copy subtitles.ass

但仍然希望强制字幕!

另外 - 这个问题的一点好处 - 我可以以某种方式提取 .ass 文件并对其进行编辑以只为外国部分生成字幕 - 所以英语音频在电影中没有字幕,但外国音频确实有字幕?

干杯

编辑3:

当我尝试同时使用这两个命令时(我之前提到的音频转换器和来自ffmpeg wiki 的一个)

ffmpeg -i input.mkv -codec copy -acodec ac3 -vf "ass=subs.ass" output.mkv

我从 ffmpeg 收到以下错误,

Filtergraph 'ass=subs.ass' was defined for video output stream 0:0 but codec copy was selected.
Filtering and streamcopy cannot be used together.

【问题讨论】:

【参考方案1】:

由于您的媒体播放器不支持字幕,因此必须将文本刻录到视频图像上。为此,请使用

ffmpeg -i input.mkv -vf "ass=subs.ass" -c:v libx264 -crf 20 -c:a ac3 output.mkv

这将重新编码视频,因为正在添加文本。 CRF 值控制视频质量。较低的值会产生更好的质量但更大的文件。 18 到 28 是一个不错的尝试范围。

【讨论】:

以上是关于FFMPEG 同时编码音频和强制字幕?的主要内容,如果未能解决你的问题,请参考以下文章

FFMPEG 更改音频和字幕的 fps 并合并 2 个文件

FFmpegffplay 播放视频命令 ( 播放 | 暂停 | 停止 | 音量控制 | 进度控制 | 音频流 / 视频流 / 字幕流 / 节目切换 )

FFmpeg基础库编程开发学习笔记——音频常见格式及字幕格式

FFmpeg在JAVA中的使用-音频提取&字幕压缩

使用PowerShell和FFMPEG将音频和字幕源条带化并添加到INDEX.M3U8

android ffmpeg视频添加字幕和配音