YouTube ビデオからクリップをダウンロードしようとしていますが、Web サイトがこのタスクに適していないことがわかったため、コマンド ライン ツールを使用することにしました。
このおかげで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
(YouTube ビデオにアクセスするために必要な URL を返します)。コマンド内の指定されたポイントで結果 (つまり、返されたビデオ URL) を置き換えます
ffmpeg
。
問題は、$()
正しい URL を取得/置換するために構文が使用されていないことのようです。ffmpeg
生のコマンドを読み取って、意図されていないオプションyoutube-dl
を解析しようとすることも同様です。youtube-dl
考えられる解決策
注意すべき点の 1 つは、 が$()
の一部ではないということですffmpeg
。つまり、が実行されたり、結果が置き換えられたりするffmpeg
ものではありません。youtube-dl
Linux の場合、Linux が使用しているシェルは、 に渡す前に実行と置換を行いますffmpeg
。
あなたがどの OS を使っているのかは分かりませんが、元の投稿で「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