我正在尝试使用ffmpeg将文本字幕添加到.mp4容器中:
ffmpeg -i input.mp4 -i input.srt -map 0.0 -map 0.1 -map 1.0 output.mp4
Run Code Online (Sandbox Code Playgroud)
当我试图运行这一行时,它给了我一个错误:
流映射的数量必须与输出流的数量匹配.
如果我尝试将mp4更改为mkv(虽然mp4支持文本字幕),如下所示:
ffmpeg -i input.mp4 -i input.srt -map 0.0 -map 0.1 -map 1.0 output.mkv
Run Code Online (Sandbox Code Playgroud)
它正确地映射了流,但是给出了一个错误:
未找到输出流#0.2的编码器(编解码器ID 94210)
当我发射
ffmpeg -codecs
Run Code Online (Sandbox Code Playgroud)
我可以看到支持srt编解码器作为解码器和编码器,但是我不确定用于mp4和mkv subs编码的是什么,以及我是需要打开它还是单独编译.
我一直在尝试使用.srt文件作为定时文本源(仅适用于android 4.1+ http://developer.android.com/about/versions/android-4.1.html#Multimedia).第一个问题与获取.srt文件的文件描述符有关(在assets文件夹中,你将如何在应用程序中捆绑它?).该文件会自动压缩,因此您甚至无法在不更改编译设置或执行自定义构建的情况下查看该文件.最简单的解决方案是将.srt文件重命名为.jpg,以便它不会被压缩,openFD方法仍然有效.我现在添加TimedTextSource:
_myMP.addTimedTextSource(getAssets().openFd("captions.jpg").getFileDescriptor(), MediaPlayer.MEDIA_MIMETYPE_TEXT_SUBRIP);
Run Code Online (Sandbox Code Playgroud)
现在,文件加载正确使用myMP.getTrackInfo()来获取的曲目列表,可以看到,添加定时文本源之后,第六赛道的类型是其定时文本轨道输入"3".我已经使用selectTrack来选择此曲目,如谷歌文档中所述,但在这样做之后,我的TimedTextListener上没有出现任何字幕:
_myMP.setOnTimedTextListener(new OnTimedTextListener(){
@Override
public void onTimedText(MediaPlayer mp, TimedText text) {
if (text!=null)
Log.d("TimedText", text.getText());
}
});
Run Code Online (Sandbox Code Playgroud)
仅触发一次(我在文件中有20个定时文本事件),但text参数始终为null.我已经做了搜索,并不能找到使用timeText的单个加工代码示例,它不会出现在任何样本项目中,有字面上没有比谷歌API文档等,但据我可以告诉文档,没有人张贴了它的工作实例.我在更新到Android 4.2的谷歌Nexus上测试了这个
我的目标是从一组 youtube 视频中下载自动字幕。(我只是想根据一个查询获取视频信息和视频的字幕)我看到的第一件事是,如果您不是所有者,则无法下载字幕。但我不想要所有者上传的字幕,我只需要自动的。
为此,我看到了一些解决方案,其中大部分都带有外部应用程序。其中之一是通过这个 URL:http : //video.google.com/timedtext? type=track&v=3wszM2SA12E&name=Automatic&lang=en 问题是:
Youtube API 是否提供访问此信息的方法?
先感谢您!!
我检查了FFMpeg文档和许多论坛,并找出正确的命令行来从.MP4视频中提取字幕应如下所示:
ffmpeg -i video.mp4 -vn -an -codec:s:0 srt out.srt
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误,这让我怀疑这是否可行:
打开输出流#0的编码器时出错:0 - 可能是不正确的参数,如bit_rate,rate,width或height
使用ffmpeg -codecs
,我可以确认ffmpeg应该能够编码subrip字幕.
使用ffmpeg -i video.mp4
,我可以看到视频中嵌入了两个字幕轨道:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video.mp4':
...
Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 720x572 [SAR 64:45 DAR 256:143], 1341 kb/s, 25 fps, 25 tbr, 90k tbn, 180k tbc
Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 191 kb/s
Stream #0:2(fra): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 191 kb/s
Stream …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用AVFoundation AVPlayer缓存srt文件并使用mp4视频文件播放它们.流媒体与webVTT字幕工作正常,但我还需要缓存视频和字幕.我想知道这是否可行或存在可能的解决方法?提前致谢.
我终于得出结论,google-chrome不支持.srt,因为WEBVTT是HTML5标准.
现在我想知道这个决定背后的原因是什么.
似乎google-chrome也可能支持.srt,因为:
在WEBVTT中有什么更好的东西使.srt过时了吗?
有没有可以转换格式的应用.vtt
程序.srt
?我尝试了 subtitleeditor,它不支持.vtt
. 如果有人知道任何可以用来执行相同操作的特定应用程序,请分享。
我用textTrack尝试了html5视频,它与.vtt(WebVTT)一起正常工作.但是,它不适用于.srt.
所以我的问题是html5是否支持chrome或firefox上的.srt?
我查看了w3中的信息,但没有关于srt的信息.
http://www.w3.org/TR/html5/embedded-content-0.html#attr-track-kind-subtitles
我也调查了一些球员.他们中的大多数解析.srt而不是html5视频textTrack.
所以我想在本机html5播放器中找到有关.srt字幕格式的任何文档.
谢谢
我有一个视频脚本 SRT 文件,其中包含传统 SRT 格式的线条。这是一个例子:
1
00:00:00,710 --> 00:00:03,220
Lorem ipsum dolor sit amet
consectetur, adipisicing elit.
2
00:00:03,220 --> 00:00:05,970
Dignissimos et quod laboriosam
iure magni expedita
3
00:00:05,970 --> 00:00:09,130
nisi, quis quaerat. Rem, facere!
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用 python 读取并解析此文件,删除(或跳过)包含数字字符串的行(例如 SKIP '1' & '00:00:00,710 --> 00:00:03,220 '),然后格式化剩余的文本行,以便将它们连接起来并以可读的格式呈现。这是我尝试生成的输出的示例:
Lorem ipsum dolor sat amet consectetur,adipisicing elit。Dignissimos et quod Laboriosam iure magni expedita nisi, quis quaerat。雷姆,面对吧!
这是我到目前为止想出的代码:
def main():
# Access folder in filesystem
# After parsing content of file, move to next …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 ffmpeg 将多种语言的字幕添加到视频中。我成功添加了一种语言,但似乎无法添加第二种语言。我使用这个简单的脚本为我的视频添加英文字幕。
ffmpeg -i %1 -i subs_eng.srt -map 0 -vcodec copy -acodec copy -scodec subrip -metadata:s:s:0 language=English "%~n1"_eng.mkv
Run Code Online (Sandbox Code Playgroud)
此外,我还运行另一个脚本来添加荷兰语字幕。
ffmpeg -i %1 -i subs_nl.srt -map 0? -vcodec copy -acodec copy -scodec subrip -metadata:s:s:1 language=Dutch "%~n1"_nl.mkv
Run Code Online (Sandbox Code Playgroud)
但每当我添加第二语言时,它似乎没有做任何事情。命令终端显示ffmpeg正在处理视频,但vlc媒体播放器中只有1种可用的字幕语言(第一种)。
我真的希望能够在两次拍摄中添加它,而不是在同一个脚本中,因为我的所有视频都没有两种语言。