ffmpeg: преобразование MKV в MP4 без потерь

41054
Striky

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

Я пробовал это, но не получаю звук из-за звуковой дорожки DTS: ffmpeg -i input.mkv -c: v copy -c: копия output.mp4

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

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

8
Существуют ли конкретные версии для iPad и Apple TV, на которые вы ориентируетесь, или вы хотите поддерживать их все? LordNeckbeard 10 лет назад 1
Примечание: MP4 не является кодеком. Это просто формат файла («контейнер»). slhck 10 лет назад 1
У меня новейший iPod Air. У меня новейший Apple TV. Я знаю, что MP4 является контейнером, а не кодеком :) Striky 10 лет назад 0
Пожалуйста, включите некоторую информацию об одном из ваших типичных входных данных. Полный вывод консоли `ffmpeg -i input.mkv` будет достаточным. LordNeckbeard 10 лет назад 0
Я пробовал 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 (как потоковый, так и загруженный). Striky 10 лет назад 0
Я смогу дать более подробный ответ, если вы покажете некоторую информацию о ваших входных данных и вашей сборке ffmpeg. LordNeckbeard 10 лет назад 0

1 ответ на вопрос

16
jornane

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.
Спас меня несколько раз.

Я не думаю, что режим VBR внутреннего кодировщика AAC работает так, как задумано. В прошлый раз, когда я проверял, это было сломано. Лучше использовать CBR и использовать VBR для других кодировщиков (`libfdk` и` libfaac`) slhck 10 лет назад 0
Я также читал, что libfdk_aac даст лучший результат. Я скачал 32-разрядную статическую версию для Windows (git-9722a6a (2014-05-24)). Как я могу проверить, есть ли у меня кодек libfdk? Редактировать: я получаю неизвестный кодировщик 'libfdk_aac'. Где я могу скачать его, или есть почти такой же хороший аудиокодек? Striky 10 лет назад 0
Пробовал оба 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 10 лет назад 0
@Striky "No go :(" Я попробовал последнюю команду с новым ffmpeg от Homebrew, у меня работает. Не могли бы вы рассказать подробнее, почему она у вас не работает? jornane 10 лет назад 0
@slhck: я только что попробовал настройки `-c: aac -q: a 6` и сравнил результат с` -c: libfaac -b: a 192k`, на мой взгляд кодек ** aac ** дает лучше результаты, чем ** libfaac **, но так как кодеки находятся в стадии разработки, это может измениться. ** libfdk_aac **, вероятно, даст еще лучшие результаты, но сейчас у меня его нет. jornane 10 лет назад 0
Сравнение VBR и CBR с различными кодеками не дает полезных результатов, но диапазон качества кодировщика `aac` даже не задокументирован, поэтому его безопаснее использовать с CBR. slhck 10 лет назад 0
Вы правы, это было немного наивно с моей стороны. Я перекодировал, используя `-c: aac -b: a 192k`, но это не изменило моего мнения; Я все еще думаю, что экспериментальный кодек ** aac ** дает лучшие результаты, чем ** libfaac **. Я изменил свой ответ, чтобы использовать CBR для aac, однако учтите, что libfaac не поддерживает CBR, но вместо этого имеет ABR при определении битрейта. jornane 10 лет назад 0
@ffmpeg -i input.mkv -strict экспериментальный -c: v копия -c: aac -b: 192k -q: 6 output.mp4 сработал, но почему-то не очень хорошо играл на моем iPad Air. Не знаете почему, если есть кодеки, не поддерживаемые Apple? Мне также нужны все саундтреки и субтитры, если это возможно. Striky 10 лет назад 0
«не играл хорошо», в чем проблема? У Apple есть некоторые ограничения, но кодек AAC должен быть в порядке. Все саундтреки не проблема, просто посмотрите на аргумент `-map`. В ответе есть ссылка. jornane 10 лет назад 0
Фильм «заикался» (это правильное слово?), И звук, и картинка. Это было не гладко. Я скачал его на iPad, а также транслировал. Когда я впервые скопировал кодек v и кодек (только что изменил контейнер на mp4), я получил плавное видео, но без звука (так как Apple не воспроизводит DTS). Кстати, нажмите на ссылку -map сейчас. Спасибо за это :) А что означает -q: 6? Striky 10 лет назад 0
Нашел команду, которая работает для меня. Будет продолжать работать над этим. ffmpeg -i input.mkv -strict экспериментальный -map 0: 0 -map 0: 1 -map 0: 2 -map 0: 3 -c: v копия -c: aac -b: вывод копии 384 -c: s .mp4. (есть видео, 2 саундтрека и 1 субтитр). Спасибо за вашу помощь. Striky 10 лет назад 0
Приятно слышать, что это работает! Я провел несколько тестов с разными командами, у меня работают как ваша команда, так и мои команды (пробовал на iPad 3), но, возможно, ваш входной файл в чем-то отличается. `-q: a 6` означает качество звука 6, масштаб зависит от кодека (и не определен для` aac`). jornane 10 лет назад 0
@Striky Вы уверены, что не имели в виду `-b: 384k`? Jason R. Coombs 9 лет назад 0

Похожие вопросы