Как конвертировать MKV-видео в MP4-видео без потерь, которые совместимы с устройствами iOS в Windows?

10

Я новичок в FFmpeg (Windows), и мне нужна помощь.

Я хочу конвертировать мои MKV в MP4 с минимальными потерями в качестве. MKV сделаны с MakeMKV и содержат, помимо прочего, саундтрек DTS. Они без потерь. Причина, по которой я хочу конвертировать, заключается в том, что я планирую транслировать его на iPad и Apple TV. iPad не поддерживает DTS и MKV. MKV - это и DVD, и Blu-Ray. MKV содержат видео, саундтреки и субтитры.

Я пробовал это, но не получил звука из-за саундтрека DTS:

ffmpeg -i input.mkv -c:v copy -c:a copy output.mp4

Кто-нибудь может мне помочь?

Какие кодеки я должен использовать? MP4 лучше для Apple?

Striky
источник
1
Существуют ли конкретные версии для iPad и Apple TV, на которые вы ориентируетесь, или вы хотите поддерживать их все?
Llogan
2
Примечание: MP4 не является кодеком. Это просто формат файла («контейнер»).
Slhck
У меня новейший iPod Air. У меня новейший Apple TV. Я знаю, что MP4 - это контейнер, а не кодек :)
Striky
Пожалуйста, включите некоторую информацию об одном из ваших типичных входных данных. Полный вывод консоли ffmpeg -i input.mkvбудет достаточно.
Llogan
Я пробовал ffmpeg -i input.mkv -c: v copy -c: копия output.mp4 Это воспроизводилось, но не получало звука, так как яблоко не воспроизводит DTS. Также пробовал ffmpeg -i input.mkv -strict экспериментальный -c: v copy -c: aac -b: 192k -q: 6 output.mp4, но фильм (и видео, и звук) не играл гладко на моем iPad Air (как потоковый, так и загруженный).
Страйк

Ответы:

22

MP4 действительно лучший формат для устройств и программного обеспечения Apple. DTS также действительно не поддерживается, многие видеофайлы MP4 содержат две звуковые дорожки, одну DTS и одну AAC.

Доступно несколько кодеров, все они описаны в википедии ffmpeg . Какой кодек доступен, зависит от того, как был скомпилирован ffmpeg. libfdk_aac даст вам лучшие результаты, но из-за того, что этот кодек не является бесплатным, он не всегда доступен.

Вещи, которые вы можете попробовать (я положил их в порядке моего воспринимаемого качества, лучше всего сначала)

ffmpeg -i input.mkv -c:v copy -c:a libfdk_aac -b:a 128k output.mp4
ffmpeg -i input.mkv -strict experimental -c:v copy -c:a aac -b:a 192k output.mp4
ffmpeg -i input.mkv -c:v copy -c:a libfaac -b:a 192k output.mp4

Если вы хотите сохранить дорожку DTS, используйте -mapфлаг.

Непосредственно для OP, но вспомогательная программа OS X делает этот процесс очень простым.

РЕДАКТИРОВАТЬ: Комментарии TL; Dr? ОП решил проблему с помощью следующей команды

ffmpeg -i input.mkv -strict experimental -map 0:0 -map 0:1 -map 0:2 -map 0:3 -c:v copy -c:a aac -b:a 384 -c:s copy output.mp4

СОВЕТ: если -c:s copyсубтитры не работают, попробуйте -c:s mov_text.
Спас меня несколько раз.

jornane
источник
Я не думаю, что режим VBR внутреннего кодера AAC работает так, как задумано. В прошлый раз, когда я проверял, это было сломано. Лучше пойти с CBR и использовать VBR для других кодировщиков ( libfdkи libfaac)
slhck
Я также читал, что libfdk_aac даст лучший результат. Я скачал 32-разрядную статическую версию для Windows (git-9722a6a (2014-05-24)). Как я могу проверить, есть ли у меня кодек libfdk? Редактировать: я получаю неизвестный кодер 'libfdk_aac'. Где я могу скачать его, или есть почти такой же хороший аудиокодек?
Страйк
Пробовал оба ffmpeg -i input.mkv -c: v копия -c: libfdk_aac -b: 128k output.mp4 и ffmpeg -i input.mkv -c: v копия -c: libfaac -b: вывод 192k .mp4 Не идти :(
Striky
@Striky "No go :(" Я попробовал последнюю команду со свежим ffmpeg от Homebrew, у меня работает. Не могли бы вы рассказать подробнее, почему он у вас не работает?
jornane
@slhck: Я только что попробовал -c:a aac -q:a 6настройки и сравнил результат с -c:a libfaac -b:a 192k, по моему мнению, кодеком aac, который дает лучшие результаты, чем libfaac , но, поскольку кодеки находятся в стадии разработки, это может измениться. libfdk_aac , вероятно, даст еще лучшие результаты, но сейчас у меня его нет.
Jornane
0

Я знаю, что это старый вопрос - и уже есть ответ - но я хотел поделиться некоторыми командами, которые я использую, с FFmpeg на macOS.

MP4 видео в кодировке x264 с аудио AAC от MKV

Основное преобразование MKV с MP4 в нем, но преобразование аудио в AAC на 128k. Обратите внимание на отображения: -map 0:0означает первую ( 0) дорожку из источника input ( 0) и -map 0:1означает вторую ( 1) дорожку из того же источника input ( 0). Мне нравится делать это в тех случаях, когда есть несколько звуковых дорожек, поэтому я могу сделать что-то вроде select, -map 0:3чтобы получить третью дорожку.

ffmpeg -i input.mkv \
       -c:v copy \
       -c:a aac -b:a 128k \
       -map 0:0 -map 0:1 \
       output.mp4 \
       ;

MP4 видео в формате HEVC / x265 с аудио AAC от MKV

Это похоже на приведенную выше команду x264, но вместо этого использует HEVC / x265, чтобы получить файл меньшего размера с тем же - если не лучшим качеством - видео из исходного MKV. Обратите внимание, что я предпочитаю масштабировать видео iOS до 720 при использовании HEVC / x265; качество воспроизведения без особых помех на моем MacBook, iPad и iPhone. Просто убедитесь, что ваше оборудование и ОС поддерживают воспроизведение HEVC / x265. И будьте осторожны: HEVC / x265 очень сильно загружает процессор, поэтому, если ваша машина не имеет большой мощности процессора, это может занять целый день или около того, чтобы закодировать 90 минут видео.

ffmpeg -i input.mkv \
       -vf scale=-1:720 \
       -c:v libx265 -crf 20 \
       -c:a aac -b:a 128k \
       -threads 4 \
       -tag:v hvc1 \
       -map 0:0 -map 0:1 \
       output.mp4 \
       ;

Вот разбивка каждого из основных параметров, кроме входных и выходных файлов.

  • -vf scale=-1:720: Масштабировать видео до 720 высотой и автоматически вычислять ширину. Обратите внимание , что FFmpeg может подавиться некоторым MKVs по причинам , я не 100% ясно , так что вы должны явно установить ширину с чем - то вроде этого: -vf scale=1280:720. Поэкспериментируйте и посмотрите, что работает для вас.
  • -c:v libx265 -crf 20: libx265Кодек кодирования видео. -crf 20Является CRF (фактор константы скорости) . CRF по умолчанию, если вы не укажете, это 28, но - на данный момент - качество довольно хорошее… Мех. Я предпочитаю 20, так как это очень хороший баланс между качеством и размером файла.
  • -threads 4Мне нравится указывать количество потоков. 4 - это то, что моя система может обрабатывать сейчас, но иногда я сокращаю его до 2 или 3. Чем больше число, тем быстрее, если у вас достаточно процессоров для его обработки.
  • -tag:v hvc1: Волшебная настройка метаданных, которая должна быть установлена ​​на устройствах iOS для правильного воспроизведения видео HEVC / x265.

И это об этом!

JakeGould
источник