精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

用Python將音頻內(nèi)容轉(zhuǎn)換為文本格式

開發(fā) 后端
在本教程中,我們將使用稱為AssemblyAI的高精度語音轉(zhuǎn)文本W(wǎng)eb API從MP3錄音中提取文本(也支持許多其他格式)。

[[338641]]

當(dāng)對一個(gè)或多個(gè)人的談話進(jìn)行記錄時(shí),采用一種高度準(zhǔn)確和自動化的方式將口語提取為文本非常有用。轉(zhuǎn)換成文字后,便可以將其用于進(jìn)一步分析或用作其他功能。

在本教程中,我們將使用稱為AssemblyAI(https://www.assemblyai.com/)的高精度語音轉(zhuǎn)文本W(wǎng)eb API從MP3錄音中提取文本(也支持許多其他格式)。

在本教程中,音頻文件示例下載地址請掃描本文下方二維碼添加Python小助手獲取,下面是音頻輸出如下所示的高精度文本轉(zhuǎn)錄內(nèi)容: 

  1. An object relational mapper is a code library that automates the transfer of   
  2. data stored in relational, databases into objects that are more commonly used  
  3. in application code or EMS are useful because they provide a high level   
  4. abstraction upon a relational database that allows developers to write Python   
  5. code instead of sequel to create read update and delete, data and schemas in   
  6. their database. Developers can use the programming language. They are   
  7. comfortable with to work with a database instead of writing SQL... 

教程要求

在本教程中,我們將使用以下依賴項(xiàng),稍后將安裝它們。請確保您的環(huán)境中還安裝了Python 3,最好安裝3.6或更高版本:

我們將使用以下依賴關(guān)系來完成本教程:

  •  requests 2.24.0  來向AssemblyAI語音文本API發(fā)出HTTP請求
  •  一個(gè) AssemblyAI 帳戶,您可以在此處(https://app.assemblyai.com/login/)注冊免費(fèi)的API訪問密鑰

本文所有代碼下載地址請掃描本文下方二維碼添加Python小助手獲取。

搭建開發(fā)環(huán)境

轉(zhuǎn)到保存Python虛擬環(huán)境的目錄。我將我的目錄保存在用戶主目錄下的venvs子目錄中。使用以下命令為此項(xiàng)目創(chuàng)建一個(gè)新的virtualenv。

  1. python3 -m venv ~/venvs/pytranscribe 

用 shell 命令激活 virtualenv:

  1. source ~/venvs/pytranscribe/bin/activate 

執(zhí)行上述命令后,命令提示符將發(fā)生更改,因此virtualenv的名稱將以原始命令提示符格式開頭,如果您的提示符只是$,則其外觀如下所示: 

  1. (pytranscribe) $ 

請記住,您必須在每個(gè) virtualenv 中使用依賴項(xiàng)的新終端窗口中激活您的 virtualenv 。

現(xiàn)在,我們可以將請求包安裝到已激活但為空的 virtualenv 中。 

  1. pip install requests==2.24.0 

查找類似于以下內(nèi)容的輸出,以確認(rèn)從PyPI正確安裝了相應(yīng)的軟件包。 

  1. (pytranscribe) $ pip install requests==2.24.0  
  2. Collecting requests==2.24.0  
  3.   Using cached https://files.pythonhosted.org/packages/45/1e/0c169c6a5381e241ba7404532c16a21d86ab872c9bed8bdcd4c423954103/requests-2.24.0-py2.py3-none-any.whl  
  4. Collecting certifi>=2017.4.17 (from requests==2.24.0)  
  5.   Using cached https://files.pythonhosted.org/packages/5e/c4/6c4fe722df5343c33226f0b4e0bb042e4dc13483228b4718baf286f86d87/certifi-2020.6.20-py2.py3-none-any.whl  
  6. Collecting urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 (from requests==2.24.0)  
  7.   Using cached https://files.pythonhosted.org/packages/9f/f0/a391d1463ebb1b233795cabfc0ef38d3db4442339de68f847026199e69d7/urllib3-1.25.10-py2.py3-none-any.whl  
  8. Collecting chardet<4,>=3.0.2 (from requests==2.24.0)  
  9.   Using cached https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl  
  10. Collecting idna<3,>=2.5 (from requests==2.24.0)  
  11.   Using cached https://files.pythonhosted.org/packages/a2/38/928ddce2273eaa564f6f50de919327bf3a00f091b5baba8dfa9460f3a8a8/idna-2.10-py2.py3-none-any.whl  
  12. Installing collected packages: certifi, urllib3, chardet, idna, requests  
  13. Successfully installed certifi-2020.6.20 chardet-3.0.4 idna-2.10 requests-2.24.0 urllib3-1.25.10 

我們已經(jīng)安裝了所有必需的依賴項(xiàng),因此我們可以開始對應(yīng)用程序進(jìn)行編碼。

上傳、啟動和轉(zhuǎn)錄音頻

我們已完成開始構(gòu)建應(yīng)用程序所需的一切,該應(yīng)用程序會將音頻轉(zhuǎn)換為文本。我們將在三個(gè)文件中構(gòu)建此應(yīng)用程序:

1、upload_audio_file.py:將您的音頻文件上傳到AssemblyAI服務(wù)上的安全位置,以便可以進(jìn)行處理。如果您的音頻文件已經(jīng)可以通過公共URL訪問,則無需執(zhí)行此步驟,只需按照此快速入門(https://docs.assemblyai.com/overview/getting-started)

2、initial_transcription.py:告訴API要轉(zhuǎn)錄并立即啟動的文件

3、get_transcription.py:如果仍在處理轉(zhuǎn)錄,則顯示轉(zhuǎn)錄狀態(tài),或者在處理完成后顯示轉(zhuǎn)錄結(jié)果

創(chuàng)建一個(gè)名為pytranscribe的新目錄,以在我們編寫文件時(shí)存儲這些文件。然后轉(zhuǎn)到新的項(xiàng)目目錄。 

  1. mkdir pytranscibe  
  2. cd pytranscribe 

我們還需要將 AssemblyAI API 密鑰導(dǎo)出為環(huán)境變量。注冊 AssemblyAI 帳戶并登錄 AssemblyAI 儀表板,然后復(fù)制“您的API token”,如以下屏幕截圖所示:

 

  1. export ASSEMBLYAI_KEY=your-api-key-here 

請注意,必須每個(gè)命令行窗口中使用 export 命令以保證此密鑰可訪問。如果您沒有在運(yùn)行腳本的環(huán)境中將標(biāo)記導(dǎo)出為 ASSEMBLYAI_KEY,則我們正在編寫的腳本將無法訪問API。

現(xiàn)在我們已經(jīng)創(chuàng)建了項(xiàng)目目錄并將API密鑰設(shè)置為環(huán)境變量,讓我們繼續(xù)編寫第一個(gè)文件的代碼,該文件會將音頻文件上傳到AssemblyAI服務(wù)。

上傳音頻文件并進(jìn)行轉(zhuǎn)錄

創(chuàng)建一個(gè)名為upload_audio_file.py的新文件,并將以下代碼放入其中: 

  1. import argparse  
  2. import os  
  3. import requests  
  4. API_URL = "https://api.assemblyai.com/v2/"  
  5. def upload_file_to_api(filename):  
  6.     """Checks for a valid file and then uploads it to AssemblyAI  
  7.     so it can be saved to a secure URL that only that service can access.  
  8.     When the upload is complete we can then initiate the transcription  
  9.     API call.  
  10.     Returns the API JSON if successful, or None if file does not exist.  
  11.     """  
  12.     if not os.path.exists(filename):  
  13.         return None  
  14.     def read_file(filename, chunk_size=5242880):  
  15.         with open(filename, 'rb') as _file:  
  16.             while True:  
  17.                 data = _file.read(chunk_size)  
  18.                 if not data:  
  19.                     break 
  20.                  yield data  
  21.     headers = {'authorization': os.getenv("ASSEMBLYAI_KEY")}  
  22.     response = requests.post("".join([API_URL, "upload"]), headersheaders=headers,  
  23.                              data=read_file(filename))  
  24.     return response.json() 

上面的代碼導(dǎo)入了argparse,os和request軟件包,以便我們可以在此腳本中使用它們。API_URL是一個(gè)常量,具有AssemblyAI服務(wù)的基本URL。我們使用單個(gè)參數(shù)定義upload_file_to_api函數(shù),filename應(yīng)該是一個(gè)字符串,其中包含文件及其文件名的絕對路徑。

在函數(shù)中,我們檢查文件是否存在,然后使用Request的分塊傳輸編碼將大文件流式傳輸?shù)紸ssemblyAI API。

os模塊的getenv函數(shù)讀取使用帶有g(shù)etenv的export命令在命令行上設(shè)置的API。確保在運(yùn)行此腳本的終端中使用該導(dǎo)出命令,否則ASSEMBLYAI_KEY值將為空白。如有疑問,請使用echo $ ASSEMBLY_AI查看該值是否與您的API密鑰匹配。

要使用upload_file_to_api函數(shù),請將以下代碼行添加到upload_audio_file.py文件中,以便我們可以正確地將此代碼作為使用python命令調(diào)用的腳本執(zhí)行: 

  1. if __name__ == "__main__":  
  2.     parser = argparse.ArgumentParser()  
  3.     parser.add_argument("filename")  
  4.     args = parser.parse_args()  
  5.     upload_filename = args.filename  
  6.     response_json = upload_file_to_api(upload_filename)  
  7.     if not response_json:  
  8.         print("file does not exist")  
  9.     else:  
  10.         print("File uploaded to URL: {}".format(response_json['upload_url'])) 

上面的代碼創(chuàng)建了一個(gè)ArgumentParser對象,它允許應(yīng)用程序從命令行獲取單個(gè)參數(shù)來指定我們要訪問的對象,讀取并上傳到AssmeblyAI服務(wù)的文件。

如果文件不存在,腳本將顯示一條消息,提示找不到該文件。在路徑中,我們確實(shí)找到了正確的文件,然后使用upload_file_to_api函數(shù)中的代碼上傳了文件。

通過使用python命令在命令行上運(yùn)行完整的upload_audio_file.py腳本,以執(zhí)行該腳本。將FULL_PATH_TO_FILE替換為您要上傳的文件的絕對路徑,例如/Users/matt/devel/audio.mp3。

  1. python upload_audio_file.py FULL_PATH_TO_FILE 

假設(shè)在您指定的位置找到文件,當(dāng)腳本完成文件的上傳后,它將打印一條帶有唯一URL的消息:

  1. File uploaded to URL: https://cdn.assemblyai.com/upload/463ce27f-0922-4ea9-9ce4-3353d84b5638 

該URL不是公開的,只能由AssemblyAI服務(wù)使用,因此除您及其轉(zhuǎn)錄的API外,其他任何人都無法訪問您的文件及其內(nèi)容。

重要的部分是URL的最后一部分,在此示例中為463ce27f-0922-4ea9-9ce4-3353d84b5638。保存該唯一標(biāo)識符,因?yàn)槲覀冃枰獙⑵鋫鬟f給下一個(gè)啟動轉(zhuǎn)錄服務(wù)的腳本。

啟動轉(zhuǎn)錄

接下來,我們將編寫一些代碼來開始轉(zhuǎn)錄。創(chuàng)建一個(gè)名為initial_transcription.py的新文件。將以下代碼添加到新文件中。 

  1. import argparse  
  2. import os  
  3. import requests  
  4. API_URL = "https://api.assemblyai.com/v2/"  
  5. CDN_URL = "https://cdn.assemblyai.com/"  
  6. def initiate_transcription(file_id):  
  7.     """Sends a request to the API to transcribe a specific  
  8.     file that was previously uploaded to the API. This will  
  9.     not immediately return the transcription because it takes  
  10.     a moment for the service to analyze and perform the  
  11.     transcription, so there is a different function to retrieve  
  12.     the results.  
  13.     """  
  14.     endpoint = "".join([API_URL, "transcript"])  
  15.     json = {"audio_url": "".join([CDN_URL, "upload/{}".format(file_id)])}  
  16.     headers = {  
  17.         "authorization": os.getenv("ASSEMBLYAI_KEY"),  
  18.         "content-type": "application/json"  
  19.     }  
  20.     response = requests.post(endpoint, jsonjson=json, headersheaders=headers)  
  21.     return response.json() 

我們具有與先前腳本相同的導(dǎo)入,并添加了一個(gè)新常量CDN_URL,該常量與AssemblyAI存儲上傳的音頻文件的單獨(dú)URL匹配。

initiate_transcription函數(shù)本質(zhì)上只是向AssemblyAI API設(shè)置了一個(gè)HTTP請求,以傳入的特定URL對音頻文件啟動轉(zhuǎn)錄過程。這就是為什么file_id傳遞很重要的原因:完成音頻文件的URL 我們告訴AssemblyAI進(jìn)行檢索。

通過附加此代碼來完成文件,以便可以從命令行輕松地使用參數(shù)調(diào)用它。 

  1. if __name__ == "__main__":  
  2.     parser = argparse.ArgumentParser()  
  3.     parser.add_argument("file_id")  
  4.     args = parser.parse_args()  
  5.     file_id = args.file_id  
  6.     response_json = initiate_transcription(file_id)  
  7.     print(response_json) 

通過在initiate_transcription文件上運(yùn)行python命令來啟動腳本,并傳入您在上一步中保存的唯一文件標(biāo)識符。 

  1. # the FILE_IDENTIFIER is returned in the previous step and will  
  2. # look something like this: 463ce27f-0922-4ea9-9ce4-3353d84b5638  
  3. python initiate_transcription.py FILE_IDENTIFIER 

API將發(fā)回該腳本打印到命令行的JSON響應(yīng)。 

  1. {'audio_end_at': None, 'acoustic_model': 'assemblyai_default', 'text': None,   
  2.  'audio_url': 'https://cdn.assemblyai.com/upload/463ce27f-0922-4ea9-9ce4-3353d84b5638',   
  3.  'speed_boost': False, 'language_model': 'assemblyai_default', 'redact_pii': False,   
  4.  'confidence': None, 'webhook_status_code': None,   
  5.  'id': 'gkuu2krb1-8c7f-4fe3-bb69-6b14a2cac067', 'status': 'queued', 'boost_param': None,   
  6.  'words': None, 'format_text': True, 'webhook_url': None, 'punctuate': True,  
  7.  'utterances': None, 'audio_duration': None, 'auto_highlights': False,   
  8.  'word_boost': [], 'dual_channel': None, 'audio_start_from': None} 

記下JSON響應(yīng)中id鍵的值。這是我們需要用來檢索轉(zhuǎn)錄結(jié)果的轉(zhuǎn)錄標(biāo)識符。在此示例中,它是gkuu2krb1-8c7f-4fe3-bb69-6b14a2cac067。復(fù)制轉(zhuǎn)錄標(biāo)識符到您自己的響應(yīng)中,因?yàn)樵谙乱徊街形覀儗⑿枰鼇頇z查轉(zhuǎn)錄過程何時(shí)完成。

檢索轉(zhuǎn)錄結(jié)果

我們已經(jīng)上傳并開始了轉(zhuǎn)錄過程,因此,準(zhǔn)備就緒后,我們將盡快獲得結(jié)果。

返回結(jié)果所需的時(shí)間取決于文件的大小,因此下一個(gè)腳本將向HTTP發(fā)送一個(gè)HTTP請求,并報(bào)告轉(zhuǎn)錄狀態(tài),或者在完成后打印輸出。

創(chuàng)建一個(gè)名為 get_transcription.py 的第三個(gè)Python文件,并將以下代碼放入其中。 

  1. import argparse  
  2. import os  
  3. import requests  
  4. API_URL = "https://api.assemblyai.com/v2/"  
  5. def get_transcription(transcription_id):  
  6.     """Requests the transcription from the API and returns the JSON  
  7.     response."""  
  8.     endpoint = "".join([API_URL, "transcript/{}".format(transcription_id)])  
  9.     headers = {"authorization": os.getenv('ASSEMBLYAI_KEY')}  
  10.     response = requests.get(endpoint, headersheaders=headers) 
  11.     return response.json() 
  12. if __name__ == "__main__":  
  13.     parser = argparse.ArgumentParser()  
  14.     parser.add_argument("transcription_id")  
  15.     args = parser.parse_args()  
  16.     transcription_id = args.transcription_id  
  17.     response_json = get_transcription(transcription_id)  
  18.     if response_json['status'] == "completed":  
  19.         for word in response_json['words']:  
  20.             print(word['text'], end=" " 
  21.     else:  
  22.         print("current status of transcription request: {}".format(  
  23.               response_json['status'])) 

上面的代碼與其他腳本具有相同的 imports 對象。在這個(gè)新的get_transcription函數(shù)中,我們只需使用我們的API密鑰和上一步中的轉(zhuǎn)錄標(biāo)識符(而不是文件標(biāo)識符)調(diào)用AssemblyAI API。我們檢索JSON響應(yīng)并將其返回。

在main函數(shù)中,我們處理作為命令行參數(shù)傳入的轉(zhuǎn)錄標(biāo)識符,并將其傳遞給get_transcription函數(shù)。如果來自get_transcription函數(shù)的響應(yīng)JSON包含completed狀態(tài),則我們將打印轉(zhuǎn)錄結(jié)果。否則,請?jiān)赾ompleted之前打印當(dāng)前狀態(tài)如queued或processing。

使用命令行和上一節(jié)中的轉(zhuǎn)錄標(biāo)識符調(diào)用腳本:

  1. python get_transcription.py TRANSCRIPTION_ID 

如果該服務(wù)尚未開始處理腳本,則它將返回queued,如下所示: 

  1. current status of transcription request: queued 

當(dāng)服務(wù)當(dāng)前正在處理音頻文件時(shí),它將返回processing: 

  1. current status of transcription request: processing 

該過程完成后,我們的腳本將返回轉(zhuǎn)錄文本,如您在此處看到的那樣: 

  1. An object relational mapper is a code library that automates the transfer of   
  2. data stored in relational, databases into objects that are more commonly used  
  3. in application code or EMS are useful because they provide a high level   
  4. ...(output abbreviated) 

就是這樣,我們已經(jīng)轉(zhuǎn)錄完成了!

您可能想知道如果精度不適合您的情況該怎么辦。這就是需要用到提高關(guān)鍵字或短語的準(zhǔn)確性方法(https://docs.assemblyai.com/guides/boosting-accuracy-for-keywords-or-phrases)和選擇與數(shù)據(jù)更匹配的模型方法(https://docs.assemblyai.com/guides/transcribing-with-a-different-acoustic-or-custom-language-model)的地方。您可以使用這兩種方法中的任一種,將記錄的準(zhǔn)確性提高到適合您情況的水平。

下一步是什么?

我們剛剛完成了一些腳本,這些腳本調(diào)用AssemblyAI API來將帶有語音的錄音轉(zhuǎn)錄為文本輸出。您可以查閱文檔(https://docs.assemblyai.com/overview/getting-started)來增加一些更高級功能:

  •  支持不同的文件格式
  •  轉(zhuǎn)錄雙通道/立體聲錄音
  •  獲取揚(yáng)聲器標(biāo)簽(揚(yáng)聲器隔離) 

 

責(zé)任編輯:龐桂玉 來源: Python中文社區(qū)
相關(guān)推薦

2023-08-25 14:47:56

TransFLACFLAC

2012-08-14 13:41:25

Office 2013

2009-07-31 14:09:41

c#時(shí)間格式轉(zhuǎn)換

2019-10-28 09:59:49

Python工具Windows

2022-10-12 08:00:00

語音識別Node.js音頻質(zhì)量

2019-07-30 10:51:45

Markdown格式化文檔Linux

2024-09-09 18:17:25

PHP編程JSON格式

2011-04-08 10:16:13

文本文件ACCESS數(shù)據(jù)庫

2022-11-01 16:20:56

Java圖像文件圖像文件類型

2019-09-06 08:00:00

開源技術(shù) 語音

2023-05-05 00:19:22

2024-02-19 15:38:08

JsonPython字符串

2019-09-30 10:51:11

Markdown標(biāo)記語言

2021-09-04 17:26:31

SpringBoot轉(zhuǎn)換器參數(shù)

2024-04-11 13:51:47

markdown前端

2021-12-29 16:40:54

Python語言字符串

2009-07-15 16:56:59

Jython類型Java類型

2023-08-26 16:06:10

COBOLJava數(shù)據(jù)

2020-08-28 18:00:29

UnixDOS格式轉(zhuǎn)換

2024-09-09 00:00:00

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

国产在线日韩在线| 日韩精品一区二区三区在线播放 | 轻轻草成人在线| 中文在线资源观看视频网站免费不卡 | 成人福利网站在线观看| 久草视频在线免费看| 日本三级久久| 欧美日韩国产高清一区二区三区| 黄色片免费在线观看视频| 午夜影院免费体验区| 久久精品国产久精国产| 97精品国产97久久久久久| 国产 欧美 在线| 24小时成人在线视频| 天天av天天翘天天综合网色鬼国产| 日韩国产高清一区| 亚洲av色香蕉一区二区三区| 日日摸夜夜添夜夜添精品视频 | 国产精品一区二区不卡视频| 男人天堂2024| 欧美日韩18| 中文日韩在线视频| 日韩av一二区| 青草伊人久久| 欧美熟乱第一页| 国产精品自拍片| 51xtv成人影院| 欧美极品aⅴ影院| 国产欧美日本在线| 国产欧美一级片| 美女网站色91| 国产精品99久久99久久久二8| 九九热只有精品| 99视频精品全部免费在线视频| 亚洲精品久久久久中文字幕欢迎你| 爽爽爽在线观看| 91精品美女| 欧美日韩中文字幕综合视频| 男人添女荫道口女人有什么感觉| 日本三级在线播放完整版| 2020国产成人综合网| 国产精品v欧美精品∨日韩| 国产乱码精品一区二三区蜜臂 | 国产美女18xxxx免费视频| 波多野结衣久久精品| 亚洲成人免费看| 久久久99精品视频| 老司机在线看片网av| 欧美激情一二三区| 欧美一级二级三级| 日韩偷拍自拍| 91在线一区二区| 精品国产91亚洲一区二区三区www| 不卡的日韩av| 国产高清精品在线| 91高跟黑色丝袜呻吟在线观看| 91丨九色丨蝌蚪丨对白| 蜜桃视频在线一区| 国产精品丝袜白浆摸在线| 国产精品无码一区| 日本在线播放一区二区三区| 国产成人综合久久| 免费无码国产精品| 蜜臀va亚洲va欧美va天堂| 国产精品视频免费在线| 亚洲专区第一页| 韩国av一区二区| **亚洲第一综合导航网站| 国产av无码专区亚洲av| 国产成人精品免费一区二区| 97av影视网在线观看| 午夜精品久久久久久久99 | 欧洲激情一区二区| 日本不卡一区在线| 亚洲精品大片| 欧美成人精品高清在线播放 | 97视频一区| 亚洲国产精品va在线观看黑人| 国产国语性生话播放| 一区二区三区视频免费观看| 伊人久久久久久久久久久| 后入内射无码人妻一区| 欧美福利专区| 911国产网站尤物在线观看| 69亚洲精品久久久蜜桃小说| 免费在线观看精品| 亚洲free性xxxx护士hd| 五月婷婷六月色| 欧美国产精品中文字幕| 婷婷视频在线播放| 1024在线看片你懂得| 色偷偷成人一区二区三区91| 色18美女社区| 97成人在线| 一区二区成人av| 欧美日韩大片在线观看| 在线免费高清一区二区三区| 国产精品99久久久久久www| a天堂视频在线| 成人免费视频视频在线观看免费| 日本免费高清一区| 成人短视频在线观看| 黑人巨大精品欧美一区二区三区| 中文字幕av不卡在线| 成人爽a毛片免费啪啪红桃视频| 亚洲人成绝费网站色www| 亚洲国产美女视频| 免费在线观看成人av| 亚洲一区久久久| 毛片网站在线| 亚洲国产综合人成综合网站| 欧美婷婷精品激情| 欧美做受69| 久久精品国产96久久久香蕉| 一级一片免费看| 懂色av一区二区夜夜嗨| 亚洲欧美日本国产有色| 色在线中文字幕| 日韩亚洲欧美成人一区| 国产成人一区二区在线观看| 一区视频在线看| 国产欧美中文字幕| 青青青手机在线视频观看| 亚洲狼人国产精品| 国产精品久久久毛片| 无码日韩精品一区二区免费| 欧美激情视频网| 国产精品色综合| 日本一区二区三区dvd视频在线 | 秋霞电影网一区二区| 精品久久久久久中文字幕动漫| 岛国中文字幕在线| 欧美日韩在线综合| 国产精品国产三级国产专业不| 亚洲精品字幕| 国产传媒欧美日韩| √天堂8在线网| 欧美人与z0zoxxxx视频| 中文字幕免费在线看线人动作大片| 亚洲国产午夜| 高清不卡日本v二区在线| 怡红院红怡院欧美aⅴ怡春院| 欧美精品在欧美一区二区少妇| 69精品无码成人久久久久久| 久久激情综合| 免费99视频| 中文字幕在线高清| 日韩电影免费观看在线观看| 亚洲精品www久久久久久| 成人高清免费观看| 日本男女交配视频| caoporn成人免费视频在线| 色综合久综合久久综合久鬼88| 国产又粗又大又爽| 成人欧美一区二区三区视频网页| jizzzz日本| 国产韩日影视精品| 91在线观看免费高清| 9191在线播放| 亚洲国产成人久久综合| 青青操免费在线视频| 97国产精品videossex| 黄色一级片播放| 亚洲福利天堂| 国产精品91久久久久久| 国产乱国产乱老熟300部视频| 日韩高清在线播放| 亚洲av片在线观看| 日韩亚洲精品在线观看| 欧美黑人疯狂性受xxxxx野外| 波多野结衣一区二区三区 | 黄色aaa级片| 成人av二区| 日韩一区二区三区电影| 日韩欧美精品在线观看视频| 自拍偷拍一区| 国产精品一区二区三区毛片淫片| 黄色成人在线观看| 精品国产乱码久久| 国产又黄又猛又粗又爽| 国产欧美一区二区三区在线老狼| 999这里有精品| 欧美激情1区2区| 久久婷婷国产综合尤物精品| 欧美日韩国产网站| 欧美猛交免费看| 清纯唯美亚洲色图| 91精品国产综合久久福利软件| 久久精品久久国产| 国产婷婷精品av在线| 成人免费黄色av| 亚洲美女啪啪| 欧美日韩在线免费观看视频| 欧美美女啪啪| 成人乱人伦精品视频在线观看| av漫画网站在线观看| 中文字幕一区二区精品| 丰满人妻一区二区三区四区53| 色八戒一区二区三区| 国产黄色小视频网站| av不卡一区二区三区| 天天干天天综合| 亚洲区欧美区| 色中文字幕在线观看| 日韩精品免费一区二区夜夜嗨 | 久久不卡免费视频| 中文字幕一区二区三区在线不卡 | 色七七影院综合| 色噜噜一区二区三区| 欧美日韩国产影片| 91精品国产综合久久久蜜臀九色| 亚洲色图另类专区| 国产精品免费无码| www.亚洲精品| 久久久精品视频国产| 日本在线不卡视频| 熟女少妇在线视频播放| 欧美 日韩 国产精品免费观看| 亚洲精品白虎| 美女久久99| 精品乱码一区| 一区二区三区自拍视频| 国产精品丝袜久久久久久不卡| 自拍视频在线看| 午夜精品免费视频| 超碰caoporn久久| 三级精品视频久久久久| 精品电影在线| 亚洲精品美女网站| 免费国产黄色片| 91精品国产色综合久久| 在线观看视频中文字幕| 日韩欧美亚洲一二三区| 久久狠狠高潮亚洲精品| 亚洲自拍偷拍图区| 九九热最新地址| 亚洲欧洲三级电影| 一本色道久久88| 国产日韩欧美在线一区| 女人又爽又黄免费女仆| 2023国产精品自拍| 香港三级日本三级| av色综合久久天堂av综合| 国产原创剧情av| 国产成人精品免费一区二区| 免费黄视频在线观看| 国产成人综合亚洲网站| 99久久99精品| 国产一区久久久| 中文字幕日韩久久| 国产一区二区三区免费看| 天天综合成人网| 国产一区二区日韩精品| 一级黄色片在线免费观看| 精品一二线国产| 亚洲午夜精品一区| 国产精品自拍三区| 欧美激情一区二区三区p站| 东方aⅴ免费观看久久av| 秘密基地免费观看完整版中文 | www.久久ai| 九九九久久久久久| 手机av免费在线| 97国产一区二区精品久久呦| 国产v亚洲v天堂无码久久久 | 精品视频在线观看| 人人香蕉久久| 日本免费一区二区三区| 色综合狠狠操| 国产91视频一区| 亚洲激情偷拍| 日韩手机在线观看视频| 美女在线视频一区| 在线成人免费av| 99热在这里有精品免费| 日本一级免费视频| 成人欧美一区二区三区白人 | 在线精品视频在线观看高清| 国产女教师bbwbbwbbw| 国产欧美丝祙| 91日韩视频在线观看| 国产在线精品免费| 欧美夫妇交换xxx| 久久久久9999亚洲精品| 一级免费黄色录像| 亚洲成人av一区二区| 日韩久久久久久久久久| 日韩欧美不卡在线观看视频| 日韩三级电影网| 日韩视频免费在线| 久久男人av资源站| 国产精品专区一| 91精品久久久久久综合五月天| 欧美大陆一区二区| 999国产精品999久久久久久| 青青草国产免费| 日本美女视频一区二区| 特黄特色免费视频| 久久久久国产精品人| 欧美色图一区二区| 色婷婷精品久久二区二区蜜臀av| 国产女人高潮毛片| 亚洲欧美激情精品一区二区| 成人福利网站| 国产成人精品在线播放| 日韩一级淫片| 水蜜桃亚洲精品| 亚洲久久在线| 丰满人妻一区二区三区53视频| 久久夜色精品国产噜噜av| 天天干中文字幕| 在线观看成人小视频| 欧美一区二区三区黄片| xvideos成人免费中文版| 中文字幕 在线观看| 97影院在线午夜| 成人精品视频| 欧美一级在线看| 国产不卡高清在线观看视频| 亚洲色图100p| 色婷婷av久久久久久久| 免费国产精品视频| 欧美精品日韩www.p站| 欧美精选视频一区二区| 国产一区二区不卡视频| 欧美aⅴ99久久黑人专区| 91精品无人成人www| 久久久久久久精| 日韩欧美一级视频| 精品国产一区久久| 最新黄网在线观看| 成人两性免费视频| 日韩精品一区二区久久| 久久久久久香蕉| 91麻豆国产在线观看| 国产在线成人精品午夜| 日韩一级免费一区| 137大胆人体在线观看| 国产极品精品在线观看| 亚洲素人在线| 人人妻人人添人人爽欧美一区| 成人av手机在线观看| 免费在线观看黄视频| 91麻豆精品国产自产在线 | 久久av中文字幕| 四虎精品在线观看| 亚洲高清123| 人人精品人人爱| 男人天堂资源网| 欧美日韩精品一区二区在线播放| fc2在线中文字幕| 国产精品美女久久久免费 | 成人免费看的视频| 国产91av视频| 亚洲一区成人| 色一情一乱一伦一区二区三区日本 | 欧美—级a级欧美特级ar全黄| 色播一区二区| xxxx18hd亚洲hd捆绑| 99久久国产综合精品麻豆 | 欧美性猛交xxxx黑人交| 成人免费视频| 国产欧美精品一区二区三区介绍| 91影院成人| 日本中文字幕有码| 亚洲成人av在线电影| 欧美日本韩国一区二区| 国产精品www网站| 欧美好骚综合网| 欧美一级片在线免费观看| 性欧美大战久久久久久久久| 香蕉视频911| 国产精品美女主播在线观看纯欲| 久久福利影院| 乱码一区二区三区| 欧美性感美女h网站在线观看免费| 国产福利电影在线| 成人网中文字幕| 最新日韩欧美| 亚洲一级黄色录像| 日韩一区二区免费在线电影| 不卡专区在线| 相泽南亚洲一区二区在线播放 | 在线观看av免费| 欧美亚洲一区在线| 日韩欧美一区免费| 欧美性猛交乱大交| 精品电影在线观看| av福利在线播放| 国产精品av一区| 日本大胆欧美人术艺术动态| 国产大学生自拍| 亚洲毛片在线免费观看| 999色成人| 免费无码av片在线观看| 亚洲欧洲av色图| 日av在线播放| av成人在线电影| 日本成人在线电影网| 国产无遮挡又黄又爽又色|