恢复损坏的 m4a 录音

恢复损坏的 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 个录音。

我已尝试卸载并重新安装受限的编解码器。

任何帮助将不胜感激。

答案1

这里,在页面底部。
如果需要,请安装 faadsudo apt install faad
dd ibs=1 skip=44 if=yourfilename.m4a of=raw.m4a
faad -a newname.m4a raw.m4a
所有功劳都归功于我指向的链接的作者,因为我不知道我在做什么,但我在你的较大文件上测试了它,并且它有效。第一个命令需要一些时间。请耐心等待。在 ubuntu 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

答案2

这有效,但 dd 中使用的值并不适用于每种情况。原文作者在这里解释了原因: 该解决方案的原始帖子

基本上,您是通过使用 dd 跳过 44 个字节来剥离文件头,但该值因文件而异,就像我遇到的情况一样。

解决方案是使用十六进制编辑器(我建议使用损坏文件的副本)并删除从单词“mdat”开头到结尾的所有内容。在我的情况下,它是 28 个字节,而不是 44 个字节。

我在 Mac 上使用 0xED 作为十六进制编辑器(它是免费的,并且在撰写本文时可在最新的 Mac OS Mojave 上运行)。此外,对于 Mac,您可以通过运行 Homebrew 安装 faad

brew install faad2

使用 faad 和开关 -s 时,如果文件采样率与 44,100Hz 不同,则可能需要指定文件采样率

如果 faad 返回此错误,Error: Maximum number of bitstream elements exceeded则可能意味着您从文件开头删除了太多字节,就像我最初遇到的情况一样。

最后,一旦你用 faad 处理了原始文件,你将需要重新编码 m4a 文件,以确保您有一个正确且兼容的文件,这可以通过 ffmpeg 轻松完成

ffmpeg -i newfile.m4a -c:a aac output.m4a

相关内容