我正在尝试从 YouTube 视频中下载一段剪辑,在发现网站不适合执行此任务后,我选择了使用命令行工具。
得益于此AskUbuntu 主题,我有以下命令:
ffmpeg -i $(youtube-dl -f 22 --get-url https://www.youtube.com/watch?v=EkTHhk07nv4) -ss 00:05:12.70 -t 00:00:08.10 -c:v copy -c:a copy hamster.mp4
但是,在同一目录中使用ffmpeg
和运行它,并在同一目录中运行 cmd 后,我得到以下输出:youtube-dl
ffmpeg version git-2020-02-06-343ccfc Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 9.2.1 (GCC) 20200122
configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf
libavutil 56. 39.100 / 56. 39.100
libavcodec 58. 68.100 / 58. 68.100
libavformat 58. 38.100 / 58. 38.100
libavdevice 58. 9.103 / 58. 9.103
libavfilter 7. 74.100 / 7. 74.100
libswscale 5. 6.100 / 5. 6.100
libswresample 3. 6.100 / 3. 6.100
libpostproc 55. 6.100 / 55. 6.100
随后出现此错误:
Unrecognized option '-get-url'.
Error splitting the argument list: Option not found
我无法理解错误消息,搜索错误也没有给我任何答案。命令可能出了什么问题?
答案1
我无法理解错误消息,搜索错误也没有给我任何答案。命令可能出了什么问题?
ffmpeg
正尝试解析--get-url
的选项youtube-dl
。
解释
youtube-dl
命令中嵌入的部分例如ffmpeg
:
$(youtube-dl -f 22 --get-url https://www.youtube.com/watch?v=EkTHhk07nv4)
旨在:
执行
youtube-dl
命令(返回访问 YouTube 视频所需的 URL)。在命令中的给定点处替换结果(即返回的视频 URL)
ffmpeg
。
您的问题似乎是$()
语法没有用于获取/替换正确的 URL。ffmpeg
读取原始youtube-dl
命令并尝试解析youtube-dl
不适用于它的选项也是如此。
可能的解决方案
需要注意的一点是$()
不是 的一部分ffmpeg
。也就是说,ffmpeg
不是正在运行youtube-dl
或替换结果的。
对于 Linux 来说,无论 Linux 使用哪个 shell,它都会在将内容传递给 之前进行执行和替换ffmpeg
。
我不清楚您使用的是哪种操作系统,但我注意到您在原始帖子中提到了“cmd”。如果您使用的是 Windows,cmd
(本机 Windows 命令提示符)不支持使用$()
。相反,您应该尝试使用以下命令powershell
:
powershell ffmpeg -i $(youtube-dl -f 22 --get-url https://www.youtube.com/watch?v=EkTHhk07nv4) -ss 00:05:12.70 -t 00:00:08.10 -c:v copy -c:a copy hamster.mp4
路径注释
请注意,使用powershell
上述“按原样”选项假定ffmpeg
和youtube-dl
在整个系统范围内可用(即,它们各自的可执行文件所在的文件夹是 Windows 路径设置的一部分)。
如果您希望将这些文件夹添加到您的路径中,你可以在这里找到关于如何操作的快速教程。只需确保将它们添加到您的系统变量中即可。另外,顺便提一下,在尝试使用或之前,您应该重新启动 Windows 资源管理器ffmpeg
(youtube-dl
这通常通过重新启动来完成)。
如果你不想让ffmpeg
和youtube-dl
在系统范围内可用,你可以使用 和 的相应路径修改上述powershell
命令。例如,要使用同一文件夹中的所有内容,你可以在每个可执行文件名称前面添加:ffmpeg.exe
youtube-dl.exe
.\
powershell .\ffmpeg -i $(.\youtube-dl -f 22 --get-url https://www.youtube.com/watch?v=EkTHhk07nv4) -ss 00:05:12.70 -t 00:00:08.10 -c:v copy -c:a copy hamster.mp4