我得到了从mp4文件中检索字幕的作业
https://www.facebook.com/photo.php?v=161795267334572
我想知道如何通过java或c ++这样做,它是否依赖于mp4编码格式和
我想了解不同视频格式的基本概念和视频处理的基本概念。
答案 0 :(得分:10)
有几种字幕格式,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
使用X.Y从cmd(1)找到的曲目编号指示符。
答案 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命令使用的顺序,而不是一个由X.Y
获得的ffmpeg -i m.m4v
(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
答案 2 :(得分:1)
ffmpeg -i yourFile -map X:Y srt sub.srt
仅提取所需的曲目
答案 3 :(得分:0)
将代码更新到 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