SpeechRecognition/lib/convert.py

57 lines
1.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import subprocess
from pathlib import Path
def convert_to_h264(input_path: str, output_path: str = None) -> str:
"""
将视频文件转码为 H.264 编码格式
Args:
input_path: 输入视频文件路径(相对或绝对路径)
output_path: 输出视频文件路径可选默认为输入文件同名_h264.mp4
Returns:
转码后的视频文件路径
Raises:
FileNotFoundError: 输入文件不存在
subprocess.CalledProcessError: FFmpeg 转码失败
"""
input_path_all = Path("input/" + input_path).resolve()
output_path_all = Path("vid_h264/" + input_path).resolve()
if not input_path_all.exists():
raise FileNotFoundError(f"输入文件不存在:{input_path}")
print(f"开始转码:{input_path_all}")
# if output_path is None:
output_path = str(output_path_all.with_name(f"{input_path_all.stem}_h264.mp4"))
# else:
# output_path = Path(output_path).resolve()
cmd = [
"ffmpeg",
"-i", str(input_path_all),
"-c:v", "h264_nvenc", # NVIDIA 硬件编码
"-c:a", "aac",
"-b:a", "128k",
"-y",
str(output_path)
]
result = subprocess.run(cmd, capture_output=True, text=True)
if result.returncode != 0:
raise subprocess.CalledProcessError(
result.returncode,
cmd,
result.stdout,
result.stderr
)
print(f"转码完成:{output_path}")
return str(output_path)
if __name__ == "__main__":
convert_to_h264("VID_20251104_085655_024.AVI", "vid_h264/VID_20251104_085655_024_h264.mp4")
# convert_to_h264("input/short.AVI", "vid_h264/short_h264.mp4")