如何使用 telethon 下载视频

问题描述 投票:0回答:2

我正在研究 telethon

download_media
_download_document
从电报下载视频的方法。我的代码是这样的:

def callback(update): 
        Channel_Entity = client.get_entity(Channel_List) #Get specific Channel information

        file_name = str(document_id)+'.mp4'
        current_path = os.getcwd()
        file_path_gif = current_path+'/media/gif'
        file = open(os.path.join(file_path_gif,file_name),'wb')

        if isinstance(update, UpdateNewChannelMessage): #Check Update message in channel
            if update.message.to_id.channel_id == Channel_Entity.id:

                client._download_document(update.message.media, file, update.message.date, progress_callback=None)

                # OR 

                client.download_media(update.message, file, progress_callback=None)

但是,当视频发送到频道并使用此代码下载时,视频无法播放,并且播放器会打印以下消息: 无法渲染文件。 此代码适用于图像和 gif 文件,但不适用于视频文件。我该怎么办?

python-3.x telegram telethon
2个回答
17
投票

我希望这段代码能对您有所帮助。我用的是

Telethon V0.19
,但是之前的版本几乎是一样的。

from telethon import TelegramClient

api_id = XXXXXXX
api_hash = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX'
phone_number = '+98XXXXXXXXX'
################################################
channel_username = 'tehrandb'
################################################

client = TelegramClient('session_name',
                    api_id,
                    api_hash)

assert client.connect()
if not client.is_user_authorized():
    client.send_code_request(phone_number)
    me = client.sign_in(phone_number, input('Enter code: '))

# ---------------------------------------
msgs = client.get_messages(channel_username, limit=100)
for msg in msgs.data:
    if msg.media is not None:
        client.download_media(message=msg)

0
投票

2024 更新代码!

将此文件保存到Python文件中并运行它....

from telethon import TelegramClient, events
import telethon.tl.types

api_id = id
api_hash = hash

channel = group/channel username

client = TelegramClient('anon', api_id, api_hash)

async def process_messages():
   # You can use any chat object here
   chat = await client.get_entity(channel)

   async for message in client.iter_messages(chat):
    if (
          hasattr(message, 'media') and
          hasattr(message.media, 'document') and
          hasattr(message.media.document, 'mime_type') and
          message.media.document.mime_type == 'video/mp4'
      ):

        await  client.download_media(message=message , file='file_name.mp4')
        # The message is a video message
        print(f'Found video message: {message.id}')

with client:
    client.loop.run_until_complete(process_messages())
© www.soinside.com 2019 - 2024. All rights reserved.