У меня есть файл M4A, который также преобразован в файл FLAC. Я хотел бы посмотреть, происходит ли преобразование без потерь, а именно, является ли вывод в pcm из M4A точно таким же, как и при декодировании FLAC.
Полагаю, есть способ использовать FFmpeg или Libav для получения «сырых» выходных данных и сравнения их?
решение1
Я бы попробовал конвертировать их оба в WAV и сравнить их контрольные суммы.
ffmpeg -i file1.m4a file1.wav
ffmpeg -i file2.flac file2.wav
md5sum file1.wav
md5sum file2.wav
rm file?.wav
Сравните полученные md5. Если они совпадают, поздравляю! Ваши файлы содержат одинаковые данные. Если они не совпадают, выложите вывод этих команд здесь, и я посмотрю. Возможно, есть разница в битрейте или что-то в этом роде (ее не должно быть... но она может быть, я не знаю.)
Обратите внимание, что ffmpeg
s будет генерировать сравнительно большие промежуточные файлы.
решение2
Вы можете использоватьхэш-мультиплексордля генерации контрольной суммы декодированного носителя. Не нужно конвертировать файлы, и на него не влияют метаданные или другие факторы, которые могут привести к тому, что автономный инструмент суммирования будет сообщать о ложных различиях.
Пример сравнения WAV → FLAC. Поскольку FLAC — без потерь, хэши должны быть одинаковыми:
$ 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
Есть много доступныххэш-алгоритмына выбор. Некоторые быстрее других. Вы можете выбрать алгоритм с помощью
-hash
опции, например-hash md5
.-map 0
используется в примерах для включения всех потоков в контрольную сумму. Без негоповедение выбора потока по умолчаниювыберет только один поток для каждого типа потока. Если вы хотите исключить/включить определенные потоки, то сделайте это с помощью-map
опции с указателями потоков. Например, чтобы исключить все видео, используйте отрицательное сопоставление с-map -0:v
, или чтобы включить только аудио, используйте-map 0:a
, или чтобы включить только третий аудиопоток, используйте-map 0:a:2
.Thestreamhash мультсериалпохож на хэш, но он выведет хэш для каждого потока, например, один для видео и один для аудио. Опять же, он также будет использовать поведение выбора потока по умолчанию, если вы не добавите
-map
.Если вы хотите сравнить каждый отдельный кадр/пакет, то используйтефреймхэш-мультиплексор.
решение3
Вы можете попробовать визуализировать спектр звука, а затем сравнить их бок о бок.
Вот как это можно сделать с помощью showcqt
фильтра.
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
Это предполагает, что у вас есть видео со звуком и альтернативный звук для этого видео.
Видеть этоснимок экрана showcqt бок о бок