LINUX.ORG.RU
решено ФорумTalks

FLAC -> OGG

 , ,


0

1

Всегда хранил музыку в mp3 320, но тут решил очередную порцию FLAC конвертнуть в ogg. И встал вопрос: Какие параметры кодера использовать? Аудиофилией не страдаю, места лишнего на винте нет, колонок/наушников хороших - тоже



Последнее исправление: Uter (всего исправлений: 1)
Ответ на: комментарий от waker

Так, я попробовал использовать вывод потока в файл в vlc. Результурующий файл отличается от исходного, но чуть меньше, чем при выводе через пульсу (σ=2.879 против 3.525). Получается, что бо´льшую часть искажений вносит таки декодер, а пульса добавляет ещё чуть-чуть. По крайней мере, с src-sinc-best-quality, с более быстрыми алгоритмами расклад может быть иной. Верны ли мои выводы?

Axon ★★★★★
()
Последнее исправление: Axon (всего исправлений: 2)
Ответ на: комментарий от Axon

если на входе flac, на выходе должен получаться PCM хоть в ddb, хоть в vlc, одинаковый, и без искажений, идентичный входному wav, из которого делали flac.

это если нет никаких DSP. если они есть - каждый DSP вносит свои искажения. декодер flac не может вносить искажений по определению.

насчет пульсы ничего не могу ответить — не пользовался, и не пользуюсь.

waker ★★★★★
()
Последнее исправление: waker (всего исправлений: 1)
Ответ на: комментарий от waker

если на входе flac, на выходе должен получаться PCM хоть в ddb, хоть в vlc, одинаковый, и без искажений, идентичный входному wav, из которого делали flac.

это если нет никаких DSP. если они есть - каждый DSP вносит свои искажения. декодер flac не может вносить искажений по определению.

Вот и я так думал. Но в реальности PCM на выходе получается с небольшими искажениями. Хотите, могу скинуть свои wavки. Максимальное расхождение по значению квантованной амплитуды составляет 17-19 (при диапазоне 65536 для 16 бит), но оно есть.

насчет пульсы ничего не могу ответить — не пользовался, и не пользуюсь.

Но вывод в файл в vlc тоже даёт искажения, хоть и поменьше, чем при записи с виртуального синка пульсы. Можете сами проверить. А в deadbeef можно как-то вывести поток напрямую в файл? Интересно сравнить.

Axon ★★★★★
()
Последнее исправление: Axon (всего исправлений: 1)
Ответ на: комментарий от Axon

А в deadbeef можно как-то вывести поток напрямую в файл? Интересно сравнить.

правый клик на файле -> convert, выбрать wav. (ты главное сравнивай байты в исходном и конечном wav файлах, так ты точно увидишь что они одинаковые, а то похоже что у тебя измерялка сломана)

Но в реальности PCM на выходе получается с небольшими искажениями.

у тебя в вычислениях где-то искажения. байтовый поток одинаковый выходит — нету там никаких искажений.

waker ★★★★★
()
Последнее исправление: waker (всего исправлений: 2)
Ответ на: комментарий от waker

Вот вам чистейший эксперимент. Беру флак, разжимаю его в wav при помощи flac -d. Потом закидываю этот же флак в deadbeef и конвертирую его в wav. Полученные файлы имеют одинаковый размер в байтах, но разные контрольные суммы. Едем дальше:

#!/usr/bin/env python3
import numpy as np
import matplotlib.pyplot as plt
import scipy.io.wavfile as wav
from scipy.stats import norm
sr, flac = wav.read('flac.wav')
sr, ddb = wav.read('ddb.wav')
flacCh0, flacCh1 = flac[:,0], flac[:,1]
ddbCh0, ddbCh1 = ddb[:,0], ddb[:,1]
diff0 = flacCh0 - ddbCh0
diff1 = flacCh1 - ddbCh1
diffRate0 = 100*len(np.where(diff0!=0)[0])/len(flacCh0)
diffRate1 = 100*len(np.where(diff1!=0)[0])/len(flacCh1)
print('%.2f%% and %.2f%% of samples differ from the original for left and right channels respectively' % (diffRate0, diffRate1))
args0 = norm.fit(diff0)
args1 = norm.fit(diff1)
print('σ for amplitude differences is %.3f and %.3f for left and right channels respectively' % (args0[1], args1[1]))
plt.figure()
bins = np.arange(-10.5, 9.5, 1)
xes = np.arange(-10, 10, 0.01)
plt.hist(diff0, bins=bins, normed=True, color='k', alpha=.5)
plt.hist(diff1, bins=bins, normed=True, color='r', alpha=.5)
plt.plot(xes, norm.pdf(xes, *args0), 'g-', linewidth=2)
plt.xlim(-10,10)
plt.show()
Выхлоп:
80.57% and 80.59% of samples differ for left and right channels respectively
σ for amplitude differences is 2.034 and 2.035 for left and right channels respectively
http://i.imgur.com/kUdOjeV.png

Что я делаю не так?
BTW, в случае vlc искажения были чутка посильнее. Правда, и там и там по одному замеру.

Axon ★★★★★
()
Последнее исправление: Axon (всего исправлений: 4)
Ответ на: комментарий от Axon

там могут быть мелкие отличия в riff header, на этот счет в трекере есть баг, у меня просто еще не дошли руки проверить его. еще раз повторюсь - отличий в сэмплах быть _не должно_. если они есть - это баг, и другого объяснения этому нет, и быть не может.

зы: было бы неплохо увидеть выхлоп mediainfo на оба wav и на flac.

waker ★★★★★
()
Последнее исправление: waker (всего исправлений: 1)
Ответ на: комментарий от waker

там могут быть мелкие отличия в riff header, на этот счет в трекере есть баг

Возможно, поэтому у меня файл из дедбифа напрямую не читался сайпаем. Пришлось метаданные почистить в audacity.

еще раз повторюсь - отличий в сэмплах быть _не должно_. если они есть - это баг, и другого объяснения этому нет, и быть не может.

В таком случае, у меня для вас плохие новости. :-)

зы: было бы неплохо увидеть выхлоп mediainfo на оба wav и на flac.

General
Complete name                            : original.flac
Format                                   : FLAC
Format/Info                              : Free Lossless Audio Codec
File size                                : 22.4 MiB
Duration                                 : 3mn 36s
Overall bit rate mode                    : Variable
Overall bit rate                         : 871 Kbps
Album                                    : This Is All Yours
Album/Performer                          : Alt-J
Track name                               : Every Other Freckle
Track name/Position                      : 04
Track name/Total                         : 13
Performer                                : Alt-J
Genre                                    : Alternative
Recorded date                            : 2014
Cover                                    : Yes
Cover description                        : Cover.jpg
Cover type                               : Cover (front)
Cover MIME                               : image/jpeg

Audio
Format                                   : FLAC
Format/Info                              : Free Lossless Audio Codec
Duration                                 : 3mn 36s
Bit rate mode                            : Variable
Bit rate                                 : 867 Kbps
Channel(s)                               : 2 channels
Sampling rate                            : 44.1 KHz
Bit depth                                : 16 bits
Stream size                              : 22.3 MiB (100%)
Writing library                          : libFLAC 1.2.1 (UTC 2007-09-17)
General
Complete name                            : flac.wav
Format                                   : Wave
File size                                : 36.3 MiB
Duration                                 : 3mn 36s
Overall bit rate mode                    : Constant
Overall bit rate                         : 1 411 Kbps

Audio
Format                                   : PCM
Format settings, Endianness              : Little
Format settings, Sign                    : Signed
Codec ID                                 : 1
Duration                                 : 3mn 36s
Bit rate mode                            : Constant
Bit rate                                 : 1 411.2 Kbps
Channel(s)                               : 2 channels
Sampling rate                            : 44.1 KHz
Bit depth                                : 16 bits
Stream size                              : 36.3 MiB (100%)
General
Complete name                            : ddb.wav
Format                                   : Wave
File size                                : 36.3 MiB
Duration                                 : 3mn 36s
Overall bit rate mode                    : Constant
Overall bit rate                         : 1 411 Kbps

Audio
Format                                   : PCM
Format settings, Endianness              : Little
Format settings, Sign                    : Signed
Codec ID                                 : 1
Duration                                 : 3mn 36s
Bit rate mode                            : Constant
Bit rate                                 : 1 411.2 Kbps
Channel(s)                               : 2 channels
Sampling rate                            : 44.1 KHz
Bit depth                                : 16 bits
Stream size                              : 36.3 MiB (100%)
Axon ★★★★★
()
Последнее исправление: Axon (всего исправлений: 1)
Ответ на: комментарий от Axon

с виду все ок, так и должно быть. чтобы писать что-то еще - нужно больше информации. я не пробовал сравнивать результат конвертации flac -d с выводом конвертера ddb. сравнивал только результат wav->flac->wav средствами ddb, и было все ок.

waker ★★★★★
()
Ответ на: комментарий от waker

сравнивал только результат wav->flac->wav средствами ddb, и было все ок.

А как вы сравнивали? Перегнал wav, полученный flac -d, дедбифом во флак и обратно, сравнил с исходным. Результат тот же:

80.60% and 80.59% of samples differ from the original for left and right channels respectively
σ for amplitude differences is 2.036 and 2.035 for left and right channels respectively

Axon ★★★★★
()
Ответ на: комментарий от Axon

А как вы сравнивали?

побайтово - файлы идентичные.

waker ★★★★★
()
Ответ на: комментарий от Axon

Оппа. Походу, во всём виноват audacity. Если фиксить хидер не им, а sox'ом, то различий 0. Вот вся мистерия и развеялась. Надо бы им баг запостить.

Axon ★★★★★
()
Последнее исправление: Axon (всего исправлений: 2)
Ответ на: комментарий от waker

Я теперь тоже не буду. Потратил вечер и привлёк вас только из-за бага в нём...

Axon ★★★★★
()
Ответ на: комментарий от waker

Оппа, девелопер мне уже ответил. Говорит, это, типа, фича, а не баг. ☺

Thank you for report and detailed analysis.

The «errors» that you describe are expected when «dither» is enabled. Dithering is a technique commonly employed to reduce quantization noise and extend the usable dynamic range when reducing the bit depth.

By default, Audacity imports audio in 32 bit float format, which allows Audacity to maintain extremely high quality when processing the audio. All audio processing in Audacity is performed in 32 bit float format.

The artificial test of importing a track and exporting it again in the same format is not a typical use for this software. Audacity is a multi-track audio editor, designed for recording, editing and processing audio. The default settings have been chosen to suit that typical use.

For «scientific» measurement applications, the optimum settings would be to use 32 bit float format throughout, including exporting. This would then obviate the need to reduce the sample format and provide full 32 bit float accuracy. Alternatively, dither can be turned off in preferences (Edit menu > Preferences > Quality), though this will of course produce quantization errors if any signal processing is performed.

There is more information about dither and Audacity's use of dither in the Audacity wiki: http://wiki.audacityteam.org/wiki/Dither

Steve

Действительно, если переключить формат на 16-bit int и отключить dithering, то на входе и выходе сигналы идентичны, в том числе при импорте флака.

Axon ★★★★★
()
Последнее исправление: Axon (всего исправлений: 2)
Ответ на: комментарий от Axon

Стало любопытно, решил перепроверить результаты записи с виртуального синка пульсы. Результат:

0.00% and 0.00% of samples differ from the original for left and right channels respectively
σ for amplitude differences is 0.000 and 0.000 for left and right channels respectively
Такие дела.

Axon ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.