ffmpeg 将 NV12 文件列表转换为视频

ffmpeg 将 NV12 文件列表转换为视频

我有 NV12 格式的 YUV 文件文件夹,我想将它们制作成视频。我无法将它们全部合并,因为它们的编号方式不正确,前导零不正确。实际上我无法更改它。但我有一个按正确顺序排列的视频文件列表。

ffmpeg -y -pix_fmt nv12 -s 1920x1080 -r 30 -f concat -safe 0 -i yuvlist.txt -c:v libx264 -pix_fmt yuv420p output.mp4

yuv列表.txt

file 'yuvfile_01.yuv'
file 'yuvfile_02.yuv'

等等(并且文件确实存在)

这总是以这个错误结束

[IMGUTILS] Picture size 0x0 is invalid
[concat] Impossible to open 'yuvfile_01.yuv'
yuvlist.txt Invalid argument

我尝试将 NV12 的信息放在-pix_fmt nv12 -s 1920x1080命令行的各个位置,但仍然出现相同的错误。

我可以先用 ffmpeg 将所有 YUV 转换为 BMP,然后使用 ffmpeg -y -r 30 -f concat -safe 0 -i bmplist.txt -c:v libx264 -pix_fmt yuv420p output.mp4,当然,这里的图片大小是 BMP 内的元数据,它可以成功。通过 BMP 执行此操作需要时间和磁盘空间,那么在第一个 ffmpeg 命令行示例中,我应该将图片大小和格式放在哪里才能直接使用 YUV?

答案1

几乎总是,输入必须放在第一位。mpeg4 输入存在 YUV 色度问题。使用视频过滤器-vf来纠正它。如果文件分辨率匹配,通常无需设置比例。使用-r输入速率。只有在完整编码(而非流复制)处理可变比特率源时才需要它。用于-framerate输出速率。

5.6 高级视频选项 “如果 pix_fmt 是单个 +,ffmpeg 将选择与输入(或图形输出)相同的像素格式,并且禁用自动转换”

尝试一下:
ffmpeg -f concat -safe 0 -i yuvlist.txt -pix_fmt "+" -vf "format=yuv420p,scale=1920:1080" -framerate 30 -c:v libx264 "output.mp4"

此外,如果需要,您可以不使用列表进行连接。这曾经救了我一命。
ffmpeg -i concat:"file1.ext|file2.ext|file3.ext"

相关内容