Я пытаюсь загрузить отрывок из видео на 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
и youtube-dl
в том же каталоге, а также cmd, запущенного в том же каталоге, я получаю следующий вывод:
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
команду (которая возвращает URL-адрес, необходимый для доступа к видео YouTube).Подставьте результаты (т.е. возвращенный URL-адрес видео) в указанное место команды
ffmpeg
.
Ваша проблема, похоже, в том, что $()
синтаксис не используется для получения/замены правильного URL. Так же как ffmpeg
и чтение необработанной youtube-dl
команды и попытка разобрать youtube-dl
опции, которые не были для нее предназначены.
Возможное решение
Следует помнить, что это $()
не часть ffmpeg
. То есть, ffmpeg
это не то, что работает youtube-dl
или подменяет результаты.
В случае Linux, та оболочка, которую использует Linux, выполняет выполнение и подстановку, прежде чем передать данные в 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 Path).
Если вы хотите добавить эти папки в свой путь,Краткое руководство о том, как это сделать, можно найти здесь.. Просто убедитесь, что вы добавили их в системные переменные. Также, в качестве примечания, вам следует перезапустить Windows Explorer, прежде чем пытаться использовать или 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