FFMPEG。 YouTubeからビデオの一部をダウンロードする


YouTubeの一部の動画を友だちと共有したい場合があります-現代の現実の集中時間は制限まで短縮され、 タイムコードが付いていても」「21:51から24:55に視聴」というコメントを付けて動画へのリンクをドロップすると、素晴らしいですビデオが視聴されない可能性。

また、動画の編集には動画が必要になる場合があります。動画全体を数秒間ダウンロードして、編集プログラムで必要な部分を検索/切り取るのはかなり不便です。

ffmpegを使用してYouTubeビデオの一部をダウンロードする方法-catの下

直接リンクを取得する


PythonでのTelegram ボットの実装の一部:
pytubeライブラリが必要です。
YouTubeクラスオブジェクトを作成してリンクを転送し、目的のストリームの番号を転送して、ビデオ/オーディオへの直接リンクを取得します

from pytube import YouTube link = "  " itag = _ url = YouTube(link).streams.get_by_itag(itag).url 

1080pおよび480pストリームにはオーディオトラックがないことに注意してください。


次に-「hh:mm:ss.xx」の形式で、開始(-ss)および終了(-to)のタイムコードとともに入力(-i)ffmpegへのリンクを送信します。 キーフレームの損失によりビデオの先頭で画像がフリーズするのを避けるために、オーディオコーデック、ビットレート、および "-avoid_negative_ts make_zero"を設定します。

ffmpegは適切なタイミングでビデオをダウンロードします-ビデオをコンピューターにダウンロードしてトリミングする必要はありません-すぐに目的の作品を取り出します。

 process_call_str = 'ffmpeg -ss {1} -to {2} -i "{0}"'\ '-acodec aac -b:a 192k -avoid_negative_ts make_zero "{3}"' .format(str(url), str(ss), str(t), download_file_path) status = subprocess.check_call(process_call_str, shell=True) 

音声なしのストリーム


それでは、音声のないストリームをどうするのでしょうか? FFMPEGはここでも役立ちます-入力で複数のストリームを受信し、それらを結合できます。

ビデオストリーム(例:137-1080p)およびオーディオ/ビデオ付きのストリーム(例:18-360p)への直接リンクを取得します。

 url = YouTube(link).streams.get_by_itag(itag).url aurl = YouTube(link).streams.get_by_itag(18).url 

次に、魔法が始まります-両方のストリームをフィードし、「-map」を使用して、最初のストリームからビデオトラックを取得し、2番目のストリームからオーディオトラックを取得して結合します-ストリームの読み込みと結合は、2つのソースから適切な場所から行われます

 process_call_str = 'ffmpeg -ss {2} -to {3} -i "{0}" -ss {2} -to {3} -i "{1}"' \ ' -acodec aac -b:a 192k -avoid_negative_ts ' \ 'make_zero -map 0:v:0 -map 1:a:0 "{4}"' \ .format(str(url), str(aurl), str(ss), str(t), download_file_path) status = subprocess.check_call(process_call_str, shell=True) 

おわりに


一般に、ffmpegは非常に強力なものであり、その可能性はビデオ/オーディオをある形式から別の形式に変換するよりもいくらか広く、着信チャネル、ディスク、プロセッサ時間およびRAMの負荷を最適化できます。

ffmpegを使用して、 ボットはラウドネス、opus形式への圧縮による音の加速/減速を実装します。 ここに、タイムコードによる適切な瞬間からのビデオ/オーディオのダウンロードがあります-リンクにタイムコードを添付するだけで、ボットはすぐに目的の形式と品質で目的のオーディオ/ビデオを送信します:

http://www.youtube.com/watch?v=Qgm36HHDEk0(30:29.5-30:38.5)

Source: https://habr.com/ru/post/J351372/


All Articles