Python ffmpeg 进度
时间: 2023-10-14 19:22:28 浏览: 194
易语言ffmpeg进度转码
要在 Python 中获取 FFmpeg 的进度,可以使用 `subprocess` 模块来运行 FFmpeg 命令并捕捉输出。在输出中,FFmpeg 会定期显示当前帧的时间戳和总时间戳,可以通过解析这些值来计算进度。
以下是一个例子,它使用 `subprocess` 运行 FFmpeg 命令并捕获输出。在 `stdout` 中搜索时间戳,并将其转换为秒。然后,可以使用这些值计算当前进度。
```python
import subprocess
import re
command = ['ffmpeg', '-i', 'input.mp4', 'output.mp4']
process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
# 正则表达式用于匹配时间戳
time_pattern = re.compile(r'time=(\d\d:\d\d:\d\d.\d\d)')
# 视频总时长(秒)
total_duration = 60
while True:
# 读取输出并解码为字符串
output = process.stdout.readline().decode()
if output == '' and process.poll() is not None:
break
if output:
# 在输出中搜索时间戳
match = time_pattern.search(output)
if match:
# 将时间戳转换为秒
current_time = sum(x * float(t) for x, t in zip([3600, 60, 1], match.group(1).split(':')))
# 计算进度
progress = current_time / total_duration
print('Progress:', progress)
# 等待进程结束
process.wait()
```
注意,这个例子中假设视频的总时长是 60 秒。如果你不知道视频的总时长,可以在运行 FFmpeg 命令时添加 `-progress pipe` 参数,它将输出包含视频总时长的 JSON 格式数据。你可以解析这个 JSON 数据以获取总时长。
阅读全文