当我在Python中使用命令时,它的运行与预期不同



我有一个代码,我下载一个youtube视频作为3gpp并将其转换为mp3,我需要使用FFmpeg来做到这一点,当使用cmd和powershell时它工作得很好,但是,当我试图在Python中运行相同的命令时,它根本不起作用。

这是我的命令

ffmpeg -i C:YTDownloadsCurrentAudio.3gpp C:YTDownloadsCurrentAudio.mp3

我试着:

subprocess.call(r'%SystemRoot%system32WindowsPowerShellv1.0powershell.exe ffmpeg -i C:YTDownloadsCurrentAudio.3gpp C:YTDownloadsCurrentAudio.mp3', shell=True)

subprocess.run(["ffmpeg","-i","C:YTDownloadsCurrentAudio.3gpp","C:YTDownloadsCurrentAudio.mp3]")
os.system('powershell ffmpeg -i  C:YTDownloadsCurrentAudio.3gpp C:YTDownloadsCurrentAudio.mp3')
subprocess.run([
'ffmpeg',
'-i', os.path.join(parent_dir, f"{newname}.3gpp"),
os.path.join(parent_dir, f"{newname}.mp3")
]) 
subprocess.call('C:WindowsSystem32powershell.exe ffmpeg -i  C:YTDownloadsCurrentAudio.3gpp C:YTDownloadsCurrentAudio.mp3', shell=True)

它们都返回某种类型的错误,其中一些返回ffmpeg不是公认的内部命令,在其他情况下,它说系统找不到指定的路径,但它们都不工作,甚至认为当我在cmd/powershell上使用完全相同的命令时它工作得很好。

sorry for my English:3

所有的命令应该工作(一些修复)…

您可以尝试以下操作:

  1. 添加-y参数,无需询问即可覆盖输出文件。
    从Python执行时,您可能看不到以下问题:
    File 'C:YTDownloadsCurrentAudio.mp3' already exists. Overwrite ? [y/N]
    添加-y的示例:

    subprocess.call(r'%SystemRoot%system32WindowsPowerShellv1.0powershell.exe ffmpeg -y -i  C:YTDownloadsCurrentAudio.3gpp C:YTDownloadsCurrentAudio.mp3', shell=True)
    
  2. 确保ffmpeg.exe在系统路径中。
    如果您不确定ffmpeg.exe是否在系统路径中,请尝试使用全路径。
    假设ffmpeg.exec:FFmpegbin中,使用完整路径:

    subprocess.call(r'%SystemRoot%system32WindowsPowerShellv1.0powershell.exe c:FFmpegbinffmpeg -y -i  C:YTDownloadsCurrentAudio.3gpp C:YTDownloadsCurrentAudio.mp3', shell=True)
    
  3. 使用r""前缀,或使用双反斜杠:
    os.system('powershell c:FFmpegbinffmpeg -y -i C:YTDownloadsCurrentAudio.3gpp C:YTDownloadsCurrentAudio.mp3')替换为:

    os.system(r'powershell c:FFmpegbinffmpeg -y -i C:YTDownloadsCurrentAudio.3gpp C:YTDownloadsCurrentAudio.mp3') 
    #or: os.system('powershell c:\FFmpeg\bin\ffmpeg -y -i C:\YTDownloads\CurrentAudio.3gpp C:\YTDownloads\CurrentAudio.mp3')
    

subprocess.run(['ffmpeg', '-i', os.path.join(parent_dir, f"{newname}.3gpp"), os.path.join(parent_dir, f"{newname}.mp3")])替换为:

parent_dir = r'C:YTDownloads'
newname = 'CurrentAudio'
subprocess.run([
r'c:FFmpegbinffmpeg', '-y',
'-i', os.path.join(parent_dir, f"{newname}.3gpp"),
os.path.join(parent_dir, f"{newname}.mp3")
])

subprocess.call('C:WindowsSystem32powershell.exe ffmpeg -i C:YTDownloadsCurrentAudio.3gpp C:YTDownloadsCurrentAudio.mp3', shell=True)替换为:

subprocess.call(r'c:FFmpegbinffmpeg -y -i C:YTDownloadsCurrentAudio.3gpp C:YTDownloadsCurrentAudio.mp3')

不需要使用powershell,也不需要使用shell=True


指出:

  • ffmpeg.exec:FFmpegbin文件夹下为例。
    您可以将ffmpeg.exe复制到c:FFmpegbin,或者使用ffmpeg.exe的实际文件夹。
  • 您也可以按照以下指南将包含ffmpeg.exe的文件夹添加到系统路径。

最新更新