Cómo usar ffmpeg para convertir archivos de audio a mp3 y abrirlos
Viceversa. /ffmpeg -i /media/1.WAV /media/1.MP3 no se puede convertir a Mp3, el error es el siguiente (codificador no encontrado):
Mapeo de transmisión:
Secuencia #0:0 -gt; #0:0 (wav -gt; ?)
Secuencia de salida #0:0 Codificador no encontrado (sin códec)
Si se fuerza la codificación. /ffmpeg -i /media/1.wav -acodec mp3 /media/1.mp3, todavía error:
Codificador desconocido 'mp3'
Esto se debe a que, aunque ffmpeg está abierto software fuente, pero no incluye todos los formatos de codificador y decodificador debido a problemas de derechos de autor con formatos específicos. Esto se debe a que aunque ffmpeg es un programa de código abierto, no contiene todos los códecs para un formato específico, o solo tiene códecs para un formato pero no tiene codificador, por ejemplo, Mp3 solo un códec puede reproducir archivos Mp3, pero ningún codificador para Mp3, por lo que no puedes convertir otros formatos a Mp3. /ffmpeg -codecs -codecs Consulta la configuración del códec. La primera D representa el decodificador, que puede decodificar este formato; la E representa el codificador, que puede codificar este formato. De ello se deduce que Mp3 no se puede codificar, pero Mp2 se puede decodificar y codificar. ¿Cómo solucionar este problema?
D A D mp1 MP1 (Capa de audio MPEG 1)
D A D mp1float MP1 (Capa de audio MPEG 1)
DEA D mp2 MP2 (Capa de audio MPEG 2)
D A D mp2float MP2 (capa de audio MPEG 2)
D A D mp2float MP2 (capa de audio MPEG 2)
D A D mp3 MP3 (capa de audio MPEG 3)
D A D mp3adu ADU (Unidad de datos de aplicación) MP3 (MPEG Audio Layer 3)
D A D mp3adufloat ADU (Unidad de datos de aplicación) MP3 (MPEG Audio Layer 3)
My The La primera forma es escribir su propio código para lograrlo. En el archivo fuente, Allcodecs.c registra cada formato, primero modifique la línea de registro de Mp3 para registrar tanto el decodificador como el codificador:
REGISTER_ENCDEC (MP2, mp2)
REGISTER_DECODER (); MP2FLOAT, mp2float);
REGISTER_DECODER (MP3, mp3) // Cambie esta línea a REGISTER_ENCDEC (MP3, mp3)
Luego agregue un nuevo codificador Mp3 para implementar Struct, donde Init Functions , Las funciones de codificación y las funciones de cierre usan funciones Mp2 porque no sé cómo implementar la función Mp3, o no sé la diferencia entre Mp3 y Mp2 en el nivel de implementación del código.
AVCodec ff_mp3_encoder = {
.name = "mp3",
.type = AVMEDIA_TYPE_AUDIO,
.id = CODEC_ID_MP3,
.priv_data_size = sizeof(MpegAudioContext),
.init = MPA_encode_init,
.encode = MPA_encode_frame,
.close = MPA_encode_close,
.sample_fmts = (const enum AVSampleFormat[]){AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_NONE},
.supported_samplerates = (const int[]){44100, 48000, 32000, 22050, 24000, 16000, 0},
.long_name = NULL_IF_CONFIG_SMALL("MP3 (MPEG Audio Layer 3)"),
.defaults = mp3_defaults,
};
Recompilar. Utilice la línea de comando. /ffmpeg -i /media/1.WAV /media/1.MP3 Lo probé, generé con éxito el archivo 1.mp3 y lo reproduje. Parece que no hay ningún problema, pero después de verificar el archivo /media/1.mp3 individualmente, descubrí que el archivo no está en formato Mp3, sino en formato Mp2:
/media/1.mp3: MPEG ADTS, capa II, v1, 128 kbps, 44,1 kHz, estéreo
Desafortunadamente, modificar el código usted mismo no funciona, ya que es imposible crear archivos idénticos al formato original. Desafortunadamente, modificar el código usted mismo tampoco funcionará, porque no es un experto en todos los protocolos de formato de códec, y modificar el código usted mismo probablemente fallará, no solo con Mp3, sino también con otros formatos, como AMR, OGG y H.263, no existen codificadores para estos formatos. Por lo tanto, la segunda opción es utilizar una combinación de codificador de terceros maduro y ffmpeg.
Una mejor biblioteca de terceros de código abierto para MP3 es libmp3lame (Lame para abreviar). Descargué la última versión (3.99.4) del código fuente de Lame y la compilé:
Primera configuración: ./configure --prefix=/shared --enable-shared --enable- static p>
Luego compilar: make
make install
Generar archivos: biblioteca de vínculos dinámicos/shared/lib/libmp3lame.so y biblioteca estática/shared/lib/libmp3lame.a . Aquí solo necesita usar la biblioteca dinámica y copiar el archivo .so a /lib, que es la ruta de búsqueda predeterminada de la biblioteca dinámica, para que ffmpeg pueda encontrarlo cuando se ejecuta.
Luego configure libmp3lame para ffmpeg: ./configure --enable-libmp3lame
Vuelva a compilar ffmpeg y ejecute el comando de conversión para ver qué sucede.
Ejecute primero.
D V D lagarith lagarith lossless
EA libmp3lame libmp3lame MP3 (capa de audio MPEG 3)
EV ljpeg Lossless JPEG
D V D loco LOCO
Luego ejecuta.
/ffmpeg -i /media/1.WAV /media/1.MP3, genera 1.mp3, usa el archivo Cuando se ve con el comando, de hecho es un archivo Mp3.
/media/1.mp3: Archivo de audio, ID3 versión 2.4.0, contiene MPEG ADTS, capa III, v1, 128 kbps, 44,1 kHz, estéreo
Buen trabajo, el El problema está resuelto.
También puedes especificar el códec para generar archivos Mp3 en la línea de comando: ./ffmpeg -i /media/1.WAV -acodec libmp3lame /media/1.MP3.