Python调用FFmpeg从FTP转图片为视频报错:Protocol 'ftp'不在白名单'tcp'
解决FFmpeg通过FTP读取图片转视频时的"Protocol 'ftp' not on whitelist 'tcp'"错误
问题原因
FFmpeg处理图片时默认使用image2 demuxer,该demuxer的网络协议白名单默认仅包含tcp,不支持ftp;而处理视频文件时使用的是对应视频格式的demuxer(如MP4的mov demuxer),这些demuxer默认支持ftp协议,因此视频转换功能正常,图片转视频时触发白名单限制报错。
解决方案
在FFmpeg命令中添加-protocol_whitelist参数,明确将ftp(以及依赖的tcp等)加入允许的协议列表。
修正后的单图片转视频代码
command = """ffmpeg -protocol_whitelist file,ftp,tcp,udp -loop 1 -framerate {ips} -i {i} -t 10 -pix_fmt yuv420p {o}""".format(i=src_path, o=path, ips=img_per_sec)
对应的示例命令
ffmpeg -protocol_whitelist file,ftp,tcp,udp -loop 1 -framerate 2 -i ftp://user:user@ip:port/landing_ffmpeg/pruebas/prueba_imagenes/prueba06.jpg -t 10 -pix_fmt yuv420p tmp/videoimagen.mp4
读取图片列表txt文件的批量处理场景
如果是通过txt文件批量读取FTP上的图片路径,同样需要在命令开头添加该参数,同时配合-f concat和-safe 0参数:
# src_path为包含FTP图片路径的txt文件本地路径 command = """ffmpeg -protocol_whitelist file,ftp,tcp,udp -framerate {ips} -f concat -safe 0 -i {i} -t 10 -pix_fmt yuv420p {o}""".format(i=src_path, o=path, ips=img_per_sec)
注:
-safe 0用于允许txt中使用绝对路径(包括FTP远程路径)
验证说明
添加-protocol_whitelist后,image2 demuxer会被允许使用ftp协议读取远程图片,解决白名单限制问题。视频处理命令无需修改,因为对应视频demuxer的协议白名单默认包含ftp。
内容的提问来源于stack exchange,提问作者Victoriano Fernández Tomás
相关产品推荐
相关产品推荐

