如何在FFmpeg生成切片后自动执行脚本且不暂停进程?
FFmpeg原生实现切片完成后触发脚本的方案
你要的需求完全可以用FFmpeg原生的-segment_callback选项实现,这就是专门为这类场景设计的,完美解决你之前遇到的日志提前输出、后台运行失效的问题。
核心命令修改
直接在原命令中添加-segment_callback参数,指定要执行的脚本即可:
ffmpeg -i http://domain/index.m3u8 -c copy -f segment -strftime 1 -segment_time 10 -segment_callback do_with_file.sh %Y-%m-%d-%H-%M-%S.mp4
关键细节说明
- 触发时机精准:这个选项会在切片文件完全写入磁盘后才调用脚本,彻底避免了之前日志提前输出导致操作未完成文件的问题。
- 自动传递文件名:FFmpeg会把刚生成的切片文件名作为第一个参数传给脚本,在
do_with_file.sh里直接用$1就能拿到目标文件路径。 - 不阻塞FFmpeg进程:脚本是异步执行的,不会暂停FFmpeg的拉流和切片流程,完全符合你的要求。
脚本示例
先给脚本添加可执行权限:chmod +x do_with_file.sh,脚本内容可以参考:
#!/bin/bash # 这里写你的具体操作逻辑 echo "开始处理切片文件: $1" # 比如复制到备份目录、上传至存储服务等 # cp "$1" /path/to/backup/
版本要求
-segment_callback是FFmpeg 4.2及以后版本才支持的特性,如果你使用的版本过旧,建议升级到最新稳定版。
内容的提问来源于stack exchange,提问作者A. Sk.
相关产品推荐
相关产品推荐

