Youtube의 게시 제한
15176 단어 YouTubeAPI파이썬rtmp
YouTube에서 잠금 알림
자동 게시를 반복하던 어느 날 YouTube 커뮤니티에서 게시한 동영상을 잠갔다는 연락이 있습니다.
같은 동영상을 YouTube Stadio 경유로부터 투고했을 경우는 문제 없기 때문에, 아무래도 자동 투고의 상한에 걸렸던 모습. 상한의 해제는 어플리케이션의 승인되면 대응할 수 있을 것 같지만, Web를 조사한 한은 간단하게는 통과하지 않을 것 같다. 어쩔 수 없는 YouTube 라이브 스트리밍을 사용하여 동영상 파일을 RTMP를 통해 업로드합니다. 이 작업에는 GCP와 Blogger의 협력 의 개소의 수정이 필요합니다.
YouTube Data API 범위 변경
test.py
YOUTUBE_UPLOAD_SCOPE = "https://www.googleapis.com/auth/youtube.upload"
YOUTUBE_API_SERVICE_NAME = "youtube"
YOUTUBE_API_VERSION = "v3"
upload만이었던 것을 라이브 스트리밍/브로드캐스트가 가능한 대로 스코프를 넓힙니다.
python:test.py
YOUTUBE_UPLOAD_SCOPE = "https://www.googleapis.com/auth/youtube"
YOUTUBE_API_SERVICE_NAME = "youtube"
YOUTUBE_API_VERSION = "v3"
token.pickle 파일을 삭제하고 인증을 다시 시도합니다.또한 YouTube Stadio에서 실시간 스트리밍 시작을 신청해야합니다.
파이썬 프로그램
test.py에 다음 코드를 작성합니다.
기본 라이브 스트림의 키를 가져와 라이브 브로드캐스트와 연결합니다.
그리고 지정된 RTMP URL에 ffmpeg로 동영상 스트리밍을 흘려 보냅니다.
test.py
import datetime
from pytz import timezone
def getStreamKey(title,desc):
youtube = get_authenticated_service(YOUTUBE_API_SERVICE_NAME,YOUTUBE_API_VERSION)
request = youtube.liveStreams().list(
part="snippet,cdn,contentDetails,status",
mine = True
)
response = request.execute()
key = None
for item in response['items']:
if 'Default' in item['snippet']['title']:
key = item['cdn']['ingestionInfo']['streamName']
start = datetime.datetime.now(timezone('Asia/Tokyo'))
start = start + datetime.timedelta(seconds=5)
day = start.strftime('%Y年%m月%d日 ')
start_date = start.strftime('%Y-%m-%dT%H:%M:%S+09:00')
end = start + datetime.timedelta(hours=1)
end_date = end.strftime('%Y-%m-%dT%H:%M:%S+09:00')
request = youtube.liveBroadcasts().insert(
part="id,snippet,contentDetails,status",
body={
"contentDetails": {
"enableClosedCaptions": True,
"enableContentEncryption": True,
"enableDvr": True,
"enableEmbed": True,
"enableAutoStart": True,
"enableAutoStop": True,
"recordFromStart": True,
"startWithSlate": True
},
"snippet": {
"title": day + title,
"description" : desc,
"scheduledStartTime": start_date,
"scheduledEndTime": end_date
},
"status": {
"privacyStatus": "public"
}
}
)
response = request.execute()
broadcast_id = response['id']
request = youtube.liveBroadcasts().bind(
id = broadcast_id,
part="id,snippet,contentDetails,status",
streamId = item['id']
)
response = request.execute()
time.sleep(5)
return key
def streamVideo(title,desc):
key = getStreamKey(title,desc)
if key == None:
return
cmd = 'ffmpeg -y -i /tmp/input.mp4 -i /tmp/temp.mp3 '
cmd += ' -movflags +faststart -c:a aac -profile:a aac_low -ac 2 -ar 48000 -c:v libx264'
cmd += ' -vf yadif=0:-1:1 -profile:v high -bf 2 -g 30 -coder 1 -b:v 1M -b:a 384k'
cmd += ' -pix_fmt yuv420p -map 0:v:0 -map 1:a:0 -shortest '
cmd += ' -f flv rtmp://a.rtmp.youtube.com/live2/' + key
rtn = subprocess.run(cmd, shell=True, stdout=PIPE, stderr=PIPE, text=True)
위에서 만든 streamVideo()를 getRss()에서 호출하십시오.
test.py
def getRss():
with open('/tmp/temp.mp3' ,mode='wb+') as f:
f.truncate(0)
rssUrl = 'https://news.google.com/news/rss/headlines/section/topic/TECHNOLOGY'
rssLang = '?hl=en-US&gl=US&ceid=US:en'
feed = feedparser.parse(rssUrl + rssLang)
for entry in feed.entries:
link = entry.get('link')
getBody(link)
#makeVideo()
#youtube_upload('この動画のタイトル','この記事の説明',['この動画のタグ'])
streamVideo('この記事のタイトル','この記事の説明')
time.sleep(5)
이제 라이브 게재된 동영상이 Youtube에 남아 있어야 합니다.
하고 싶은 곳이었습니다만 공개로부터 6시간 정도 하면 비공개로 되어 버리는 것 같습니다.
근본적으로 Google에 인증을 받을 수밖에 없을지도 모릅니다.
혹은 YoutubeStudio에서 다시 업로드할 수밖에 없습니다.
Reference
이 문제에 관하여(Youtube의 게시 제한), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ronk/items/648d2493d774aedd5ea5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)