发送 seek 命令到正在运行的 ffmpeg 实例

Posted

技术标签:

【中文标题】发送 seek 命令到正在运行的 ffmpeg 实例【英文标题】:Send seek command to running ffmpeg instance 【发布时间】:2016-01-17 20:29:05 【问题描述】:

我已经使用 ffmpeg 库创建了一个视频播放器,但想知道是否可以使用 ffmpeg.exe 和管道,特别是搜索部分。是否可以将搜索命令发送到正在运行的 ffmpeg.exe 实例?帮助中没有这样的命令,但它确实显示了可用于向过滤器发送命令的“c”命令。但是我找不到任何关于如何以这种方式处理过滤器的进一步文档,所有示例都假设命令行参数,也找不到过滤器是否可用于在视频中查找。

【问题讨论】:

有什么解决办法吗? @Harry nope.... 【参考方案1】:

实际上,搜索命令是一种记录在ffmpeg documentation:

movieamovie 都支持以下命令:

seek 使用“av_seek_frame”执行搜索。语法为:seek stream_index|timestamp|flags

stream_index:如果 stream_index 为 -1,则选择默认流,并且时间戳会自动从 AV_TIME_BASE 单位转换为特定于流的 time_base。 timestamp:时间戳以 AVStream.time_base 为单位,如果未指定流,则以 AV_TIME_BASE 为单位。 flags:选择方向和搜索模式的标志。

get_duration 以 AV_TIME_BASE 为单位获取电影时长。

我试过运行这样的命令:

ffmpeg -f lavfi -i 'movie=filename=myvid.mp4' -codec:v libx264 -an -f mpegts - > /dev/null

然后我按c并输入命令all -1 seek 0|3|0,但无论我尝试哪种组合,我都会返回相同的错误Command reply for stream 0: ret:-78 res:

我也试过这个命令,但在尝试寻找时它给出了同样的错误:

ffmpeg -i myvid.mp4 -codec:v libx264 -an -f mpegts - > /dev/null

网上关于seek操作的信息很少,但我设法找到了这个:http://ffmpeg.org/pipermail/ffmpeg-devel/2013-September/148070.html

他在这里说:

“lavfi”解复用器有自己的私有过滤器图并且不提供 意味着(我知道)从这个外部注入命令 过滤图。

所以所有这些都表明可能会或可能不会在正在运行的 ffmpeg 实例上进行搜索。至少那些可能已经成功的人自己保留了如何去做。

【讨论】:

谢谢。虽然这不是我的问题的真正解决方案,但这可能是我能得到的最佳答案,它肯定显示了努力。【参考方案2】:

如果您点击“?”在 ffmpeg 运行时,您将获得所有可用选项。

从我本地安装的版本开始:

key    function
?      show this help
+      increase verbosity
-      decrease verbosity
c      Send command to first matching filter supporting it
C      Send/Que command to all matching filters
D      cycle through available debug modes
h      dump packets/hex press to cycle through the 3 states
q      quit
s      Show QP histogram

所以基本上没有。

【讨论】:

谢谢,我知道,这就是为什么我已经在我的问题中提到了这一点。这是'c'命令,我不确定什么是可能的。 可能在 ffmpeg-user ML 上询问(或检查源 :) 是的,这将是我的下一步。谢谢。

以上是关于发送 seek 命令到正在运行的 ffmpeg 实例的主要内容,如果未能解决你的问题,请参考以下文章

ffmpeg av_seek_frame

问题:FFMPEG 使用字节位置使用 av_seek_frame 搜索

FFMpeg中seek函数解析

如何运行命令行 FFMPEG 并接受多个管道(视频和音频)而不阻塞第一个输入?

想要使用ffmpeg将视频从桌面发送到Wowza

ffmpeg函数03__av_seek_frame()