Восстановление поврежденных записей m4a
Я использовал Ubuntu на своем школьном компьютере в этом году, я обычно записываю лекции, на которые не могу надеяться поспевать за профессором, у меня есть разрешение на это. Я использую аудио-рекордер по умолчанию, который вы можете установить с sudo apt-get install audio-recorder
потому что это было самым простым в использовании. Ранее в семестре у них записи были в порядке. Но теперь они испорчены, как только запись сделана. Они в формате.m4a.
Я перепробовал много уроков, включая редактирование шестнадцатеричных данных записи, не повезло. Я не знаю, где начинается запись, так как, когда я пытаюсь сделать новую запись, она повреждена. Я пытался использовать ffmpeg, чтобы получить эту ошибку, moov atom not found
, который поиск не делает ничего, чтобы помочь решить проблему. Или я получаю сообщение об ошибке protocol not found. Did you mean in.m4a?
это имя файла, который я набрал правильно. ffmpeg возвращает ошибку "протокол не найден". Затем он говорит, что вы имеете в виду файл, который я вставил. Faad возвращает эту ошибку: Unable to find correct AAC sound track in the MP4 file.
Также я попытался восстановить MP4, и он работает, так что файл должен быть в состоянии исправить. Но это будет стоить 86 долларов, и мне нужно исправить 6 записей.
Я попытался удалить и переустановить ограниченные кодеки.
Любая помощь будет принята с благодарностью.
2 ответа
Смотрите здесь, внизу страницы.
Установите faad при необходимости sudo apt install faad
dd ibs=1 skip=44 if=yourfilename.m4a of=raw.m4a
faad -a newname.m4a raw.m4a
Все благодарности автору ссылки, на которую я указываю, потому что я не знаю, что делаю, но я проверил это на вашем большом файле, и он работает. Первая команда занимает некоторое время. Потерпи. Пробовал на убунту 16.04.
Как указано в комментариях, результат может быть открыт в VLC, но не в Audacious. Но мы можем использовать vlc для его перекодирования или переписать в другой формат. Сценарий ниже преобразует все файлы *.m4a в текущем каталоге в *.mp3.#!/bin/bash
quote=\"
executable="/usr/bin/vlc"
argument3=vlc://quit
#transcoding parameters
acodecvalue=mp3
bitratevalue=128
accessvalue=file
muxvalue=raw
for x in *.m4a; do
inputname="${x}"
strippedname=${x%.m4a}
outputname=${strippedname}.mp3
quote_outputname=${quote}./${outputname}${quote}
echo ${inputname}
echo ${quote_outputname}
qtranscode=#transcode{vcodec=none,acodec=$acodecvalue, # continue line !
ab=$bitratevalue,channels=$channelsvalue} # continue line !
:standard{access=$accessvalue,mux=$muxvalue,dst=${quote_outputname}}
argument1="$inputname"
argument2=--sout=$qtranscode
"$executable" -I dummy "$argument1" "$argument2" "$argument3"
done
Это работает, но значения, используемые в dd, не подходят для каждого случая. Здесь автор исходного поста объясняет почему: Оригинальный пост этого решения
По сути, вы удаляете заголовок файла, пропуская 44 байта с помощью dd, но это значение варьируется от файла к файлу, как это случилось со мной.
Решение состоит в том, чтобы использовать шестнадцатеричный редактор (я предлагаю на копии сломанного файла) и удалить все от начала до конца слова "mdat". В моем случае это было 28 байтов вместо 44.
Я использую 0xED в качестве шестнадцатеричного редактора для Mac (он бесплатный и работает на последней Mac OS, Mojave, на момент написания статьи). Кроме того, для Mac вы можете установить faad с помощью Homebrew, запустив
brew install faad2
Вам может потребоваться указать частоту дискретизации файла, если она отличается от 44,100 Гц при использовании faad с ключами -s
Если faad возвращает эту ошибку Error: Maximum number of bitstream elements exceeded
это может означать, что вы удалили слишком много байтов с начала файла, как это сначала произошло со мной.
Наконец, после обработки необработанного файла с помощью faad вы захотите перекодировать файл m4a, чтобы убедиться, что у вас есть правильный и совместимый файл, это можно легко сделать с помощью ffmpeg
ffmpeg -i newfile.m4a -c:a aac output.m4a