LINUX.ORG.RU

FFMPEG портит файлы.

 ,


2

1

Перегоняю аудио-файлы через ffmpeg скриптом:

#!/bin/sh
mkdir convert
for f in *.mp3;
do
ffmpeg -i "$f" -c:a libfdk_aac -vbr 1 -vn -ar 8000 -ac 1 -q:a 1 -b:a 8k convert/$f.aac;
done 

Внезапно оказалось, что последние 10-20% файлов пустые. Даже не пустые, а файлы битые. За 10-20% до окончания файла воспроизведение прерывается. Практически каждый файл обрезан и концовки нет. Почему это и как этого избежать?

У некоторых файлов вообще остается только самое начало. Первые 10% файла есть, остальное отрезано..

★★★★★

Последнее исправление: LightDiver (всего исправлений: 2)

Ответ на: комментарий от Deleted

Все, снова решил проблему. Проблема собственно в контейнере. Если делать файл .acc - время воспроизведения будет отображаться от 20% реального и до десятков часов.

./fdkaac -p 2 -b 11 -m 0 --transport-format 2 001.wav -o 0001.m4a

Указываем контейнер вручную размер остается минимальным, время воспроизведения чинится. Уфф... Голова аж гудит. Если будут еще советы по улучшению качества или уменьшению размера - внимательно выслушаю, а пока так.

Еще доступно вот такое по идее:

* -p, --profile     профиль

    Профиль AAC поддерживаются следующие значения n:
    2: MPEG-4 AAC LC (по умолчанию)
    5: MPEG-4 HE-AAC (SBR)
    29: MPEG-4 HE-AAC v2 (SBR+PS)
    23: MPEG-4 AAC LD
    39: MPEG-4 AAC ELD

Однако, работает из этого только второй профиль. Как подключить на генте остальные - для меня это пока загадка.

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

Это рекорд - сжатие в 17,442 раза.

Но это LC-AAC. Проверь, может твой плеер поддерживает SBR - это HE-AAC:

./fdkaac -p 5 -b 11 001.wav
Deleted
()
Ответ на: комментарий от LightDiver

Как подключить на генте остальные - для меня это пока загадка.

Хмм.

$ aac-enc
aac-enc [-r bitrate] [-t aot] [-a afterburner] [-s sbr] [-v vbr] in.wav out.aac
Supported AOTs:
	2	AAC-LC
	5	HE-AAC
	29	HE-AAC v2
	23	AAC-LD
	39	AAC-ELD
$ aacplusenc

*************************************************************
* Enhanced aacPlus Encoder
* Build Jun 18 2012, 12:11:32
* Matteo Croce <rootkit85@yahoo.it>
*************************************************************


Usage:   aacplusenc <source.wav> <destination.aac> <bitrate>

Use - as filename for stdin and/or stdout.

Example: aacplusenc song.wav song.aac 32
Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от LightDiver

command not found: aac-enc

$ apt-file search /bin/aac-enc
aac-enc: /usr/bin/aac-enc

$ dpkg -s aac-enc
Package: aac-enc
Status: install ok installed
Priority: extra
Section: sound
Installed-Size: 36
Maintainer: Am Wolfsmantel 33 <amm-info@iis.fraunhofer.de>
Architecture: i386
Source: fdk-aac
Version: 1:0.1.4-wheezy
Depends: libc6 (>= 2.13), libfdk-aac1 (= 1:0.1.4-wheezy)
Description: Fraunhofer FDK AAC Codec Library - frontend binary
 The FDK AAC Codec Library For Android contains an encoder implementation of
 the Advanced Audio Coding (AAC) audio codec.
 .
 This package contains a frontend binary capable of encoding WAVE files
 using the Fraunhofer FDK AAC Codec Library.
Homepage: http://www.iis.fraunhofer.de/en/bf/amm/implementierungen/fdkaaccodec.html
Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

Так, во-первых, где я дурак?

#!/bin/sh
mkdir convert
for f in *.mp3;
do
sox -S $f -c 1 -r 11025 convert/${f/%.mp3/.wav};
./fdkaac -p 2 -b 11 -m 0 --transport-format 2 convert/${f/%.mp3/.wav} -o convert/${f/%.wav/.m4a};
rm -f convert/${f/%.mp3/.wav};
done

Почему оно мне создает .mp3 файлы?

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

будут еще советы... внимательно выслушаю

Ещё упускается возможность префильтрации звука перед кодированием. Есть gnome_wave_cleaner (gwc), но ему нужна для работы «тишина» (насколько я помню). Тоже самое и в SoX: How to denoise audio with SOX?. Но помимо них есть интересная штука: Automatic Detection and Removal of Impulsive Noise in Audio Signals, честно скажу, я до конца её не протестировал и что конкретно она делает не понял.

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

Ага, спасибо, однако баг с неправильным временем отображения вернулся... Это уже даже не смешно.

Гадство, проблема в том, что на таких файлах плеер не может возобновлять воспроизведение. После выключения начинает заново. А еще надо проверить не отрезает ли концовки.

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

Вообще вот все что есть по этому поводу у нас тут.

Однако, с чего начали тем и закончили. Все работает сейчас, кроме изначального вопроса - ошибки времени воспроизведения... Дополнительные очистки и прочее я сохранил, гляну уже позже.

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

Сделал так:

#!/bin/sh
mkdir convert
for f in *.mp3;
do
sox -S $f -c 1 -r 16000 convert/${f/%.mp3/.wav};
./fdkaac -p 2 -b 11 -m 0 --transport-format 2 convert/${f/%.mp3/.wav} -o convert/${f/%.mp3/.m4a};
rm -f convert/${f/%.mp3/.wav};
done

Собственно размеры не изменились никак, проблема со временем все та же.

Нет, вру. Если менять рейт у sox, проблема со временем меняется. У каких то файлов пропадает, у других появляется. Но и с тем и с тем значением проблема где-то, да и есть. Причем с разными значениям, то в минус, то в плюс.

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

Говорю же, тут работает только второй профиль. Все остальные выдают ошибку: ERROR: encoder initialization failed

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

С пятым профилем размер чуть чуть меняется.

С 577.7 КиБ (591,560) до 577.8 КиБ (591,713).

Однако, во втором профиле больше глухого, шипящего, а в пятом больше звонкого. Качество пятого, как по мне - выше, однако очень уж жужжаще выходит.

Ну, и проблема с отображением времени осталась.

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

Пока не тестил, завтра уже. А вот с профилями не все так однозначно. Я тут переслушал и второй таки лучше. Там больше шипящих, но ухо не так цепляется.

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

Короче, итоги сегодня такие:

#!/bin/sh
mkdir convert
for f in *.mp3;
do
sox -S --norm $f -c 1 -r 16000 convert/${f/%.mp3/.wav};
./fdkaac -p 2 -b 11 -m 0 --transport-format 2 convert/${f/%.mp3/.wav} -o convert/${f/%.mp3/.m4a};
rm -f convert/${f/%.mp3/.wav};
done

Проблема с отображением времени осталась, зато размер ужали в 5 раз.

Завтра буду ковырять МП4боксы эти. И да, у меня именно сони волкман - NWZ-W273 (W273S).

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

У плеера весьма ограниченное число воспроизводимых форматов: MP3, WMA, AAC, WAV, PCM.

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

opus даст

Нихрена он не даст. Дело не в качестве, а в аппаратной поддержке.

Deleted
()
Ответ на: комментарий от LightDiver

sox -S --norm

Для кодеров, использующих dct, я бы --norm не пользовал. Я бы пользовал gain -n -3. Чуть потище, но и клипинга уже не заметишь.

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

Это как в скрипт добавить?

И я тут потестировал в плеере - и второй и пятый профиль он читает, но пятый это кошмар дребезжащий, а вот второй внезапно очень приятненько так играет. На ноуте еще слышны иногда шипящие, а в плеере очень хорошо, ровно.

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

Это как в скрипт добавить?

$ man sox
...
              For example,
                 sox infile outfile gain -n
              normalises to 0dB, and
                 sox infile outfile gain -n -3
              normalises to -3dB.

              The -l option invokes a simple limiter, e.g.
                 sox infile outfile gain -l 6
              will  apply 6dB of gain but never clip.
...
Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от LightDiver

И там и там размеры идентичны и на слух.

Mdct наверное «слизывает». Очередное преимущество перед mp3-шным dct.

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

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

LightDiver ★★★★★
() автор топика

Контейнер aac не содержит временных меток, отсюда проблемы с отображением времени. Вангую что плеер твой считает время по битрейту, поэтому лучше кодировать в строго постоянный битрейт (и заголовок должен быть соответствующим), если уж он нормальный m4a не ест.
m4a тоже разный бывает. Это может быть настоящий m4a (iTunes), а могут быть разновидности mp4 с расширением m4a. Возможно, какой-то из них понравится плееру. MediaInfo покажет формат.

-vbr 1 -q:a 1 -b:a 8k

Масло масляное.

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

Уже меняли и контейнеры и битрейт и постоянно и переменчиво. Меняется лишь то, что баг гуляет туда сюда между файлами. Из одних пропадает, в другие добавляется.

И это не один плеер отображает. Это с разными плеерами, как на ноуте, так и на волкмане. При этом в каждом плеере свое время.

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

подскажешь как в этот скрипт добавить рекурсивно несколько каталогов с файлами

Но будут проблемы с «нехорошими» символами:

#!/bin/sh

find ./ -type f -iname "*.mp3" -printf "%p\n" | while read f
do
    fname="${f%.mp3}"
    sox -S "$f" -c 1 -r 16000 "$fname.wav" gain -n -3;
    ./fdkaac -p 2 -b 11 -m 0 --transport-format 2 "$fname.wav" -o "$fname.m4a";
    rm -f "$fname.wav";
done

Сохраняет туда же, откуда берёт.

PS: find ./ можно заменить на find /path/to/audiobook

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

Ага, спасибо, только тогда уж и мп3 в конце надо удалять. Не вручную же бегать по каталогам потом.

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

тогда уж и мп3 в конце надо удалять

Никогда не удаляй «сырьё», пока не уверен в «результате»!

Mp3 ты всегда успеешь удалить:

$ find /path/to/audiobook -type f -iname "*.mp3" -delete
Deleted
()
Ответ на: комментарий от Deleted

Я всегда сначала делаю копии. Обрабатываю вообще в других каталогах. Привычка, однако. И команды перечитываю трижды, прежде чем выполнить.

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

Я всегда сначала делаю копии

Ну не копировать же по новой после каждой «неувязочки». Проще отдельно выполнить команду (см. выше), чем пхать делиты в скрипт.

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

А как я узнаю, что была неувязочка? Неувязочка в таком скрипте может быть только одна - нерабочий файл. Узнаю я это только дойдя до него при прослушивании.

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

А как

Кстати. Если бы ты пользовал hh(hstr), ты бы тоже склонялся к однострочникам, а не плодил скрипты (особой надобности в которых нет). Поэтому мы «слегка» говорим на «разных языках».

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

Ну, где то я их и использую. Например, для удаления пробелов из имен файлов. А где то эти однострочники повторяются раз за разом, год за годом с одинаковым результатом и уж лучше автоматизировать. У меня так ось с 2013 сама по крону обновляется. Однако, следил я за этим первые полтора года каждый день.

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

Ну, где то я их и использую.

Удобство hh в том и заключается, что, когда на него подсаживаешься, скрипты уже не кажутся ни грамма удобными. По сравнению с обоймой однострочников в favorites скрипты становятся ничем.

Deleted
()
Ответ на: комментарий от LightDiver

а что такое hh?

Я ж тебе ссылку выше дал. Вкратце hh - интерактивый history+grep, имеющий к тому же favorites.

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

Все, понял. Шелл. Нууу... Я очень уж привык к zsh за последние годы. Подсветка, история, все такое.

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

Я очень уж привык к zsh за последние годы

Да вашу мать.

https://github.com/dvorka/hstr

Easily view, navigate and search your command history with shell history suggest box for Bash and zsh.

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