{"id":5405,"date":"2026-04-01T07:10:47","date_gmt":"2026-03-31T22:10:47","guid":{"rendered":"https:\/\/matoken.org\/blog\/?p=5405"},"modified":"2026-04-01T07:10:49","modified_gmt":"2026-03-31T22:10:49","slug":"twitter-broadcast-download","status":"publish","type":"post","link":"https:\/\/matoken.org\/blog\/2026\/04\/01\/twitter-broadcast-download\/","title":{"rendered":"Twitter\u3067\u914d\u4fe1\u3055\u308c\u305f\u52d5\u753b\u30a2\u30fc\u30ab\u30a4\u30d6\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9"},"content":{"rendered":"<div id=\"preamble\">\n<div class=\"sectionbody\">\n<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"60\" height=\"48\" viewBox=\"0 0 1600 1280\"><path fill=\"currentColor\" d=\"M1588 152q-67 98-162 167q1 14 1 42q0 130-38 259.5T1273.5 869T1089 1079.5t-258 146t-323 54.5q-271 0-496-145q35 4 78 4q225 0 401-138q-105-2-188-64.5T189 777q33 5 61 5q43 0 85-11q-112-23-185.5-111.5T76 454v-4q68 38 146 41q-66-44-105-115T78 222q0-88 44-163q121 149 294.5 238.5T788 397q-8-38-8-74q0-134 94.5-228.5T1103 0q140 0 236 102q109-21 205-78q-37 115-142 178q93-10 186-50\"\/><\/svg><!-- https:\/\/icon-sets.iconify.design\/?query=twitter&search-page=1 \/ fa:twitter --><\/p>\n<div class=\"paragraph\">\n<p>Twitter\u3067\u914d\u4fe1\u3055\u308c\u305f\u30e9\u30a4\u30d6\u52d5\u753b\u306e\u30a2\u30fc\u30ab\u30a4\u30d6\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u307f\u307e\u3057\u305f\uff0e<\/p>\n<\/div>\n<p><!--more--><\/p>\n<div class=\"paragraph\">\n<p>\u3068\u3042\u308b\u30a4\u30d9\u30f3\u30c8\u304cTwitter \u3067\u914d\u4fe1\u3055\u308c\u3066\u3044\u305f\u3089\u3057\u304fYouTube \u306b\u3082\u3042\u308b\u306e\u3067\u306f\u3068\u601d\u3063\u305f\u3051\u3069\u898b\u5f53\u305f\u308a\u307e\u305b\u3093\uff0eTwitter \u306b\u30a2\u30fc\u30ab\u30a4\u30d6\u304c\u6b8b\u3063\u3066\u3044\u308b\u306e\u3067\u3059\u304c\uff0c\u306a\u3093\u304b\u518d\u751f\u304c\u3059\u3050\u6b62\u307e\u308b\u306e\u3067\u8f9b\u3044\uff0e<br \/>\n\u3068\u3044\u3046\u3053\u3068\u3067\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3067\u304d\u306a\u3044\u304b\u306a\u3068\u691c\u7d22\u3059\u308b\u3068X\/Twitter Broadcast Downloader \u3068\u3044\u3046\u3082\u306e\u3092\u898b\u3064\u3051\u307e\u3057\u305f\uff0e\u3053\u308c\u3067\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u307f\u307e\u3057\u305f\uff0e<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>\n<p><a href=\"https:\/\/github.com\/offish\/twitter-x-broadcast-downloader\">offish\/twitter-x-broadcast-downloader: Download X\/Twitter broadcasts or lives<\/a><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"title\">venv \u74b0\u5883\u306b\u5c0e\u5165\u3057\u3066\u8a66\u3059\uff0e<\/div>\n<div class=\"content\">\n<pre>$ git clone https:\/\/github.com\/offish\/twitter-x-broadcast-downloader <b class=\"conum\">(1)<\/b>\n$ cd twitter-x-broadcast-downloader\n$ python3 -m venv venv <b class=\"conum\">(2)<\/b>\n$ source venv\/bin\/activate <b class=\"conum\">(3)<\/b>\n$ pip install -r \"requirements.txt\" <b class=\"conum\">(4)<\/b>\n$ python main.py <b class=\"conum\">(5)<\/b>\nWhat is the broadcast URL? https:\/\/x.com\/i\/broadcasts\/1qGvvkWeqdBGB <b class=\"conum\">(6)<\/b>\nGot media key 28_2038539604165640192\nGot playback URL https:\/\/prod-fastly-ap-northeast-1.video.pscp.tv\/Transcoding\/v1\/hls\/PTdVIXd-pzzuOcGNlng6TG9haAxe5-rcN7QaIridcZbNbingfwGFrSiqe9DsliGqOpoLNO8lZ2Pk9a_owkY3aw\/non_transcode\/ap-northeast-1\/periscope-replay-direct-prod-ap-northeast-1-public\/master_dynamic_16671870457049479117.m3u8?type=replay\nDownloading the broadcast as 28_2038539604165640192.mp4...\n[generic] Extracting URL: https:\/\/prod-fastly-ap-northeast-1.video.pscp.tv\/Transcoding\/v1\/hls\/PTdVIXd-pzzuOcGNlng6TG9haAxe5...117.m3u8?type=replay\n[generic] master_dynamic_16671870457049479117: Downloading webpage\n[generic] master_dynamic_16671870457049479117: Downloading m3u8 information\n[generic] master_dynamic_16671870457049479117: Checking m3u8 live status\n[info] master_dynamic_16671870457049479117: Downloading 1 format(s): 5500\n[hlsnative] Downloading m3u8 manifest\n[hlsnative] Total fragments: 6385\n[download] Destination: \/home\/matoken\/src\/twitter-x-broadcast-downloader\/downloads\/28_2038539604165640192.mp4\n[download] 100% of    3.64GiB in 00:03:49 at 16.24MiB\/s\n[FixupM3u8] Fixing MPEG-TS in MP4 container of \"\/home\/matoken\/src\/twitter-x-broadcast-downloader\/downloads\/28_2038539604165640192.mp4\"\n\n\nWhat is the broadcast URL? <b class=\"conum\">(7)<\/b><\/pre>\n<\/div>\n<\/div>\n<div class=\"colist arabic\">\n<ol>\n<li>\n<p>source clone<\/p>\n<\/li>\n<li>\n<p>venv \u74b0\u5883\u3092\u4f5c\u308b<\/p>\n<\/li>\n<li>\n<p>venv \u3092\u6709\u52b9\u306b<\/p>\n<\/li>\n<li>\n<p>venv \u74b0\u5883\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/p>\n<\/li>\n<li>\n<p>X\/Twitter Broadcast Downloader \u3092\u5b9f\u884c<\/p>\n<\/li>\n<li>\n<p>\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u305f\u3044URL \u3092\u6e21\u3059<\/p>\n<\/li>\n<li>\n<p>\u6b21\u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u305f\u3044URL \u5f85\u3061<\/p>\n<\/li>\n<\/ol>\n<\/div>\n<div class=\"paragraph\">\n<p>\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3067\u304d\u307e\u3057\u305f\uff0e<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre>$ ls -lA downloads\/\ntotal 3722204\n-rw-rw-r-- 1 matoken matoken 3811532277 Mar 31 18:03 28_2038539604165640192.mp4\n-rw-rw-r-- 1 matoken matoken          0 Mar 31 17:57 .gitkeep\n$ ffprobe downloads\/28_2038539604165640192.mp4 2&gt;&amp;1 | grep -A 99 ^Input\nInput #0, mov,mp4,m4a,3gp,3g2,mj2, from 'downloads\/28_2038539604165640192.mp4':\n  Metadata:\n    major_brand     : isom\n    minor_version   : 512\n    compatible_brands: isomiso2avc1mp41\n    encoder         : Lavf61.7.100\n  Duration: 03:35:23.76, start: 0.000000, bitrate: 2359 kb\/s\n  Stream #0:0[0x1](und): Video: h264 (High) (avc1 \/ 0x31637661), yuv420p(progressive), 1920x1080, 2187 kb\/s, 30 fps, 30 tbr, 90k tbn (default)\n      Metadata:\n        handler_name    : VideoHandler\n        vendor_id       : [0][0][0][0]\n  Stream #0:1[0x2](und): Audio: aac (LC) (mp4a \/ 0x6134706D), 48000 Hz, stereo, fltp, 160 kb\/s (default)\n      Metadata:\n        handler_name    : SoundHandler\n        vendor_id       : [0][0][0][0]<\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>\u4ee5\u4e0b\u4f59\u9332\uff0e<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>\u30ea\u30e2\u30fc\u30c8\u306eVPS \u3067\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u305f\u306e\u3067\u3059\u304c\u7d50\u69cb\u5927\u304d\u3044\u306e\u3067\u5c0f\u3055\u304f\u3057\u3066\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u307e\u3059\uff0e<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"title\">ffmpeg \u30b3\u30de\u30f3\u30c9\u3067\u52d5\u753b\u3092\u5c0f\u3055\u304f<\/div>\n<div class=\"content\">\n<pre>$ ffmpeg -i downloads\/28_2038539604165640192.mp4 -vcodec libx264 -crf 33 -vf \"scale=720:-2\" -c:a copy downloads\/28_2038539604165640192-720.mp4\n$ ls -1s downloads\/\ntotal 4172176\n 449972 28_2038539604165640192-720.mp4\n3722204 28_2038539604165640192.mp4<\/pre>\n<\/div>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"title\">\u52d5\u753b\u306e\u97f3\u58f0\u3092\u53d6\u308a\u51fa\u3057\u3066Whisper.cpp \u3067\u5b57\u5e55\u4f5c\u6210<\/div>\n<div class=\"content\">\n<pre>$ ffmpeg -i ~\/Downloads\/28_2038539604165640192-720.mp4 -ar 44100 -ac 1 -sample_fmt s16 -af silenceremove=1:0:-50dB  clawcon.wav\n$ .\/build\/bin\/whisper-cli -m .\/models\/ggml-large-v3-turbo.bin --output-srt --language auto -f .\/clawcon.wav\n$ ls -1s clawcon.wav*\n1067548 clawcon.wav\n    152 clawcon.wav.srt\n$ head  clawcon.wav.srt\n1\n00:00:00,000 --&gt; 00:00:06,660\nAlright everyone, we'll be starting in 10 minutes. Please make your way to the stage area. We'll be starting in 10 minutes.\n\n2\n00:00:30,000 --&gt; 00:00:59,980\n Thank you.\n\n3\n00:01:00,000 --&gt; 00:01:29,980<\/pre>\n<\/div>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"title\">\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u74b0\u5883<\/div>\n<div class=\"content\">\n<pre>$ dpkg-query -W python3 python3-venv ffmpeg\nffmpeg  7:7.1.3-0+deb13u1\npython3 3.13.5-1\npython3-venv    3.13.5-1\n$ lsb_release -dr\nDescription:    Debian GNU\/Linux 13 (trixie)\nRelease:        13\n$ arch\nx86_64<\/pre>\n<\/div>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"title\">\u52d5\u753b\u7de8\u96c6\uff0c\u6587\u5b57\u8d77\u3053\u3057\u74b0\u5883<\/div>\n<div class=\"content\">\n<pre>$ dpkg-query -W ffmpeg\nffmpeg  7:8.1-3+b1\na$ git remote -v\norigin  https:\/\/github.com\/ggerganov\/whisper.cpp.git (fetch)\norigin  https:\/\/github.com\/ggerganov\/whisper.cpp.git (push)\n$ git log --pretty=oneline -1\n95ea8f9bfb03a15db08a8989966fd1ae3361e20d (HEAD -&gt; master, origin\/master, origin\/HEAD) sync : ggml\n$ lsb_release -dr\nDescription:    Debian GNU\/Linux forky\/sid\nRelease:        n\/a\n$ arch\nx86_64<\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Twitter\u3067\u914d\u4fe1\u3055\u308c\u305f\u30e9\u30a4\u30d6\u52d5\u753b\u306e\u30a2\u30fc\u30ab\u30a4\u30d6\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u307f\u307e\u3057\u305f\uff0e<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"webmentions_disabled_pings":false,"webmentions_disabled":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":4,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"federated","footnotes":""},"categories":[7,6,199,1231],"tags":[95,65],"class_list":["post-5405","post","type-post","status-publish","format-standard","hentry","category-debian-linux","category-linux","category-sid","category-trixie","tag-ffmpeg","tag-twitter-2"],"_links":{"self":[{"href":"https:\/\/matoken.org\/blog\/wp-json\/wp\/v2\/posts\/5405","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/matoken.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/matoken.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/matoken.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/matoken.org\/blog\/wp-json\/wp\/v2\/comments?post=5405"}],"version-history":[{"count":2,"href":"https:\/\/matoken.org\/blog\/wp-json\/wp\/v2\/posts\/5405\/revisions"}],"predecessor-version":[{"id":5407,"href":"https:\/\/matoken.org\/blog\/wp-json\/wp\/v2\/posts\/5405\/revisions\/5407"}],"wp:attachment":[{"href":"https:\/\/matoken.org\/blog\/wp-json\/wp\/v2\/media?parent=5405"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/matoken.org\/blog\/wp-json\/wp\/v2\/categories?post=5405"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/matoken.org\/blog\/wp-json\/wp\/v2\/tags?post=5405"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}