标签: powershell-core

youtube-dl - 下载最佳音频/视频,嵌入缩略图,并转换为 mp4

我已经仔细阅读了 youtube-dl 文档。我发现我认为正是我想要的……但我遇到了一个障碍,我很想知道 youtube-dl 的任何更高级的选项是否可以帮助解决我的问题。对于一些更高级的选项,没有太多的文档,而且我还在学习 Python……所以浏览源代码是一项努力。哈哈。

目标:

  • 下载最佳视频 + 最佳音频(如果组合不可用,默认为“最佳”)
  • 嵌入缩略图
  • 在文件中包含元数据信息
  • 将最终文件输出为 MP4 - 不能是 MKV

我当前的命令:

youtube-dl -f "bestvideo+bestaudio[ext=m4a]/best" --embed-thumbnail --add-metadata [url]
Run Code Online (Sandbox Code Playgroud)

问题:

如果“最佳视频”是 webm 文件...它会检测到 WEBM + M4A 不兼容,并将合并为 MKV 文件而不是 MP4(就像通常那样)。由于此步骤是在通过 AtomicParsley 嵌入缩略图之前执行的...引发错误,因为缩略图嵌入不支持 MKV。

更新:我后来想起上面的说法是不准确的。实际发生的是 WEBM 视频工作正常,但导致问题的是 WEBM 音频。YouTube 对 WEBM 音频使用 Opus 编码,当 youtube-dl 尝试合并这两个文件时,它最终将不得不使用 MKV 容器而不是 MP4,因为 ffmpeg 不允许在 MP4 容器中安全地使用 WEBM/Opus。为了强制进行这种转换,您必须向 ffmpeg 添加“--strict 2”(可以通过 youtube-dl 参数传入)。我的解决方案是使用“bestaudio[ext=m4a]”排除 WEBM 音频格式。完成此操作后,我只需将“--merge-output-format mp4”添加到我的 youtube-dl 命令中(如标记答案所推荐)。

但是...如果仅视频的 webm 文件首先转换为 MP4,那么这一切都不是问题。

所以......有谁知道,如果有办法告诉 youtube-dl 在下载视频文件时,在做其他任何事情之前立即将其转换为给定类型(MP4)?

又名:

  1. [youtube-dl] 下载缩略图
  2. [youtube-dl] 下载视频文件 …

powershell ffmpeg youtube-dl powershell-core

5
推荐指数
1
解决办法
1万
查看次数

在 Powershell Core 中绕过所有 Web 请求的代理

我有一台在企业环境中运行 Windows 的工作计算机,并带有用于 Internet 传出连接的身份验证代理服务器。我不知道它是如何配置的,但是很多工具无法连接,主要是像npm(Atom编辑器中的包),NuGet,PowerShellGet等类型。我什至必须配置我的浏览器(Vivaldi)才能使用直接连接,因为我无法登录某些网站,即使它在 MS Edge 中运行。

HTTP 错误通常是(407) Proxy Authentication Required.

Windows 中的系统范围代理服务器正在由一些定期执行的脚本进行配置,我对此无能为力。

解决方案,或者更确切地说是一种解决方法,是单独配置所有有连接问题的应用程序以绕过代理(使用直接连接到互联网)。我已经设法做到了几乎所有我需要的东西,但到目前为止我在 Powershell Core 上还没有成功。

顺便说一句,我不确定该代理的意义是什么,当你可以简单地绕过它时,它只会使该计算机上的常规工作变得更加困难,并且浪费我的时间和公司的金钱。

到目前为止,我已经了解了以下内容。

PowerShellGetFind-Module失败并出现以下错误:

无法解析包源“https://www.powershellgallery.com/api/v2”

一个简单的 Web 请求失败,并出现错误“缓存访问被拒绝”:

Invoke-WebRequest https://google.com
Run Code Online (Sandbox Code Playgroud)

但当它被迫绕过代理时会成功:

Invoke-WebRequest https://google.com -NoProxy
Run Code Online (Sandbox Code Playgroud)

netsh winhttp show proxy说“直接访问(无代理服务器)。 ”,但以下命令返回实际代理:

([System.Net.WebRequest]::GetSystemWebproxy()).GetProxy("https://google.com")
Run Code Online (Sandbox Code Playgroud)

此外,以下命令返回false

([System.Net.WebRequest]::GetSystemWebproxy()).IsBypassed("https://google.com")
Run Code Online (Sandbox Code Playgroud)

我做了相当广泛的研究,发现应该可以WebRequest通过将默认代理设置为 null 来配置使用直接连接,但这没有帮助:

[System.Net.WebRequest]::DefaultWebProxy = $null
Run Code Online (Sandbox Code Playgroud)

如果有人有任何其他想法,我将不胜感激。

更新

我发现我实际上可以使用我的域帐户在代理服务器上进行身份验证:

Invoke-WebRequest https://google.com -ProxyUseDefaultCredentials -Proxy http://proxy
Run Code Online (Sandbox Code Playgroud)

因此,这将是代理旁路配置的替代方案。我只是不知道如何为 Powershell 发出的所有请求设置凭据。我不明白为什么 Windows 系统代理没有配置为使用我的帐户进行身份验证。

我尝试配置WebRequest::DefaultWebProxy为使用代理服务器并使用我的域帐户凭据对其进行身份验证,但它不起作用:

Invoke-WebRequest https://google.com
Run Code Online (Sandbox Code Playgroud)

internet powershell proxy powershell-core

5
推荐指数
1
解决办法
3万
查看次数

如何从 PowerShell Core 提示符安装 Telnet

要在PowerShell中安装 Telnet ,您可以运行:

Install-WindowsFeature -name Telnet-Client
Run Code Online (Sandbox Code Playgroud)

不幸的是,这似乎在PowerShell Core中不起作用,它会产生以下错误:

Install-WindowsFeature : The term 'Install-WindowsFeature' is not recognized as the name of a cmdlet
Run Code Online (Sandbox Code Playgroud)

PowerShell Core 中用于安装 Telnet 的等效命令是什么?

使用 Windows 10 版本 2004,Insider 计划

telnet powershell-core

4
推荐指数
1
解决办法
2万
查看次数