Bug 47348 - Утилита fs_encode не поддерживает форматы, о которых пишет
Summary: Утилита fs_encode не поддерживает форматы, о которых пишет
Status: NEW
Alias: None
Product: Sisyphus
Classification: Development
Component: freeswitch-daemon (show other bugs)
Version: unstable
Hardware: x86_64 Linux
: P5 normal
Assignee: Anton Farygin
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2023-08-25 14:19 MSK by Artem Varaksa
Modified: 2023-08-25 14:19 MSK (History)
11 users (show)

See Also:


Attachments
Исходный файл (552.74 KB, audio/mpeg)
2023-08-25 14:19 MSK, Artem Varaksa
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Artem Varaksa 2023-08-25 14:19:44 MSK
Created attachment 14208 [details]
Исходный файл

Описание ошибки
===============

1. Проверить многие форматы, которые выводятся в строках "Adding File Format" при запуске fs_encode с флагом -v.

Для этого создать файлы для проверки. Например, с помощью исходного файла input.mp3 (во вложении) и ffmpeg (с помощью grep в команде исключены форматы, не поддерживаемые ffmpeg, а для gsm задан sample rate 8000, требуемый ffmpeg (*)):

> # ffmpeg -y -i input.mp3 $(fs_encode -v test.1 test.2 2>&1 | grep "Adding File Format" | sed "s/.*Adding File Format '/input./g" | sed "s/'//g" | grep -E '^[a-z0-9\.]+$' | grep -v -E 'avr|htk|iff|mat|mpc|m1a|paf|pvf|raw|rf64|sd2|sds|wve|xi|r8|r16|r24|r32|ulaw|alaw|adpcm|vox' | sed 's/input.gsm/-ar 8000 input.gsm/g')

(*) На результаты с другими форматами изменение sample rate не влияет.

Выполнить конвертацию из созданных файлов в wav:

> # for infile in $(ls | grep input | grep -v output); do echo "in: $infile:"; fs_encode "$infile" "$infile.output.wav"; done
(запускается от имени root из-за https://bugzilla.altlinux.org/47334)


Фактический результат
=====================

* Вывод для mp3 и oga вида:
> Couldn't open input.oga

* Вывод для al, au, caf, flac, ogg, sf, ul, voc, w64 и wav вида:
> Couldn't initialize codec for flac@8000h@20i

* Вывод для gsm:
Вывода нет, успешное завершение команды (но см. https://bugzilla.altlinux.org/47344).

Ожидаема только ошибка с mp3, т. к. его поддержка не заявляется. Остальные ошибки не ожидаемы.

При запуске c -v выводятся ошибки вида:

> # fs_encode -v input.flac output.ogg
> Opening file input.flac
> [...] [DEBUG] switch_core_file.c:444 File input.flac sample rate 44100 doesn't match requested rate 8000
> [...] [WARNING] switch_core_file.c:463 File has 2 channels, muxing to 1 channel will occur.
> Opening file output.ogg
> [...] [ERR] switch_core_codec.c:670 Invalid codec ogg!
> Couldn't initialize codec for ogg@8000h@20i
> [...] [WARNING] switch_core_codec.c:932 Codec is not initialized!
> [...] [WARNING] switch_core_codec.c:932 Codec is not initialized!

Примечания:
* Ошибка невозможности "конвертации" wav -> wav отдельная: https://bugzilla.altlinux.org/47345.
* Ошибка "Codec is not initialized!" возникает и при успешном завершении конвертации, см. вывод в https://bugzilla.altlinux.org/47344.
* Указание "-r 44100" убирает строку с DEBUG, но больше ни на что не влияет.


Ожидаемый результат
===================

Все выводимые форматы должны поддерживаться.


Обратная проверка
=================

Проверить обратное (какие форматы поддерживаются в качестве вывода при использовании входного файла input.gsm/wav) можно с помощью команды:

> # for ext in $(ls | grep input | grep -v output | sed 's/input\.//g'); do echo "gsm -> $ext:"; fs_encode "input.gsm" "gsm-output.$ext"; echo "wav -> $ext:"; fs_encode "input.wav" "wav-output.$ext"; done

Исходя из вывода этой команды, работает конвертация только {wav,gsm} -> gsm и gsm -> wav.


Дополнительно
=============

Для файлов mp3, поддержка которого не указана, выводится ошибка вида:

> # fs_encode input.mp3 output.ogg
> Couldn't open input.mp3

Она более понятна из вывода c -v:

> # fs_encode -v input.mp3 output.ogg | grep mp3
> Opening file input.mp3
> Couldn't open input.mp3
> 2023-08-25 10:44:55.092209 100.00% [ERR] switch_core_file.c:346 Invalid file format [mp3] for [input.mp3]!

Не ясно, почему эта ошибка появляется и для oga, о котором программа пишет в своём выводе.

Воспроизводимость
=================

Воспроизводится на виртуальных машинах:

[p10] server-10.1-x86-64
freeswitch-daemon-1.10.9-alt1.x86_64
ffmpeg-4.4.4-alt1.x86_64

[sisyphus] server-10.1-x86-64
freeswitch-daemon-1.10.10-alt1.x86_64
ffmpeg-4.4.4-alt1.x86_64