基于python的ffmpeg操作中的问题
问题描述
我正在尝试编写一个脚本,该脚本将自动获取持续时间值并将音频文件切成较小的拆分。为此,我将所有的开始时间和持续时间保存在一个列表中。这是我试图运行的代码。
for k in range(0,len(start_time)):
s=start_time[k]
e=Duration[k]
filename = "output%d.mp3" % (k)
!ffmpeg -i Audio.mp3 -ss s -t e -acodec copy filename
k=k+1
在运行此命令时,我收到以下错误
Invalid duration specification for ss: s
我怀疑这个错误是因为我使用列表调用元素,所以时间戳两边都有引号。其次,我不确定如何指定文件名,以便每个创建的拆分都具有格式为output_1.mp3的名称,依此类推。该整数将是拆分的标识符。这段代码有哪些可能的修复方法呢?请注意,我正在Google Colab上运行此程序。
解决方案
Google Colab在其云中运行的是由IPython支持的Jupyter笔记本,IPython使用特殊的语法进行外壳调用(命令从!感叹号开始),即它们在(临时)shell会话中执行。如果使用Google Colab,则为bash:
res = !echo $SHELL
print(res)
> ['/bin/bash']
我查了一下,Google Colab上确实有ffmpeg:
res = !which ffmpeg
print(res)
> ['/usr/bin/ffmpeg']
,所以您可以通过ffmpeg:";Invalid Duration Specification.&qot;(我指的不是shell或python)输出合法的错误消息,它只是意味着您传递的变量不会像您那样被它的值替换。由于将变量传递给shell不遵循上述特殊语法,请检查this;传递变量时应将变量用大括号括起来:
!ffmpeg -i Audio.mp3 -ss {s} -t {e} -acodec copy {filename}
相关文章