发送 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:
movie
和amovie
都支持以下命令:
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 搜索