escribe el código fuente de un microservicio en java para extraer el audio de videos y luego convertir ese audio en texto si es posible utilizando whisper o sino otro servicio de audio a texto
Aquí te presento un ejemplo de código en Java que utiliza FFmpeg para extraer el audio de un archivo de video y utiliza el servicio de transcripción de voz a texto de Google Cloud para convertirlo. Puedes adaptar este código para utilizar otros servicios de transcripción si lo deseas:
```java
import com.google.auth.oauth2.GoogleCredentials;
import com.google.cloud.speech.v1.*;
import com.google.protobuf.ByteString;
import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
public class AudioToTextService {
private static final String GOOGLE_CLOUD_PROJECT_ID = "tu-proyecto-id";
private static final String GOOGLE_APPLICATION_CREDENTIALS_PATH = "/ruta/hacia/cloud/credenciales.json";
private static final int RECORDING_RATE = 16000;
public static void main(String[] args) throws Exception {
String videoFilePath = "ruta/al/video.mp4";
// Extraer el audio del video en formato FLAC
String audioFilePath = extractAudioFromVideo(videoFilePath);
// Transcribir el audio utilizando el servicio de Google Cloud Speech-to-Text
String transcript = transcribeAudio(audioFilePath);
// Imprimir el resultado
System.out.println("Transcripción: " + transcript);
}
private static String extractAudioFromVideo(String videoFilePath) throws IOException, InterruptedException {
// Crear el archivo temporal para guardar el audio
Path tempAudioFilePath = Files.createTempFile("audio", ".flac");
// Crear y ejecutar el comando FFmpeg para extraer el audio en formato FLAC
List<String> ffmpegCmd = List.of(
"ffmpeg", "-i", videoFilePath, "-vn", tempAudioFilePath.toString());
ProcessBuilder pb = new ProcessBuilder(ffmpegCmd);
pb.inheritIO();
Process process = pb.start();
process.waitFor();
// Devolver la ruta al archivo de audio extraído
return tempAudioFilePath.toString();
}
private static String transcribeAudio(String audioFilePath) throws IOException {
// Crear instancia del cliente de Google Cloud Speech-to-Text
ManagedChannel channel = ManagedChannelBuilder.forTarget("speech.googleapis.com:443").build();
GoogleCredentials credentials = GoogleCredentials.fromStream(new FileInputStream(GOOGLE_APPLICATION_CREDENTIALS_PATH));
SpeechSettings settings = SpeechSettings.newBuilder()
.setCredentialsProvider(() -> credentials)
.build();
SpeechClient speech = SpeechClient.create(settings);
// Crear la configuración del pedido de transcripción
RecognitionConfig config = RecognitionConfig.newBuilder()
.setEncoding(RecognitionConfig.AudioEncoding.FLAC)
.setSampleRateHertz(RECORDING_RATE)
.setLanguageCode("es-ES")
.build();
// Leer el archivo de audio y convertirlo a bytes
byte[] audioBytes = FileUtils.readFileToByteArray(new File(audioFilePath));
ByteString audioBytesByteString = ByteString.copyFrom(audioBytes);
// Crear el objeto de solicitud de transcripción
RecognitionAudio audio = RecognitionAudio.newBuilder()
.setContent(audioBytesByteString)
.build();
// Enviar la solicitud al servicio de Google Cloud Speech-to-Text
RecognizeResponse response = speech.recognize(config, audio);
// Obtener la transcripción
StringBuilder transcriptBuilder = new StringBuilder();
for (SpeechRecognitionResult result : response.getResultsList()) {
SpeechRecognitionAlternative alternative = result.getAlternativesList().get(0);
String text = alternative.getTranscript();
transcriptBuilder.append(text);
}
String transcript = transcriptBuilder.toString();
// Cerrar el cliente y devolver la transcripción
speech.close();
return transcript;
}
}
```
Recuerda modificar las constantes `GOOGLE_CLOUD_PROJECT_ID` y `GOOGLE_APPLICATION_CREDENTIALS_PATH` con tus propias credenciales de Google Cloud Speech-to-Text.
Espero que esto te sea útil ¡buena suerte con tu proyecto!