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

使用FFmpeg批量转换YUV帧为MP4视频遇文件不存在问题求助

解决FFmpeg批量转换单个YUV帧为MP4的问题

嘿,这个坑我之前踩过!FFmpeg对单个YUV帧文件的序列输入逻辑,和png、jpg这类带文件头的格式确实不一样,直接用YUV%d.yuv这种序列匹配是行不通的——因为YUV是原始无元数据的像素格式,FFmpeg默认不会把单个YUV文件识别为单独一帧,而是期望读取一个包含所有连续帧的大YUV文件。下面给你两个靠谱的解决办法:

方法一:使用concat demuxer(最灵活,适合帧数量不多的情况)

这个方法需要先做一个文本列表,告诉FFmpeg要按顺序读取哪些YUV文件:

  1. 创建一个名为input.txt的文本文件,每一行对应一个YUV帧文件,格式如下:
    file 'YUV1.yuv'
    file 'YUV2.yuv'
    file 'YUV3.yuv'
    ...
    file 'YUV15.yuv'
    
    如果YUV文件不在当前工作目录,记得写完整路径,比如file '/home/xxx/YUV1.yuv'。
  2. 执行FFmpeg转换命令:
    ffmpeg -f concat -safe 0 -i input.txt -s 3840x2160 -pix_fmt yuv420p -r 30 -c:v libx264 output.mp4
    
    • -f concat:指定使用concat demuxer来处理文本列表
    • -safe 0:允许FFmpeg读取任意路径的文件(如果所有文件都在当前目录,这个参数可以省略)
    • -s和-pix_fmt:必须明确指定,因为YUV文件没有自带尺寸和像素格式信息

方法二:先合并所有YUV帧为单个原始文件,再转换

如果你用的是Linux/macOS或者Windows命令行,可以先把所有单个YUV帧合并成一个连续的原始YUV文件,再用FFmpeg转换:

  1. 合并文件:
    • Windows(用命令提示符):
      copy /b YUV*.yuv combined.yuv
      
      注意:如果你的文件名是YUV1到YUV15,Windows的通配符排序可能会把YUV10排在YUV2前面,这种情况建议手动按顺序写,比如copy /b YUV1.yuv+YUV2.yuv+...+YUV15.yuv combined.yuv
    • Linux/macOS:
      cat YUV{1..15}.yuv > combined.yuv
      
      用{1..15}可以保证按数字顺序合并,避免排序问题。
  2. 转换为MP4:
    ffmpeg -s 3840x2160 -pix_fmt yuv420p -r 30 -i combined.yuv -c:v libx264 output.mp4
    

为什么你的原始命令不行?

像png、jpg这类格式,每个文件都包含文件头信息(比如尺寸、编码格式),FFmpeg可以识别单个文件为一帧,并且支持%d的序列匹配;但YUV是纯像素数据,没有任何描述信息,FFmpeg默认只会把单个YUV文件当成一整个视频流(而不是一帧),所以用YUV%d.yuv会提示找不到文件——它其实是在找一个符合这个序列模式的连续流文件,而不是多个单个帧文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:39:42