添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
焦虑的手套  ·  通过Java ...·  1 月前    · 
傲视众生的饭卡  ·  GitHub - ...·  2 月前    · 
率性的红酒  ·  Tarantula Nebula, 30 ...·  3 月前    · 
潇洒的企鹅  ·  DateTime.Parse 方法 ...·  4 月前    · 
追风的牛肉面  ·  使用 Fetch Priority API ...·  4 月前    · 
悲伤的电影票  ·  使用make编译 | ...·  4 月前    · 

前言

最近打算制作一些视频,所以有了对无字幕版本资源的需求。一些资源网站倒是也有提供 Raws 原版资源,但是大多数还是会有字幕组加工后添加的字幕,于是藉此机会学习了一下如何使用 FFmpeg 移除视频的内嵌字幕。

FFmpeg

简介

FFmpeg 是一个通用媒体转换工具。它可以读取各种输入,包括实时抓取/记录设备,并为媒体流添加过滤器,或将其转码为多种输出格式。

工作原理

ffmpeg 有三大核心功能:

  • libavformat(格式处理):解析多媒体文件(例如 MP4、MKV、AVI),并处理 文件流
  • libavcode(编解码器):解码/编码视频、音频数据。
  • libavfilter(滤镜处理):对视频/音频进行处理,包括视频剪裁、旋转、分辨率或帧率调整等功能。
  • FFmpeg 处理多媒体文件的过程类似于一条流水线,依次经过多个关键步骤,以完成对音视频数据的解析、处理和重新封装。
    当通过 -i 指定输入的媒体文件后,ffmpeg 会调用 解复用器(Demuxer) 读取输入源,提取全局属性(如分辨率、帧率、音频采样率等)和基本 输入流 (例如视频流、音频流和字幕流等)。通过参数选择保留或丢弃特定的流,可以实现像是删除字幕、音频等功能。
    在提取出基本流后, ffmpeg 会根据需要将其传递给 解码器(Decoder) 进行解码,将压缩的音视频数据转换为 原始帧(Raw Frames) 。 如果用户选择直接复制流(如 -c copy ),则可以跳过解码步骤,直接将数据传递到后续的封装阶段。
    如果需要对音视频进行处理,解码后的原始帧会被送入 滤镜图(Filtergraph) 进行进一步的编辑,例如调整音量、裁剪画面、缩放分辨率、添加字幕或进行更复杂的音视频合成操作。
    FFmpeg 提供了两种滤镜处理方式: 简单滤镜图(Simple Filtergraph) 适用于单个输入和输出流的基本操作,而 复杂滤镜图(Complex Filtergraph) 则用于处理多个输入/输出流。
    经过滤镜处理后的音视频数据会被送入 编码器(Encoder) 进行重新压缩。最终,编码后的音视频流会交由 复用器(Muxer) 进行封装,生成最终的输出文件。
    ffmpeg流程图

    基本用法

    ffmpeg 的基本命令格式如下:

    1
    $ ffmpeg [全局选项] -i [输入文件] [输入选项] [输出选项] [输出文件]
  • 全局选项:

  • -loglevel \[level] 设置日志级别
  • -progress \[url] 以 JSON 格式输出进度信息
  • 输入选项:

  • -t \[N] 只处理前 N 秒

  • -ss \[hh:mm:ss] 从指定的时间开始处理

  • 流选择 (-map) :ffmpeg 中通过索引 (index) 指定某个流,并且索引 从0开始
    -map 0 选择第一个输入文件的所有流
    -map 0:v 选择第一个输入文件的视频流
    -map 1:a 选择第二个输入文件的音频流
    -map -1:s:1 不选择(删除)第二个输入文件的字幕流中的第二个流
    注意: 这里删除流需要在数字前添加 「 - 」号

  • 编解码选项
    -c:v [指定视频编码器] 例如 libx264、vp
    -c:a [指定音频编码器] 例如 aac、mp3
    -c copy 复制流,不进行编码操作
    -b:v [比特率] 设置视频比特率 例如 -b:v 2500k
    -r [视频帧率] 设置视频帧率 例如 -r 30
    -vf [视频滤镜] 应用视频滤镜 例如 “scale=1280:720”
    -af [音频滤镜] 应用音频滤镜 例如 “volume=1.5”

    ffmpeg 去除内封字幕

    在考虑删除视频中的字幕时,首先需要确定视频文件中封装的是 软字幕 。在资源网站想要获得无字幕的视频时,需要特别留意 [Raws]、[内封字幕] 等标签。其中带有 [Raws] 标签的资源,通常源自官方发布的蓝光 BD 版本这类原始资源。而带有 [内封字幕] 标签的资源才是能够通过 ffmpeg 实现去除字幕操作的素材。

    注意:不是内嵌字幕,内嵌字幕无法通过常规方式删除。

    如果资源没有标注上述标签,那就只能先将视频下载下来再做进一步查看。在此推荐使用 POTplayer 这款播放器。具体操作如下:在播放器中右键点击视频画面,选择 “字幕”>“关闭显示字幕” 选项。若执行此操作后字幕能够成功关闭,这就表明该视频的字幕流可被删除。
    接下来打开命令行终端,首先,在命令行中输入 ffmpeg -i input.mp4 指令,此操作可查看视频包含的所有流。确认无误后,执行 ffmpeg -i input.mp4 -map 0 -map -0:s -c copy output.mp4 就可以删除该视频的内封字幕了。操作完成后,生成的 “output.mp4” 即为去除字幕的视频文件。

  •