使用 VLC 在当前时间拉取特定帧

使用 VLC 在当前时间拉取特定帧

我正在尝试在 python 或 shell 中创建任何类型的命令来从正在播放或在 vlc 上流式传输的视频中提取一个特定的帧。

想象一下这样一个场景:我有一个视频文件,我在 VLC 上打开它并点击播放。我用 python 或 shell 命令提取遇到的第一帧,进行一些处理,处理完成后,我在视频到达的确切时间捕获另一帧。

老实说,如果我甚至可以让 VLC 为我提供我正在播放的视频的当前“时间”(电影中我们经历了多少小时:分钟:秒或任何时间),那就可以了,我可以使用 ffmpeg。

我正在运行 linux 14.04。

答案1

如果我甚至可以让 VLC 为我提供我正在播放的视频的当前“时间”......

这个可以的,VLC提供了很多接口,我们用telnet吧。


步骤 1:在 VLC 中启用 telnet

一次性按需方式:

vlc --extraintf telnet --telnet-port 4212 --telnet-password "foobar" video_file_to_play.avi

或永久配置。运行 VLC,工具->优先(或Ctrl+ P),则:

配置1

配置2

注意:此永久方法需要您重新启动 VLC。


第 2 步:测试

现在,您可以使用 telnet 控制 VLC。出现提示时,输入正确的密码。示例:

$ telnet localhost 4212
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
VLC media player 2.2.2 Weatherwax
Password: 
Welcome, Master
> get_time
30
>

如您所见,检索当前播放时间的命令是get_time。输入help以了解更多 VLC 命令,quit退出。也许您会发现snapshot它很有用。


步骤 3:在脚本中使用

相当简单的管道。这里我使用nc而不是telnet(这foobar是我的密码,请使用您的密码):

printf '%s\n' "foobar" "get_time" | nc localhost 4212

我的 VLC 返回:

VLC media player 2.2.2 Weatherwax
Password: ����
Welcome, Master
87
> Bye-bye!

所以我使用headtail仅提取相关行:

printf '%s\n' "foobar" "get_time" | nc localhost 4212 | head -n 4 | tail -n 1

不幸的是时间分辨率是 1 秒。我还没有找到检索当前帧号的命令。

相关内容