Transcodificar Webm a archivo de audio (fluent-ffmpeg)

Tengo un archivo de video y sus propiedades son las siguientes cuando verifico a través del comando ffprobe; Mi propósito es tomar solo el archivo de audio y su tamaño no debe ser> 100 mb. ¿Hay alguna forma adecuada de hacerlo en un proyecto NPM?

ffprobe 2.webm ffprobe version N-86175-g64ea4d1 Copyright (c) 2007-2017 the FFmpeg developers built with gcc 6.3.0 (GCC) configuration: --enable-gpl -- nable-version3 --enable-cuda --enable-cuvid --enable-d3d11va --enable-dxva2 -- nable-libmfx --enable-nvenc --enable-avisynth --enable-bzlib --enable- ontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass -- nable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype -- nable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable- ibmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable- ibopenh264 --enable-libopenjpeg --enable-libopus --enable-librtmp --enable- ibsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable- ibtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis -- nable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable- ibx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-lzma -- nable-zlib libavutil 55. 63.100 / 55. 63.100 libavcodec 57. 96.101 7. 96.101 libavformat 57. 72.101 / 57. 72.101 libavdevice 57. 7.100 / 57. 7.100 libavfilter 6. 90.100 / 6. 90.100 libswscale 4. 7.101 / 4. 7.101 libswresample 2. 8.100 / 2. 8.100 libpostproc 54. 6.100 / 54. 6.100 Input #0, matroska,webm, from '2.webm': Metadata: encoder : libwebm-0.2.1.0 creation_time : 2017-05-04T14:59:01.639000Z Duration: 00:02:35.16, start: 0.000000, bitrate: 32 kb/s Stream #0:0(eng): Audio: opus, 48000 Hz, mono, fltp (default) Stream #0:1(eng): Video: vp8, yuv420p(progressive), 640x480, SAR 1:1 DAR 4:3, 14.99 tbr, 1k tbn, 1k tbc (default) 

Usando la API de fluent-ffmpeg

Podría usar el método noVideo() que le dice a ffmpeg que produzca una salida con “no video”.

 ffmpeg('/path/to/file.avi').noVideo(); 

Usando la API de la CLI de ffmpeg

No estoy seguro de que fluent-ffmpeg , pero al usar ffmpeg , usaría la opción -map para determinar qué flujos desea obtener de sus entradas en su salida. Entonces, para su ejemplo, el comando para obtener un archivo MP3 que contenga solo la primera transmisión de audio de su entrada sería:

 ffmpeg -i 2.webm -map 0:a:0 out.mp3 

Alternativamente, podría decirle a ffmpeg que no incluya secuencias de video usando la opción -vn ; Pero me gusta ser explícito. Tu orden entonces sería:

 ffmpeg -i 2.webm -vn out.mp3 

También puede usar la opción -acodec para dictar qué codificador desea usar, como AAC o lo que sea. ffmpeg usará la mejor estimación al mirar la extensión que le dio a su salida si no le da suficientes opciones.

En cuanto a la limitación del tamaño del archivo, no estoy seguro de una forma clara de hacerlo, pero esta pregunta en la producción de video StackExchange puede ayudar: ¿Cómo limitar el tamaño del archivo con ffmpeg? . Se sugiere jugar con su tasa de bits hasta que obtenga el tamaño que desea. Supongo que podría calcular la tasa de bits correcta antes de tiempo.