【问题标题】:Extracting subtitles from mp4从mp4中提取字幕
【发布时间】:2013-06-27 14:48:18
【问题描述】:

我接到了一个从 mp4 文件中检索字幕的任务

我想知道如何做到这一点,通过 java 或 c++,它是否取决于 mp4 编码格式和

我想了解不同视频格式的基本概念和视频处理的基本概念。

【问题讨论】:

  • 找到了mp4解析器,但找不到操作字幕的确切API

标签: mp4 video-processing subtitle


【解决方案1】:

有好几种字幕格式,SRT、STL(主要是苹果用的)等等……而且ffmpeg支持很多http://ffmpeg.org/general.html#Subtitle-Formats

ffmpeg 可以通过 cmd 行以下命令序列提取它们:

1) 进行轨迹识别

ffmpeg -i yourFile

2) 用

提取字幕轨道
ffmpeg -i yourFile -vn -an -codec:s:X.Y srt 
sub.srt

用 X.Y 表示您从 cmd (1) 中找到的曲目编号指示符。

【讨论】:

    【解决方案2】:

    对于包含多个字幕的m.m4v,这里的其他答案都不适合我。但以下确实有效(对于 .m4v 和 .mp4 文件):

    ffmpeg -i m.m4v -map 0:s:0 eng.srt
    ffmpeg -i m.m4v -map 0:s:1 ita.srt
    ffmpeg -i m.m4v -map 0:s:2 fre.srt
    

    在我的m.m4v 中有 3 个字幕流,第一是英语,第二是意大利语,第三是法语。它似乎是用于 ffmpeg 命令的顺序,而不是使用 ffmpeg -i m.m4v 获得的 X.Y (input.stream) 值

    我的m.m4v 给了:

    Stream #0:2(eng): Subtitle: mov_text (tx3g / 0x67337874), 0 kb/s (default)
    Metadata:
      handler_name    : SubtitleHandler
    Stream #0:3(ita): Subtitle: mov_text (tx3g / 0x67337874), 0 kb/s
    Metadata:
      handler_name    : SubtitleHandler
    Stream #0:4(fre): Subtitle: mov_text (tx3g / 0x67337874), 0 kb/s
    Metadata:
      handler_name    : SubtitleHandler
    

    我在 Macbook Pro 2015 上使用 Mac OS 10.4.5

    顺便说一句,如果只有一个字幕轨道,那么你会使用:

    ffmpeg -i m.m4v -map 0:s:0 sub.srt
    

    【讨论】:

      【解决方案3】:

      ffmpeg -i yourFile -map X:Y srt sub.srt

      只提取需要的曲目

      【讨论】:

        【解决方案4】:

        将代码更新到 v5 版本。

        效果不错。

        用法:

        ffmpegSubExtract mp4 srt

        ffmpegSubExtract mp4 srt 1

        @echo off
        cls
        
        if "%1"=="" (
        echo.
        echo Usage:
        echo ffmpegSubExtract mp4 srt
        echo ffmpegSubExtract mp4 srt 1
        goto :eof )
        
        if "%2"=="" (
        echo.
        echo Usage:
        echo ffmpegSubExtract mp4 srt
        echo ffmpegSubExtract mp4 srt 1
        goto :eof )
        
        set fle=%1
        set ext=%2
        set str=%3
        
        for %%i in ("*.%fle%") do (set fname=%%i) & call :rename
        goto :eof
        
        :rename
        if exist "%fname:~0,-4%.%ext%" (
            del "%fname:~0,-4%.%ext%" )
        
        if "%str%"=="" (
            set str=0 )
        
        
        if "%ext%" == "srt" (
            ffmpeg -i "%fname%" -map 0:s:%str% "%fname:~0,-4%.%ext%"
        ) else (
            ffmpeg -i "%fname%" -c copy -map 0:s:%str% "%fname:~0,-4%.%ext%" 
        )
        
        goto :eof
        
        rem come code from here
        rem https://stackoverflow.com/questions/17388253/extracting-subtitles-from-mp4
        rem https://superuser.com/questions/583393/how-to-extract-subtitle-from-video-using-ffmpeg
        

        【讨论】:

          猜你喜欢
          • 2012-05-30
          • 2014-01-07
          • 2012-01-07
          • 2013-09-10
          • 2015-01-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-01-11
          相关资源
          最近更新 更多