基于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}

相关文章