在 WPF MediaElement 中显示视频的字幕
我正在开发一个 WPF 应用程序,该应用程序将视频剪辑显示为工作流程的一部分。 我通过使用 MediaElement 播放本地托管(而非流式传输)的 AVI 文件来实现此目的。 效果很好。
然而,我刚刚收到一个新要求,要求允许在播放剪辑时显示字幕。 我不知道解决这个问题的最佳方法。 我隐约知道WMP能够在播放剪辑时显示单独的字幕文件,但我不知道WPF是否支持此功能?
我可以在 WPF 中本地执行此操作吗? 如果没有,我有什么选择?
我的后备方法是要求客户将字幕直接烘焙到视频文件中,但我更愿意找到更好的方法来处理这个问题。
I'm working on a WPF application that displays video clips as part of the workflow. I'm doing this by using MediaElement to play locally hosted (not streamed) AVI files. Works great.
However, I was just handed a new requirement to allow the display of subtitles while the clip is playing. I have no idea of the best way to go about this. I'm vaguely aware that WMP has the ability to display separate subtitle files when a clip is playing, but I don't know if WPF supports this?
Can I do this natively in WPF? If not, what are my options?
My fallback approach would be to require the client to bake the subtitles directly into the video file, but I'd prefer to find a better way to handle this.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
好吧,如果您对字幕的要求只是覆盖 MediaElement 的文本,那么是的,WPF 当然可以支持这一点。 您只需将 MediaElement 与 TextBlock 一起放入 Grid 中。
真正的技巧是根据 MediaElement 中的时间更改 TextBlock Text 属性。 但可能有很多方法可以做到这一点; 首先想到的是使用绑定到 MediaElement.Position 属性。
Well, if your requirement for subtitles is simply text overlaying the MediaElement, then yes, WPF can certainly support this. You just need to put the MediaElement in a Grid along with a TextBlock.
The real trick will be changing the TextBlock Text property according to the time in the MediaElement. But there are probably a lot of ways to do this; the first that comes to mind is using a trigger bound to the MediaElement.Position property.
在WPF中你需要解析字幕文件并同步,你没有像Silverlight中的MarkerReached这样的事件。 但是您可以创建一个与视频同名的 smi(SAMI 文件)并将其放在同一文件夹中。 然后订阅 ScriptCommand 事件并在覆盖文本块中显示内容。
In WPF you need to parse the subtitles file and synchronize, you don't have the event like MarkerReached in the Silverlight. But you can create a smi (SAMI-file) with the same filename as your video and put it in the same folder. Then subscribe to the ScriptCommand event and show the content in the overlay textblock.