ffmpeg
本身在命令行运行时,默认会在标准输出中显示一种形式的进度信息,但这并不是一个传统意义上的图形化进度条。它会显示当前的转码时间、速度、帧数等信息,但这些信息都是以文本形式呈现,而非一个可视化的进度条。
然而,可以通过一些额外的脚本或者程序来解析 ffmpeg
输出的这些文本信息,进而生成一个图形化的进度条。例如,可以使用 Python 或者 Shell 脚本来读取 ffmpeg
的输出,分析其中的进度数据,并使用这些数据来显示一个图形化进度条。
例子:
比如,您可以使用 Python 的库如 tqdm
来实现这一功能。下面是一个简单的示例代码,展示了如何使用 Python 来解析 ffmpeg
的输出,并显示一个进度条:
pythonimport subprocess import sys from tqdm import tqdm def run_ffmpeg(input_file, output_file): cmd = f"ffmpeg -i {input_file} -some_options {output_file}" process = subprocess.Popen( cmd, stderr=subprocess.PIPE, universal_newlines=True ) duration = None progress = tqdm(total=100, file=sys.stdout, desc='Processing', leave=True) while True: line = process.stderr.readline() if not line: break if "Duration" in line: duration_str = line.split(",")[0].split("Duration:")[1].strip() hours, minutes, seconds = map(float, duration_str.split(":")) duration = hours * 3600 + minutes * 60 + seconds if "time=" in line: time_str = line.split("time=")[1].split(" ")[0] hours, minutes, seconds = map(float, time_str.split(":")) current_time = hours * 3600 + minutes * 60 + seconds progress.update((current_time / duration) * 100 - progress.n) progress.close() # 示例使用 run_ffmpeg("input.mp4", "output.mp4")
在这段代码中,我们首先启动了一个 ffmpeg
的子进程,并监控它的标准错误输出(因为 ffmpeg
是将进度信息输出到 stderr 的)。我们解析输出中的总时长和当前进度时间,并使用这些信息来更新 tqdm
库提供的进度条。
当然,这只是一个基础的示例,根据具体的需求,您可能需要调整和优化这段代码。例如,更精确地处理时间格式,或者添加错误处理和异常处理等。
2024年6月29日 12:07 回复