ffmpeg 错误:选择了模式类型“glob”,但此 libavformat 构建不支持 glob
Posted
技术标签:
【中文标题】ffmpeg 错误:选择了模式类型“glob”,但此 libavformat 构建不支持 glob【英文标题】:ffmpeg Error: Pattern type 'glob' was selected but globbing is not support ed by this libavformat build 【发布时间】:2015-09-20 23:05:44 【问题描述】:我正在尝试将充当单个帧的“.jpg”文件组转换为 1 个单个 mpeg 视频“.mp4”
我使用的示例参数:
frame duration = 2 secs
frame rate = 30 fps
encoder = libx264 (mpeg)
input pattern = "*.jpg"
output pattern = video.mp4
根据 (https://trac.ffmpeg.org/wiki/Create%20a%20video%20slideshow%20from%20images) 的 ffmpeg wiki 说明,我发出了以下命令:
ffmpeg -framerate 1/2 -pattern_type glob -i "*.jpg" -c:v libx264 -r 30 -pix_fmt yuv420p video.mp4
但是我收到了这个错误:
[image2 @ 049ab120] Pattern type 'glob' was selected but globbing is not
supported by this libavformat build *.jpg: Function not implemented
这可能意味着我的构建/版本的 API 模式匹配命令已更改。顺便说一下,这是我的 windows 32 位 ffmpeg 下载版本 (ffmpeg-20150702-git-03b2b40-win32-static
)。
如何使用 ffmpeg 进行模式匹配来选择一组文件?
【问题讨论】:
为什么会被否决? Stackoveflow 上有很多 ffmpeg 问题,ffmpeg 是一个合法的视频编码库和 API。我也清楚地陈述了我的问题、尝试和疑问? 顺便说一句,我通过使用 ffmpeg 输入模式 -iimg%1d.jpg
整个命令 ffmpeg -y -framerate 1/2 -start_number 1 -i img%1d.jpg -vf scale=720:756 -c:v libx264 -r 30 -pix_fmt yuv420p video.mp4
进行了这种工作,但是这只转换了前五帧/JPEG图像,为什么会有限制,如何我可以将任意数量的 JPEG 转换为 MPEG 视频吗?
它是img%01d.jpg
,带有一个零。它只会匹配 img0.jpg
到 img9.jpg
另见superuser.com/questions/666860/…
【参考方案1】:
-pattern_type glob
requires glob.h.
glob
在 POSIX 标准中定义,默认情况下在 Windows 上不可用。
使用顺序文件命名image###.jpg
创建/重命名文件,然后使用-i image%03d.jpg
等顺序通配符作为输入。
【讨论】:
请参考我上面 7 月 3 日的评论,我解决了原来的问题,但是 ffmpeg 只将 1st 5 个文件编码为视频,而不是更多,这是当前的问题/问题。我需要将“N”个帧编码成一个更大的序列。 您的问题涉及 glob,请考虑更新或发布新问题。我还评论了你原来的问题。如果您需要更大的序列,只需使用%0n
,其中n
是位数。您的文件是如何命名的?
如你所见,我已经在 7 月 3 日解决了这个问题,但是它的帧数不超过 5 帧。
然后更新问题并添加文件的命名约定。如果使用顺序索引,是不是一直递增1而不跳过?
ffmpeg -framerate 15 -pattern_type sequence -start_number 00001 -i C:\Users\u\Videos\LRT_%05d.jpg -s:v 1920x1080 -c:v libx264 -crf 17 -pix_fmt yuv420p C:\Users\u\Videos\my-timelapse_1.mp4
【参考方案2】:
您可以用 Python 编写脚本,该脚本支持 Windows 中的 glob 模块:
import subprocess
import glob
import os
filenames = glob.glob('*.png')
path = os.path.abspath("").replace("\\", "/")
print(path)
duration = 0.05
with open("ffmpeg_input.txt", "wb") as outfile:
for filename in filenames:
outfile.write(f"file 'path/filename'\n".encode())
outfile.write(f"duration duration\n".encode())
command_line = f"ffmpeg -r 60 -f concat -safe 0 -i ffmpeg_input.txt -c:v libx265 -pix_fmt yuv420p path\\out.mp4"
print(command_line)
pipe = subprocess.Popen(command_line, shell=True, stdout=subprocess.PIPE).stdout
output = pipe.read().decode()
pipe.close()
【讨论】:
以上是关于ffmpeg 错误:选择了模式类型“glob”,但此 libavformat 构建不支持 glob的主要内容,如果未能解决你的问题,请参考以下文章