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

Posted

技术标签:

【中文标题】FFMPEG 更改音频和字幕的 fps 并合并 2 个文件【英文标题】:FFMPEG change fps of audio and subtitles and merge 2 files 【发布时间】:2019-12-12 13:37:14 【问题描述】:

我有 30 个 mkv 文件,其中包含多个音频流和多个字幕。

对于我尝试的每个文件:从该文件中提取荷兰语音频和字幕 (25fps) 并将其与另一个 mkv 文件(23.976216fps)合并

使用此命令,我似乎将荷兰语音频和字幕提取到 mkv 中:

ffmpeg -y -r 23.976216 -i "S01E01 - Example.mkv" -c copy -map 0:m:language:dut S01E01.mkv

但它不会将 fps 从 25 调整到 23.976216。 我想我会使用 mkvmerge 来合并两个 mkv,但它们需要是相同的帧率 任何人都知道我怎样才能使这项工作?谢谢! :)

【问题讨论】:

mkvmerge 也有改变帧率的东西。 @ZavenZareyan 我认为这仅适用于视频(可能是字幕)而不是音频 【参考方案1】:

视频的帧率与音频的帧率无关。他们是完全独立的。事实上,真的没有音频帧率这样的东西(嗯,有,但这是编解码器的副产品)。如果您通过丢帧来更改视频帧速率,则不会更改视频持续时间,因此不应更改音频持续时间。如果要放慢视频速度,则必须对音频进行解码、放慢速度(可能通过音高校正)并重新编码。

【讨论】:

我之前将视频从 25fps 更改为 23.976,它确实增加了视频的长度,这正是我想要的。但音频保持旧帧速率的长度。 “解码音频,放慢速度(可能通过音高校正)并重新编码”这对 FFMPEG 是否可行? 你会想要使用 atempo 过滤器。【参考方案2】:

这样的事情会将音频音高从标准 PAL 更改为 NTSC 帧速率(如果您的音轨是列表中的第二个,则该示例有效,-检查 ffmpeg -i video.mkv 并查看-)

ffmpeg -i video.mkv -vn -map 0:1 -filter:a atempo=0.95904 -y slowed-down-audio-to-23.976-fps.ac3

(23976/25000 = 0.95904 所以这是 NTSC 电影所需的转换帧率)

相反,您可以弄清楚如何将 NTSC 标准帧速率音频加速到 PAL 系统 (1.0427094)。

例如,如果您想添加从不同来源获得的质量更好的音轨,这个技巧就可以奏效。

【讨论】:

以上是关于FFMPEG 更改音频和字幕的 fps 并合并 2 个文件的主要内容,如果未能解决你的问题,请参考以下文章

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

FFMPEG - 转换具有多个音频和字幕的视频

android ffmpeg视频添加字幕和配音

使用 ffmpeg 更改要与视频合并的音频文件的音量

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

合并视频文件和字幕