【问题标题】:Python ffmpeg won't accept path, why?Python ffmpeg 不接受路径,为什么?
【发布时间】:2021-04-26 10:11:03
【问题描述】:

每次我启动代码并设置正确的路径时,它都会给我这个错误,我尝试包括 ffmpeg 路径,卸载并重新安装库,但没有运气。我也尝试过使用不同的方法来设置路径,比如直接放置而不将其保存到变量中,这让我抓狂,请帮助我解决问题。


                                                     Code

from pytube import *
import ffmpeg

global str
userurl = (input("Enter a youtube video URL : "))
q = str(input("Which quality you want ?  360p,480p,720p,1080p,4K,Flh :")).lower()
yt = YouTube(userurl)
print ("Title of the video : ",yt.title)


def hd1080p():
    print("Downloading a HD 1080p video...")
    v = yt.streams.filter(mime_type="video/mp4", res="1080p", adaptive = True).first().download(filename = "HD1080P.mp4")
    print("Video downloaded")
    yt.streams.filter(mime_type="audio")
    a = yt.streams.get_audio_only()
    print("Downloading audio")
    a.download(filename = "audio.mp4")
    print("audio downloaded")
    input_video = ffmpeg.input("HD1080P.mp4")
    added_audio = ffmpeg.input("audio.mp4").audio.filter('adelay', "1500|1500")

    merged_audio = ffmpeg.filter([input_video.audio, added_audio], 'amix')

    (
        ffmpeg
        .concat(input_video, merged_audio, v=1, a=1)
        .output("mix_delayed_audio.mp4")
        .run(overwrite_output=True)
    )
    

if q == "1080" or q == "1080p":
    hd1080p()
elif q == "720" or q == "720p":
    hd720p()
elif q == "480" or q == "480p":
    l480p()
elif q == "360" or q == "360p":
    l360p()
elif q ==  "4" or q == "4k":
    hd4k()
else:
    print("invalid choice")

                                                  THE ERROR

Traceback (most recent call last):
  File "c:\Users\messa\Desktop\upcoming project\videodownloader.py", line 65, in <module>
    hd1080p()
  File "c:\Users\messa\Desktop\upcoming project\videodownloader.py", line 26, in hd1080p
    ffmpeg
  File "E:\Users\messa\AppData\Local\Programs\Python\Python39\lib\site-packages\ffmpeg\_run.py", line 313, in run
    process = run_async(
  File "E:\Users\messa\AppData\Local\Programs\Python\Python39\lib\site-packages\ffmpeg\_run.py", line 284, in run_async
    return subprocess.Popen(
  File "E:\Users\messa\AppData\Local\Programs\Python\Python39\lib\subprocess.py", line 947, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "E:\Users\messa\AppData\Local\Programs\Python\Python39\lib\subprocess.py", line 1416, in _execute_child
    hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
FileNotFoundError: [WinError 2] The system cannot find the file specified

【问题讨论】:

  • 你试过绝对路径吗?例如:“C:/Users/username/file.mp4”
  • 是的@SaladHead
  • ffmpeg 安装了吗?它在哪里?当前目录是什么? ffmpeg 路径是否在PATH 环境变量中? ffmpeg 直接在终端执行,能用吗?
  • @HernánAlarcón 我不明白你在说什么,但我使用 pip3 安装了它

标签: python ffmpeg


【解决方案1】:

Windows 操作系统中最简单的解决方案是将ffmpeg.exe 与 Python 脚本放在同一文件夹中。

您收到错误的原因是 ffmpeg.exe 不在您的操作系统的执行路径中。
注意:执行pip install ffmpeg-python 不会下载 FFmpeg 应用程序(但 Python 包需要 FFmpeg 可执行文件才能运行)。

假设您使用的是 Windows:

您可以安装FFmpeg,如下所述:How to Install FFmpeg on Windows

我的建议:

  • https://github.com/BtbN/FFmpeg-Builds/releases下载最新的稳定版本。
    首选静态构建(静态构建应用单个可执行文件)。
    您可以下载 GPL 许可版本(GPL 与 LGPL 与可执行文件无关)。
    最新的稳定版本(2021 年 1 月 23 日)是 4.3.1
    假设您使用的是 Windows x64,请下载:ffmpeg-n4.3.1-29-g89daac5fe2-win64-gpl-4.3.zip
  • 解压 ZIP 文件,并将 ffmpeg.exe 复制到与 Python 脚本相同的文件夹中。
  • 如果它正常工作,您还可以将ffmpeg.exe 放在其他位置(如C:\ffmpeg\bin\),并更新Windows 路径。

更新:

有一个选项可以执行ffmpeg.exe,而不将其添加到系统路径中。

方法ffmpeg.run()接受可选参数cmd
cmd 的默认值为ffmpeg
您可以将cmd的值设置为完整的执行路径。

例子:

(
    ffmpeg
    .concat(input_video, merged_audio, v=1, a=1)
    .output("mix_delayed_audio.mp4")
    .run(overwrite_output=True, cmd=r'c:\FFmpeg\bin\ffmpeg.exe')
)

【讨论】:

  • 欢迎您。我刚刚编辑了帖子 - 还有一个选项可以设置 cmd 参数。
猜你喜欢
  • 2020-06-29
  • 1970-01-01
  • 2020-03-05
  • 1970-01-01
  • 2021-10-28
  • 2021-08-17
  • 2018-01-02
  • 2014-07-27
  • 2016-07-09
相关资源
最近更新 更多