ffmpeg m4a / m4b / mp4 значение «Время» выходного файла неверно при чтении в iTunes - PullRequest
0 голосов
/ 27 мая 2019

Я использую ffmpeg для конвертации аудиокниг в m4a / m4b / mp4. Кажется, все работает, пока не попробуете воспроизвести их в iTunes. Без проблем воспроизводится в VLC, QuickTime и MacOS.

«Так почему вы пишете здесь? Это не форум 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 поле «время» отключается way , и оно сразу же переходит к следующей песне / аудиокниге в очереди.

Попытки конвертировать его в iTunes не удаются сразу - слишком быстро, чтобы увидеть, что происходит. В ошибках консоли просто говорится «Ошибка подтверждения» (без двоеточия).

edit: Томми ответил на вопрос. Вот рабочая функция 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}"
}

1 Ответ

2 голосов
/ 30 мая 2019

Они перестали работать и для меня, но если вы просто измените расширение файла на .m4a, оно будет импортироваться нормально, тогда вам просто нужно изменить тип с музыки на аудиокнигу и сказать ему, чтобы он запоминал местоположение, и он отлично работает на Mac или iPhone.

Другой подход заключается в том, что я вернулся и перезапустил ffmpeg на .aax с выводом на .m4b, и iTunes отлично с этим справился. Я раньше не пользовался .m4b, но, честно говоря, не помню почему.

...