我使用ffmpeg将有声读物转换为m4a/m4b/mp4。在尝试在iTunes中播放它们之前,一切似乎都很有效。它可以在VLC、QuickTime和MacOS的Quicklook中播放,没有问题。
“那么你为什么要在这里发帖呢?这不是一个iTunes论坛。”
我希望这是iTunes对文件格式的挑剔,我可以在ffmpeg命令中添加一些神奇的参数,并让它吐出一些iTunes可以读取的内容。
下面是我用来进行转换的bash函数。我尝试使用m4a/mp4/m4b作为TEMP_FILE_EXTENSION的值,并尝试打开中间文件。当您将时间放入iTunes中时,它始终是同一个损坏的“时间”值。
dedrm_audible () {
# Check for AtomicParsley, ffmpeg, and 3 args
if (! type AtomicParsley >/dev/null 2>/dev/null) || (! type ffmpeg >/dev/null 2>/dev/null) || [ ! $# -eq 3 ]; then
echo "Usage:"
echo " dedrm_audible <path to .aax> <activation bytes> <path to output file>"
echo " Note: AtomicParsley and ffmpeg must be in PATH variable"
return
fi
local ORIGINAL_PWD="$(pwd)"
local TEMP_DIR="/tmp/audible"
local AUDIOBOOK_FILE="$1"
local ACTIVATION_BYTES="$2"
local OUTPUT_FILE="$3"
local FULL_AUDIOBOOK_PATH="$(realpath "${AUDIOBOOK_FILE}")"
local OUTPUT_PATH="$(realpath "${OUTPUT_FILE}")"
local TEMP_FILE_EXTENSION="m4a"
mkdir -p "${TEMP_DIR}"
cd "${TEMP_DIR}"
# Extract the book cover
ffmpeg -activation_bytes "${ACTIVATION_BYTES}" -i "${FULL_AUDIOBOOK_PATH}" -vcodec copy artwork.png
# Convert the audio
ffmpeg -activation_bytes "${ACTIVATION_BYTES}" -i "${FULL_AUDIOBOOK_PATH}" -vn -c:a copy -v debug output.${TEMP_FILE_EXTENSION}
# Add the cover to the new file
AtomicParsley output.${TEMP_FILE_EXTENSION} --artwork artwork.png --overWrite
# Put it where you want it and clean up
cp output.${TEMP_FILE_EXTENSION} "${OUTPUT_PATH}"
rm artwork.png
rm output.${TEMP_FILE_EXTENSION}
cd "${ORIGINAL_PWD}"
}一切都顺利进行了。新文件在那里等着我,当我在上面做一个“获取信息”或“快速查看”(我在MacOS上)时,所有的元数据(包括封面)都在等着我。但是当打开它并试图在iTunes中播放它时,"time“字段已经关闭,它立即跳过队列中的下一首歌曲/有声本。
在iTunes中转换它的尝试立即失败-太快,看不出发生了什么。控制台中的错误仅仅是“:”(冒号之后没有任何内容)。
编辑:汤米回答了这个问题。下面是一个有用的bash函数:
dedrm_audible () {
# Check for AtomicParsley, ffmpeg, and 3 args
if (! type AtomicParsley >/dev/null 2>/dev/null) || (! type ffmpeg >/dev/null 2>/dev/null) || [ ! $# -eq 3 ]; then
echo "Usage:"
echo " dedrm_audible <path to .aax> <activation bytes> <path to output file>"
echo " Note: AtomicParsley and ffmpeg must be in PATH variable"
return
fi
local ORIGINAL_PWD="$(pwd)"
local TEMP_DIR="/tmp/audible"
local AUDIOBOOK_FILE="$1"
local ACTIVATION_BYTES="$2"
local OUTPUT_FILE="$3"
# Alternative to realpath (since I read somewhere that it's not there by default on some systems): OUTPUT_PATH="$( cd "$( dirname "$OUTPUT_FILE" )" && pwd )"
local FULL_AUDIOBOOK_PATH="$(realpath "${AUDIOBOOK_FILE}")"
local AUDIOBOOK_NAME="${$(basename "${FULL_AUDIOBOOK_PATH}")%.aax}.m4a"
local OUTPUT_PATH="$(realpath "${OUTPUT_FILE}")"
local TEMP_FILE_EXTENSION="m4a"
mkdir -p "${TEMP_DIR}"
cd "${TEMP_DIR}"
cp "${FULL_AUDIOBOOK_PATH}" "${AUDIOBOOK_NAME}"
# Extract the book cover
ffmpeg -activation_bytes "${ACTIVATION_BYTES}" -i "${AUDIOBOOK_NAME}" -vcodec copy artwork.png
# Convert the audio
ffmpeg -activation_bytes "${ACTIVATION_BYTES}" -i "${AUDIOBOOK_NAME}" -vn -c:a copy -v debug output.${TEMP_FILE_EXTENSION}
# Add the cover to the new file
AtomicParsley output.${TEMP_FILE_EXTENSION} --artwork artwork.png --overWrite
# Put it where you want it and clean up
mv output.${TEMP_FILE_EXTENSION} "${OUTPUT_PATH}"
rm artwork.png
rm "${AUDIOBOOK_NAME}"
cd "${ORIGINAL_PWD}"
}发布于 2019-05-30 20:17:18
他们也停止了对我的工作,但如果您只需将文件扩展名更改为.m4a,它将导入很好,那么您只需将类型从音乐更改为有声读物,并告诉它记住位置,它在mac或iPhone上运行良好。
另一种方法是,我返回并在.aax上重新运行ffmpeg,输出到.m4b,iTunes处理得很好。我以前没有use.m4b,但坦白地说,我不记得原因了。
https://stackoverflow.com/questions/56318303
复制相似问题