Настройки ручного тормоза для преобразования MKV в MP4 при сохранении исходного качества

44

У меня есть тонна MKV-файлов, которые мне нужно конвертировать в MP4, и выбранное мной программное обеспечение - Handbrake.

Я застрял на том, какие настройки будут лучше для преобразования. Я хочу сохранить полное качество. Должен ли я просто конвертировать с исходными настройками и ничего не менять, или мне нужно что-то изменить?

оранжевый
источник
Вот довольно подробное руководство по настройкам Handbrake. Mattgadient.com/2013/06/12/…
janot
Я получаю сообщение об ошибке в некоторых файлах (для mkv в mp4 и mp4 в mkv): Выходной файл # 0 не содержит никакого потока. У кого-нибудь есть идеи, что это значит?
PrimitiveNom

Ответы:

86

В чем проблема с ручником?

Когда вы используете Handbrake для преобразования из одного формата контейнера в другой (например, MKV в MP4 в вашем случае), Handbrake перекодирует видео. См. Также соответствующий запрос функции , который включил бы передачу видео:

Извините, добавление видео прохода не планируется. HandBrake предназначен для транскодирования видео. Он не был предназначен для пропуска.

Таким образом, каждый раз, когда вы меняете контейнеры с помощью Handbrake, ваше видео будет перекодировано, а это означает, что а) занимает время и б) может привести к потере качества.

Должен ли я перекодировать? Разве я не могу просто поменять контейнер?

Поскольку проход невозможен, спросите себя: нужно ли мне перекодировать? Если вы хотите изменить только контейнер с MKV на MP4, вам обычно не нужно ничего кодировать , вы просто меняете «обертку» вокруг видео. Это не теряет качества, и это будет намного быстрее.

Вы можете легко поменять контейнеры с помощью FFmpeg - вам просто нужно указать это для копирования видео и аудио потоков:

ffmpeg -i input.mkv -c copy -map 0 output.mp4

Есть также инструменты, такие как MP4Box, которые также могут создавать контейнеры MP4 - то же самое существует для MKV с MKVtoolnix .

Однако есть большая оговорка: это работает, только если аудио и видео кодеки поддерживаются в целевом (MP4) контейнере, что имеет место, например, для H.264 / H.265 и AAC, но не для многих других. Кроме того, поддержка формата субтитров для MP4 отличается от MKV и на самом деле довольно ограничена, поэтому эта команда может завершиться ошибкой.

Если эта команда не работает и если ваш ввод использует неправильные кодеки для выходного контейнера, вам, вероятно, придется перекодировать . В этом случае кодеки будут адаптированы к выходному контейнеру.

Чтобы понять, почему это необходимо, важно изучить разницу между видеокодеками и контейнерами . Это поможет вам понять, почему смена контейнеров работает и почему контейнеры MP4 и MKV имеют мало общего с видеокодеками.

В любом случае, почему перекодировка плохая?

Вы можете (обычно) не сохранять полное качество при кодировании видео, которое уже было закодировано. Это связано с тем, что оригинал уже был сжат, выбрасывая информацию, и, повторяя ее, вы вносите потерю поколения .

Зачастую вы хотите перекодировать видео, когда, например, изменяются его размеры, или вам нужна определенная скорость передачи данных для сжатия вашего видеопотока, или ваше исходное видео использует кодек, который вы не можете воспроизвести по какой-либо причине.

Итак, если вы загрузите свое видео MKV в Handbrake и перекодируете его с помощью x264, который использует Handbrake кодера H.264, сохраните его в контейнере MP4, вы потеряете качество независимо от того, что, если вы не установите битрейт или добротность настолько высока, что вы (действительно) не увидите разницу. Но тогда размер файла также будет больше.

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

Хорошо, но мне действительно нужно перекодировать!

Если вам действительно нужно перекодировать, не устанавливайте среднюю скорость передачи, а выбирайте коэффициент постоянной скорости , который напоминает «постоянное качество». Точно так же, как «переменная скорость передачи данных» для MP3: он будет тратить биты на нужные видео части и улучшать общее качество - при том же размере файла.

Нормальные значения CRF составляют от 19 до 24, где более низкое значение означает «лучше». Таким образом, вы можете попробовать с коэффициентом скорости 19. Кроме того, убедитесь, что вы установили «Высокий» профиль, который позволяет кодировщику использовать все сигналы тревоги и свистки и оптимизировать качество для данной скорости передачи данных.

slhck
источник
Спасибо! Кажется, вы единственный, кто, кажется, заботится об этом вопросе и выручает меня, я последовал вашему совету и, кажется, качество такое же, как и в оригинале! :)
оранжевый
Для некоторых файлов MKV это не удастся (Не удалось записать заголовок для выходного файла ... неверный кодек). Используйте ffprobe -i file.mkv, чтобы увидеть, в каком формате находится аудио / видео, вам, вероятно, потребуется перекодировать видео x264 и аудио aac / ac3
ski_squaw
Вы уверены на 100%, что переупаковка файлов не приводит к потере качества ??
PrimitiveNom
1
@BallpointBen Невозможно, нет: github.com/HandBrake/HandBrake/issues/…
slhck
1
@Hashim Я попытался уточнить пост в соответствии с просьбой. И что касается вашего вопроса, поскольку Handbrake не позволяет проходить, переход с MP4 на MKV приведет к потере качества. И это займет много времени. Просто делай ffmpeg -i input.mp4 -c copy output.mkvи у тебя все будет хорошо.
slhck
4

Это работает очень хорошо для меня. Ниже приведен код для преобразования всех файлов .mkv в .mp4 в Windows.

  • Вам может понадобиться добавить ffmpeg к вашему пути. Вы можете просто указать полный путь к исполняемому файлу ffmpeg, D: \ apps \ ffmpeg \ bin \ ffmpeg.exe
  • Загрузите ffmpeg для Windows здесь.
  • Использование: Перетащите файл .mkv на него. Это сделает весь каталог.

Сохраните в файле с именем convert.bat.

for %%a in ("*.mkv") do ffmpeg.exe -i "%%a" -vcodec copy -acodec copy "%%~na .mp4"
pause
MonkeyMagic
источник
Работает как шарм.
Кит Джонсон
Я положил это в папку с ffmpeg.exe, а затем изменил наfor %%a in ("*.mkv") do %~dp0ffmpeg.exe -i "%%a" -vcodec copy -acodec copy "%%~na .mp4"
davidtbernal