Tengo un archivo M4A que también se convierte a un archivo FLAC. Me gustaría ver si la conversión es sin pérdidas, es decir, si la salida a pcm desde M4A es exactamente idéntica a la de la decodificación FLAC.
Supongo que hay una manera de usar FFmpeg o Libav para producir resultados "sin procesar" y compararlos.
Respuesta1
Intentaría convertirlos a WAV y comparar sus sumas de verificación.
ffmpeg -i file1.m4a file1.wav
ffmpeg -i file2.flac file2.wav
md5sum file1.wav
md5sum file2.wav
rm file?.wav
Compare los md5 producidos. Si coinciden, ¡felicidades! Sus archivos contienen los mismos datos. Si no coinciden, publique el resultado de esos comandos aquí y lo miraré. Potencialmente hay una diferencia en la tasa de bits o algo así (no debería haberla... pero puede haberla, no lo sé).
Tenga en cuenta que el ffmpeg
s generará archivos intermedios comparativamente grandes.
Respuesta2
Puedes usar elhash muxerpara generar una suma de verificación de los medios decodificados. No es necesario convertir archivos y no se ve afectado por metadatos u otros factores que puedan hacer que una herramienta de suma independiente informe diferencias falsas.
Ejemplo para comparar WAV → FLAC. Debido a que FLAC no tiene pérdidas, los hashes deberían ser los mismos:
$ ffmpeg -loglevel error -i input.wav output.flac
$ ffmpeg -loglevel error -i input.wav -map 0 -f hash -
SHA256=c1acb198952f5c341190ffb62eeafe4f10c8f48c67a188e25087471a74eaa957
$ ffmpeg -loglevel error -i output.flac -map 0 -f hash -
SHA256=c1acb198952f5c341190ffb62eeafe4f10c8f48c67a188e25087471a74eaa957
Hay muchos disponiblesalgoritmos hashPara escoger de. Algunos son más rápidos que otros. Puede seleccionar un algoritmo con la
-hash
opción, como-hash md5
.-map 0
se utiliza en los ejemplos para incluir todas las secuencias en la suma de comprobación. Sin ello elcomportamiento de selección de flujo predeterminadoSolo elegirá una transmisión por tipo de transmisión. Si desea excluir/incluir transmisiones específicas, hágalo con la-map
opción con especificadores de transmisión. Por ejemplo, para excluir todo el uso de video, use la asignación negativa con-map -0:v
, o para incluir solo el uso de audio-map 0:a
, o para incluir solo el uso de la tercera transmisión de audio-map 0:a:2
.Elmuxer streamhashes similar al hash, pero generará un hash por transmisión, como uno para video y otro para audio. Nuevamente, también utilizará el comportamiento de selección de transmisión predeterminado a menos que agregue
-map
.Si desea comparar cada cuadro/paquete individual, utilice elmuxer framehash.
Respuesta3
Podrías intentar visualizar el espectro del audio y luego comparar los dos uno al lado del otro.
Aquí tienes una manera de hacerlo con el showcqt
filtro.
ffmpeg -i "video_file_with_audio.mkv" -i "alternative_audio.m4a" \
-filter_complex "[0:a]asplit[a1][ao];
[a1]volume=1.2,showcqt=fps=23.976:s=480x1080:count=3:axis=0:axis_h=30:bar_h=100:basefreq=200:endfreq=12495[vfreq1];
[1:a]showcqt=fps=23.976:s=480x1080:count=3:axis=0:axis_h=30:bar_h=100:basefreq=200:endfreq=12495[vfreq2];
[vid1]fps=23.976,scale=-1:1080[v1];[v1][vfreq1][vfreq2]hstack=3[vo]" \
-map "[vo]" -map "[ao]" output.mp4
Esto supone que tienes un vídeo con audio y luego un audio alternativo para ese vídeo.
Mira estocaptura de pantalla de showcqt uno al lado del otro