2017-01-07 4 views
-1

Я хочу преобразовать звукозапись из Facebook Messenger в текст. Вот пример файла .mp4 отправить с помощью API Facebook,: https://cdn.fbsbx.com/v/t59.3654-21/15720510_10211855778255994_5430581267814940672_n.mp4/audioclip-1484407992000-3392.mp4?oh=a78286aa96c9dea29e5d07854194801c&oe=587C3833Преобразование звука mp4 в текст в python

Так что этот файл содержит только аудио (не видео), и я хочу, чтобы преобразовать его в текст.

Кроме того, я хочу сделать это как можно быстрее, так как я буду использовать сгенерированный текст в приложении практически реального времени (т.е. пользователь отправляет файл .mp4, сценарий переводит его в текст и показывает его обратно) ,

Я нашел этот пример https://github.com/Uberi/speech_recognition/blob/master/examples/audio_transcribe.py и вот код я использую:

import requests 
import speech_recognition as sr 

url = 'https://cdn.fbsbx.com/v/t59.3654-21/15720510_10211855778255994_5430581267814940672_n.mp4/audioclip-1484407992000-3392.mp4?oh=a78286aa96c9dea29e5d07854194801c&oe=587C3833' 
r = requests.get(url) 

with open("test.mp4", "wb") as handle: 
    for data in r.iter_content(): 
     handle.write(data) 

r = sr.Recognizer() 
with sr.AudioFile('test.mp4') as source: 
    audio = r.record(source) 

command = r.recognize_google(audio) 
print command 

Но я получаю эту ошибку:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "C:\Users\Asterios\Anaconda2\lib\site-packages\speech_recognition\__init__.py", line 200, in __enter__ 
    self.audio_reader = aifc.open(aiff_file, "rb") 
    File "C:\Users\Asterios\Anaconda2\lib\aifc.py", line 952, in open 
    return Aifc_read(f) 
    File "C:\Users\Asterios\Anaconda2\lib\aifc.py", line 347, in __init__ 
    self.initfp(f) 
    File "C:\Users\Asterios\Anaconda2\lib\aifc.py", line 298, in initfp 
    chunk = Chunk(file) 
    File "C:\Users\Asterios\Anaconda2\lib\chunk.py", line 63, in __init__ 
    raise EOFError 
EOFError 

Есть идеи?

EDIT: Я хочу запустить скрипт на бесплатной основе pythonanywhere.com, поэтому я не уверен, как установить такие инструменты, как ffmpeg.

EDIT 2: Если вы запустите указанный выше сценарий, заменив URL-адрес этим «http://www.wavsource.com/snds_2017-01-08_2348563217987237/people/men/about_time.wav» и измените «mp4» на «wav», он отлично работает. Так что это точно в формате файла.

+0

Вы можете играть в test.wav с аудио/видео плеером? –

+0

Yeap. Вы можете запустить код и здесь звук. – Stergios

+3

вы читаете файл mp4 как wav-формат, проверяйте это и конвертируйте свой mp4 в wav –

ответ

4

Наконец я нашел решение. Я отправляю его здесь, если это поможет кому-то в будущем.

К счастью, pythonanywhere.com поставляется с предустановленной avconv (avconv похож на ffmpeg).

Так вот код, который работает:

import urllib2 
import speech_recognition as sr 
import subprocess 
import os 

url = 'https://cdn.fbsbx.com/v/t59.3654-21/15720510_10211855778255994_5430581267814940672_n.mp4/audioclip-1484407992000-3392.mp4?oh=a78286aa96c9dea29e5d07854194801c&oe=587C3833' 
mp4file = urllib2.urlopen(url) 

with open("test.mp4", "wb") as handle: 
    handle.write(mp4file.read()) 

cmdline = ['avconv', 
      '-i', 
      'test.mp4', 
      '-vn', 
      '-f', 
      'wav', 
      'test.wav'] 
subprocess.call(cmdline) 

r = sr.Recognizer() 
with sr.AudioFile('test.wav') as source: 
    audio = r.record(source) 

command = r.recognize_google(audio) 
print command 

os.remove("test.mp4") 
os.remove("test.wav") 

В свободном плане, cdn.fbsbx.com не был в белый список сайтов на pythonanywhere, так что я не мог загрузить содержимое с urllib2. Я связался с ними, и они добавили домен в белый список в течение 1-2 часов!

Огромная благодарность и благодарность им за отличный сервис, хотя я использую бесплатный уровень.

0

Я не понимаю, почему вы хотите преобразовать звуковой файл в текст. Звуковой файл не читается человеком, поэтому его нельзя использовать в текстовом формате. Если вы действительно хотите это сделать, просто используйте open в Python.

open('sound.wav', 'r') 

Если вы хотите изменить фактический звуковой файл, вы можете использовать модули wave и PyAudio. Я играл с этими модулями некоторое время назад и создавал «Audio Manager», вы можете найти его here on GitHub. Менеджер аудио, который я создал, отлично работает без PyAudio, но вы не можете записать файл, вам также может потребоваться немного изменить файл.

Преобразование файла mp3/mp4 в Python немного сложнее. Посмотрите на this mp3 decoder, если вы хотите сделать это в Python. Я предлагаю сделать это онлайн с таким веб-сайтом, как this online converter.

+1

Спасибо, но онлайновый конвертер не сработает для меня. Мне нужно сделать процедуру автоматически и быстро. Я смотрю на mp 3, но все еще не может заставить его работать. – Stergios

1

Использование Python Video Converter https://github.com/senko/python-video-converter

import requests 
import speech_recognition as sr 
from converter import Converter 

url = 'https://cdn.fbsbx.com/v/t59.3654-21/15720510_10211855778255994_5430581267814940672_n.mp4/audioclip-1484407992000-3392.mp4?oh=a78286aa96c9dea29e5d07854194801c&oe=587C3833' 
r = requests.get(url) 
c = Converter() 

with open("/tmp/test.mp4", "wb") as handle: 
for data in r.iter_content(): 
handle.write(data) 

conv = c.convert('/tmp/test.mp4', '/tmp/test.wav', { 
    'format': 'wav', 
    'audio': { 
    'codec': 'pcm', 
    'samplerate': 44100, 
    'channels': 2 
    }, 
}) 

for timecode in conv: 
    pass 

r = sr.Recognizer() 
with sr.AudioFile('/tmp/test.wav') as source: 
audio = r.record(source) 

command = r.recognize_google(audio) 
print command 
+0

Спасибо, но это все еще основано на FFmpeg. Как я упоминал в своем оригинальном посте, я хочу запустить скрипт на бесплатном плане pythonanywhere.com, поэтому я не уверен, что если я смогу установить такие инструменты, как ffmpeg. – Stergios

+1

Ну, после некоторого размышления, вот соответствующий исходный источник C++ из последнего моментального снимка ffmpeg: https://drive.google.com/file/d/0B6FklHUATePWaURLSEE3N0xuZms/view?usp=sharing Это библиотеки кодирования и декодирования для wav pcm и mp4 aac. Возьмите всю побитую математику оттуда. Надеюсь, это поможет каким-то образом написать свою собственную рутину. Это было бы «взломать» -тастику, но это самый быстрый способ сделать это. –

+0

Спасибо, я посмотрю, смогу ли я что-то построить. – Stergios

Смежные вопросы