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

如何在Windows PowerShell中通过管道将图像传入FFmpeg?

问题根本原因

PowerShell默认将所有管道内容视为文本处理,会自动执行编码转换、换行符替换操作,完全破坏了图片、视频这类二进制文件的原始字节结构。你之前测试的Get-Content test.bmp > simple.bmp输出文件损坏,就是因为PowerShell默认把读取的二进制内容当成UTF-16文本输出,还自动将文件内的0x0A(LF换行)替换为0x0D 0x0A(CRLF换行),和ffmpeg本身没有关系。

可行解决方案

方案1:PowerShell 7.4及以上版本(最优解)

PowerShell 7.4开始原生支持向外部程序传输二进制管道流,直接添加参数即可正常使用:

Get-Content -AsByteStream test_*.bmp | .\ffmpeg -framerate 1 -i - -c:v libx264 -r 25 -pix_fmt yuv420p -y video.mp4
  • -AsByteStream参数指定Get-Content直接读取文件的原始二进制字节,不做任何文本编码解析
  • 7.4+版本的管道会直接将二进制字节流传给ffmpeg,不会插入额外的转换逻辑

方案2:兼容PowerShell 5.1(系统自带旧版本)

如果无法升级PowerShell版本,可以绕开默认管道,通过临时文件传递二进制内容:

# 一次性读取所有bmp文件的原始字节
$allBmpBytes = Get-Content -Path test_*.bmp -Encoding Byte -Raw
# 写入临时文件规避管道文本转换
Set-Content -Path bmp_input.tmp -Value $allBmpBytes -Encoding Byte
# 用ffmpeg读取临时文件生成视频
.\ffmpeg -framerate 1 -i bmp_input.tmp -c:v libx264 -r 25 -pix_fmt yuv420p -y video.mp4
# 清理临时文件
Remove-Item bmp_input.tmp

如果没有强制使用管道的特殊需求,直接用ffmpeg自带的通配符读取功能更省事,完全规避PowerShell的处理逻辑:

.\ffmpeg -framerate 1 -pattern_type glob -i "test_*.bmp" -c:v libx264 -r 25 -pix_fmt yuv420p -y video.mp4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:15:02