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

如何用FFMPEG与Xilinx正确提取FullHD帧并缩放至480p

修正后的参数配置与代码问题说明

核心问题点

  1. 缩放分支未执行命令:原代码仅定义了command但未调用subprocess.run执行,导致缩放逻辑完全未生效。
  2. multiscale_xma参数格式错误:参数间不能有空格,必须用逗号分隔,且out_1_rate=half对单帧提取无意义,会干扰硬件处理逻辑。
  3. -ss位置不当:放在-i后方无法利用Xilinx VCU的硬件seek能力,还可能与滤镜链冲突导致时间点偏移。

修正后的完整代码

# If the video is greater than 480p, resize the frames to 480p
if height > 480:
    command = [
        ffmpeg_path,
        '-ss', str(median_time),  # 移到-i前实现硬件快速seek
        '-c:v', 'mpsoc_vcu_h264',
        '-i', temp_video,
        '-filter_complex',
        # 修正参数格式:移除空格,用逗号分隔,删除无用的rate参数
        'multiscale_xma=outputs=1:out_1_width=854:out_1_height=480:[b];[b]xvbm_convert[b1]',
        '-pix_fmt', 'yuv420p',
        '-map', '[b1]',
        '-vframes', '1',
        '-q:v', '2',
        '-f', 'image2pipe',
        '-vcodec', 'mjpeg',
        '-y', '-'
    ]
    # 补全命令执行逻辑,与else分支保持一致
    output = subprocess.run(command, capture_output=True)
    frame = output.stdout
else:  # Preserve the original resolution
    command = [
        ffmpeg_path,
        '-ss', str(median_time),  # 同样移到-i前优化性能
        '-c:v', 'mpsoc_vcu_h264',
        '-i', temp_video,
        '-vf', 'xvbm_convert',
        '-pix_fmt', 'yuv420p',
        '-vframes', '1',
        '-q:v', '2',
        '-f', 'image2pipe',
        '-vcodec', 'mjpeg',
        '-y', '-'
    ]
    output = subprocess.run(command, capture_output=True)
    frame = output.stdout

关键修改说明

  • 补全命令执行逻辑:缩放分支添加subprocess.run调用,确保命令被实际执行。
  • multiscale_xma参数修正:
    • 移除参数间的多余空格,用逗号分隔(Xilinx硬件滤镜要求严格格式)。
    • 删除out_1_rate=half:该参数用于多帧率输出,单帧提取场景下无需设置,反而会导致硬件资源浪费或处理异常。
    • 可选将宽度调整为854(标准16:9比例480p分辨率),若需保留848可改回,但建议用标准值避免画面拉伸。
  • -ss位置调整:移至-i前,让Xilinx VCU直接从指定时间点开始解码,大幅提升处理速度,同时避免滤镜链对时间戳的干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 05:05:27