You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python3中用subprocess生成字符串输出及获取视频脚本文件名

在Python3中用subprocess获取ffmpeg分割视频的文件名

嘿,我明白你的需求了!你那个bash命令能完美提取ffmpeg分割后的视频文件名,但现在想把这个逻辑搬到Python3里用subprocess实现对吧?没问题,我来一步步给你拆解和实现。

原bash命令的核心逻辑

先理清你原来的命令做了什么:

  • ffmpeg从指定流拉取视频,按2秒分割为mp4文件(你提到是5秒,只需修改-segment_time参数即可)
  • 将ffmpeg的错误输出重定向到标准输出(2>&1),以便捕获日志
  • 用grep过滤分割完成的日志行,再用gawk提取文件名
  • xargs确保每个文件名单独输出

Python实现方案

我们可以不用依赖外部的grep和gawk,直接用Python的正则表达式处理日志,更高效也更可控。以下是完整代码:

import subprocess
import re

def capture_and_get_filenames(segment_time="2"):
    # 构建ffmpeg命令列表(避免shell注入风险)
    ffmpeg_command = [
        "ffmpeg",
        "-i", "http://0.0.0.0:8080/stream/video.mjpeg",
        "-vcodec", "copy",
        "-map", "0",
        "-f", "segment",
        "-segment_time", segment_time,  # 可修改为你需要的5秒
        "-loglevel", "40",
        "-segment_format", "mp4",
        "capture-%05d.mp4"
    ]

    # 启动子进程,合并stdout和stderr,开启行缓冲
    with subprocess.Popen(
        ffmpeg_command,
        stdout=subprocess.PIPE,
        stderr=subprocess.STDOUT,
        bufsize=1,
        text=True
    ) as process:
        # 正则表达式匹配分割完成的日志行,提取文件名
        filename_pattern = re.compile(r"segment:.+'(.+)' ended")
        collected_filenames = []

        # 逐行读取输出,实时处理
        for line in process.stdout:
            match_result = filename_pattern.search(line)
            if match_result:
                filename = match_result.group(1)
                collected_filenames.append(filename)
                print(filename)  # 这里可以替换为你需要的处理逻辑,比如写入文件或发送通知

    return collected_filenames

if __name__ == "__main__":
    # 调用函数,可传入segment_time="5"改为5秒分割
    generated_files = capture_and_get_filenames(segment_time="5")
    print("所有生成的文件名:", generated_files)

关键细节说明

  • 命令列表形式:用列表传递命令参数,比直接传字符串更安全,避免shell注入问题
  • 行缓冲配置:bufsize=1开启行缓冲,确保能实时获取ffmpeg的日志输出(对应bash里的--line-buffered)
  • 输出合并:stderr=subprocess.STDOUT把ffmpeg的错误输出合并到标准输出,这样能捕获到分割完成的日志
  • 正则提取:用re.compile预编译正则表达式,高效匹配包含文件名的日志行,提取出单引号中的文件名

内容的提问来源于stack exchange,提问作者Perl Deniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:37:41