向 运行 ffmpeg 实例发送搜索命令

Send seek command to running ffmpeg instance

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

如果你点击'?'而 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

所以基本上没有。

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

Both movie and amovie support the following commands:

  • seek Perform seek using "av_seek_frame". The syntax is: seek stream_index|timestamp|flags

    • stream_index: If stream_index is -1, a default stream is selected, and timestamp is automatically converted from AV_TIME_BASE units to the stream specific time_base.
    • timestamp: Timestamp in AVStream.time_base units or, if no stream is specified, in AV_TIME_BASE units.
    • flags: Flags which select direction and seeking mode.
  • get_duration Get movie duration in AV_TIME_BASE units.

我试过运行这样的命令:

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

这里他说:

the "lavfi" demuxer has its own private filtergraph and provides no means (that i know of) to inject command from the outside of this filtergraph into it.

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

对于那些想要发送过滤器参数的人

首先如 docs 中那样获取特定的过滤器命令:

ffmpeg -h filter=filtername

注意 : 只有标有 T 的命令才能在运行时运行。

下一个 press c 然后 :

all -1 your_command value