ffmpeg - que - mejor calidad de audio mp3
Cómo obtener la duración real y real de un archivo MP3(VBR o CBR) del lado del servidor (3)
Solía calcular la duración de los archivos MP3 del lado del servidor usando ffmpeg, que parecía funcionar bien. Hoy descubrí que algunos de los cálculos estaban equivocados. De alguna manera, por alguna razón, ffmpeg calculará mal la duración y parece ocurrir solo con archivos mp3 de velocidad de bits variable.
Al probar esto localmente, noté que ffmpeg imprimió dos líneas adicionales en verde.
Comando utilizado:
ffmpeg -i song_9747c077aef8.mp3
ffmpeg dice:
[mp3 @ 0x102052600] max_analyze_duration 5000000 reached at 5015510
[mp3 @ 0x102052600] Estimating duration from bitrate, this may be inaccurate
Después de una sesión de Google agradable y cálida, descubrí algunas publicaciones sobre esto, pero no se encontró ninguna solución.
Entonces traté de aumentar la duración máxima:
ffmpeg -analyzeduration 999999999 -i song_9747c077aef8.mp3
Después de esto, ffmpeg devolvió solo la segunda línea:
[mp3 @ 0x102052600] Estimating duration from bitrate, this may be inaccurate
Pero en cualquier caso, la duración calculada era simplemente errónea. Comparándolo con VLC noté que allí la duración es correcta.
Después de más investigación, tropecé con mp3info, que instalé y usé.
mp3info -p "%S" song_9747c077aef8.mp3
mp3info luego devolvió la duración CORRECTA , pero solo como un número entero, que no puedo usar porque necesito un número más preciso aquí. La razón para esto fue explicada en un comentario a continuación, por el usuario blahdiblah - mp3info simplemente está extrayendo información ID3 del archivo y no está realizando ningún cálculo.
También intenté usar mplayer para recuperar la duración, pero al igual que ffmpeg, mplayer está devolviendo el valor incorrecto.
Extendiendo la solución de LordNeckbeard. Para obtener solo estadísticas puedes agregar flags -v quiet -stats
ffmpeg -v quiet -stats -i input.mp3 -f null -
Finalmente encontré una solución adecuada para este problema utilizando sox, que devuelve la información correcta.
sox file.mp3 -n stat
Samples read: 19321344
Length (seconds): 219.062857
Scaled by: 2147483647.0
Maximum amplitude: 1.000000
Minimum amplitude: -1.000000
Midline amplitude: -0.000000
Mean norm: 0.141787
Mean amplitude: 0.000060
RMS amplitude: 0.191376
Maximum delta: 0.947598
Minimum delta: 0.000000
Mean delta: 0.086211
RMS delta: 0.115971
Rough frequency: 4253
Volume adjustment: 1.000
Duración (segundos): 219.062857
Puedes decodificar el archivo completamente para obtener la duración real:
ffmpeg -i input.mp3 -f null -
La segunda a la última línea de la salida de la consola mostrará algo como:
size=N/A time=00:03:49.12 bitrate=N/A
Donde el time
es la duración real. En este ejemplo, todo el proceso tomó aproximadamente 0,5 segundos.