我接到了一项从 mp4 文件中检索字幕的任务
我想知道如何通过 java 或 c++ 做到这一点,它是否取决于 mp4 编码格式和
我想了解不同视频格式的基本概念和视频处理的基本概念。
我接到了一项从 mp4 文件中检索字幕的任务
我想知道如何通过 java 或 c++ 做到这一点,它是否取决于 mp4 编码格式和
我想了解不同视频格式的基本概念和视频处理的基本概念。
有几种字幕格式,SRT,STL(主要由Apple使用)等......并且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
使用 XY 是您从 cmd (1) 中找到的曲目编号指示器。
这里的其他答案都不适用于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 命令的顺序,而不是使用X.Y
(input.stream) 获得的值ffmpeg -i m.m4v
这对我来说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
ffmpeg -i yourFile -map X:Y srt sub.srt
只提取需要的曲目
将代码更新到 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