Python3 ffmpeg 视频剪辑错误 'Invalid duration specification for ss: -to' 解决方法
Python3 ffmpeg 视频剪辑错误 'Invalid duration specification for ss: -to' 解决方法
在使用 Python3 的 ffmpeg 库剪辑视频时,可能会遇到 'Invalid duration specification for ss: -to' 的错误。这个错误通常是由于剪辑时间格式不正确导致的。
错误原因:
- 剪辑时间格式不符合 ffmpeg 规范。
- 剪辑开始时间或结束时间超出视频时长。
解决方法:
-
确保剪辑时间格式正确
- ffmpeg 使用
hh:mm:ss格式表示时间。 - 确保输入的开始时间和结束时间都符合
hh:mm:ss格式。
- ffmpeg 使用
-
检查剪辑时间是否超出视频时长
- 剪辑开始时间不能超过视频时长。
- 剪辑结束时间不能小于剪辑开始时间。
代码示例:
import os
import subprocess
# 定义输入输出文件路径
input_path = ''
output_path = ''
# 获取视频列表
def get_video_list(path):
video_list = []
if os.path.isfile(path) and path.endswith('.mp4'):
video_list.append(path)
elif os.path.isdir(path):
for file_name in os.listdir(path):
if file_name.endswith('.mp4'):
video_list.append(os.path.join(path, file_name))
return video_list
# 按照最后修改时间排序
def sort_video_list(video_list):
video_list.sort(key=lambda x: os.path.getmtime(x), reverse=True)
return video_list
# 剪辑视频
def clip_video(video_path, start_time='00:00:00', end_time=None):
video_name = os.path.basename(video_path)
output_path = os.path.join(os.path.dirname(video_path), 'clip_' + video_name)
if end_time is None:
cmd = 'ffmpeg -i \'"{}\" -ss {} -c copy \'"{}\"'.format(video_path, start_time, output_path)
else:
cmd = 'ffmpeg -i \'"{}\" -ss {} -to {} -c copy \'"{}\"'.format(video_path, start_time, end_time, output_path)
subprocess.call(cmd, shell=True)
# 主程序
if __name__ == '__main__':
# 输入视频路径
input_path = input('请输入视频路径:')
# 获取视频列表并排序
video_list = get_video_list(input_path)
if not video_list:
print('输入的路径不是一个视频文件或者包含视频文件的目录!')
else:
video_list = sort_video_list(video_list)
# 显示视频列表
for i, video_name in enumerate(video_list):
print('{}: {}'.format(i+1, os.path.basename(video_name)))
# 选择要剪辑的视频
selected_video_index = int(input('请选择要剪辑的视频序号:'))
# 输入开始和结束时间
start_time = input('请输入剪辑的开始时间(格式为hh:mm:ss):')
end_time = input('请输入剪辑的结束时间(格式为hh:mm:ss,可为空):')
if not end_time:
end_time = None
# 剪辑视频
selected_video_path = video_list[selected_video_index-1]
try:
clip_video(selected_video_path, start_time, end_time)
except Exception as e:
print('剪辑视频出错:{}'.format(str(e)))
代码说明:
- 代码中使用了
subprocess.call()函数来执行 ffmpeg 命令。 -ss参数用于指定剪辑的开始时间。-to参数用于指定剪辑的结束时间。-c copy参数用于复制视频流,不进行重新编码,可以提高剪辑效率。- 使用
\"{}"` 对路径进行转义,避免出现错误。
注意:
- 确保你的系统中已经安装了 ffmpeg。
- 如果代码仍然无法正常运行,请检查代码中的路径和时间格式是否正确。
希望以上内容能帮助你解决 'Invalid duration specification for ss: -to' 错误。如果还有其他问题,请随时提问。
相关链接:
原文地址: https://www.cveoy.top/t/topic/nzD4 著作权归作者所有。请勿转载和采集!