python脚本中的ffmpeg
Posted
技术标签:
【中文标题】python脚本中的ffmpeg【英文标题】:ffmpeg in python script 【发布时间】:2017-07-15 06:29:06 【问题描述】:我想在 python 脚本中运行以下命令,我还想让它循环遍历文件夹中的多个视频。这是我要运行的命令。
ffmpeg -i mymovie.avi -f image2 -vf fps=fps=1 output%d.png
我想把它放在这样的地方:
import ffmpy
import os
path = './Videos/MyVideos/'
for filename in os.listdir(path):
name = filename.replace('.avi','')
os.mkdir(os.path.join(path,name))
*ffmpeg command here*
我找到了一个名为 ffmpy 的 ffmpeg 包装器,这是一个解决方案吗?
【问题讨论】:
你有没有想过你将如何做这些你可以分享的事情? 【参考方案1】:没有评论的声誉,因此添加了另一个回复。
另一个版本的豹猫答案,使用更易读的python f-string语法-
for filename in os.listdir(path):
if (filename.endswith(".mp4")): #or .avi, .mpeg, whatever.
os.system(f'ffmpeg -i filename -f image2 -vf fps=fps=1 output%d.png')
else:
continue
【讨论】:
【参考方案2】:这是一种在 python 脚本中使用 ffmpeg 的方法,例如用于提取每个视频的最后 10 秒:
ffmpeg -sseof -10 -i input.mp4 output.mp4
要将其应用于整个 mp4 文件文件夹:
from pathlib import Path
import os
suffix = ".mp4"
input_path= Path.home() / "Desktop/foo"
file_paths= [subp for subp in input_path.rglob('*') if suffix == subp.suffix]
file_paths.sort()
output_path = Path.home() / "Desktop/foo/new"
output_path.mkdir(parents=True, exist_ok=True)
for file_p in file_paths:
input = str(file_p)
output = str( output_path / file_p.name )
command = f"ffmpeg -sseof -10 -i input output"
print(command)
os.system(command)
【讨论】:
【参考方案3】:From a brief look at FFMPY, you could do this using ffmpy.FFmpeg, as that allows any and all FFMPEG command line options, including -f. -- 点击文档链接。
您可以使用os.system
执行 FFMPEG 命令。无论如何,您都需要导入操作系统来遍历文件。
不过,您需要遍历目录中的所有文件。这将是更具挑战性的一点,不过使用 for 循环很容易。
for filename in os.listdir(path):
if (filename.endswith(".mp4")): #or .avi, .mpeg, whatever.
os.system("ffmpeg -i 0 -f image2 -vf fps=fps=1 output%d.png".format(filename))
else:
continue
上面的代码遍历path
的目录,并使用命令提示符执行给定的FFMPEG命令,使用文件名(如果是视频文件)代替mymovie.avi
【讨论】:
if 行末尾应该有一个“)”,例如:if (filename.endswith(".mp4")):【参考方案4】:在https://github.com/Tee0125/pydemux 中尝试 pydemux。 Pydemux 模块可以提取 Pillow Image 格式的视频帧
from PyDemux import Video
v = Video.open('video.mov')
i = 0
while True:
im = v.get_frame()
if im is None:
break
im.save('output%d.png'%i)
i = i + 1
【讨论】:
以上是关于python脚本中的ffmpeg的主要内容,如果未能解决你的问题,请参考以下文章