Ustawienia hamulca ręcznego do konwersji MKV na MP4 przy zachowaniu oryginalnej jakości

44

Mam mnóstwo plików MKV, które muszę przekonwertować na MP4, a moim wybranym oprogramowaniem jest Handbrake.

Utknąłem na tym, które ustawienia byłyby najlepsze do konwersji. Chcę zachować pełną jakość. Czy po prostu dokonuję konwersji z oryginalnymi ustawieniami i niczego nie zmieniam, czy jest coś konkretnego, co muszę zmienić?

Pomarańczowy
źródło
Oto dość szczegółowy przewodnik po ustawieniach hamulca ręcznego mattgadient.com/2013/06/12/…
janot
Dostaję błąd w niektórych plikach (dla mkv do mp4 i mp4 do mkv): Plik wyjściowy nr 0 nie zawiera żadnego strumienia. Czy ktoś ma pojęcie, co to oznacza?
PrimitiveNom

Odpowiedzi:

85

W czym problem z hamulcem ręcznym?

Gdy używasz hamulca ręcznego do konwersji z jednego formatu kontenera na inny (np. MKV na MP4 w twoim przypadku), hamulec ręczny ponownie zakoduje wideo. Zobacz także odpowiednie żądanie funkcji , które włączałoby przekazywanie wideo:

Przepraszamy, dodanie przejścia wideo nie jest planowane. HandBrake został zaprojektowany jako transkoder wideo. Nie został zaprojektowany w celu umożliwienia przejścia.

Tak więc, za każdym razem, gdy zmieniasz kontenery za pomocą Handbrake, Twój film zostanie ponownie zakodowany, co oznacza, że ​​a) wymaga czasu ib) może spowodować utratę jakości.

Czy muszę ponownie kodować? Czy nie mogłem po prostu zamienić pojemnika?

Ponieważ przekazywanie nie jest możliwe, zadaj sobie pytanie: Czy muszę ponownie kodować? Jeśli chcesz tylko zmienić kontener z MKV na MP4, zwykle nie musisz niczego kodować , wystarczy zmienić „zawijanie” wokół filmu. Nie traci to jakości i będzie to znacznie szybszy proces.

Możesz łatwo zamieniać kontenery za pomocą FFmpeg - wystarczy, że powiesz mu, aby skopiował strumienie wideo i audio:

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

Istnieją również narzędzia takie jak MP4Box, które mogą również tworzyć kontenery MP4 - to samo dotyczy MKV z MKVtoolnix .

Istnieje jednak duże zastrzeżenie: działa to tylko wtedy, gdy kodeki audio i wideo są obsługiwane w kontenerze docelowym (MP4), co ma miejsce na przykład w przypadku H.264 / H.265 i AAC, ale nie w wielu innych. Ponadto obsługa formatu napisów dla MP4 różni się od MKV i faktycznie jest dość ograniczona, więc to polecenie może się nie powieść.

Jeśli to polecenie nie działa i jeśli dane wejściowe używają niewłaściwych kodeków dla kontenera wyjściowego, prawdopodobnie będziesz musiał ponownie zakodować . W takim przypadku kodeki zostaną dostosowane do pojemnika wyjściowego.

Aby zrozumieć, dlaczego jest to konieczne, należy poznać różnicę między kodekami wideo a kontenerami . Pomoże ci to zrozumieć, dlaczego zmiana kontenerów działa i dlaczego kontenery MP4 i MKV mają tak naprawdę niewiele wspólnego z kodekami wideo.

Dlaczego zresztą kodowanie jest złe?

Nie można (zwykle) zachować pełnej jakości podczas kodowania filmu, który został już zakodowany. Dzieje się tak, ponieważ oryginał został już skompresowany przez wyrzucenie informacji, a poprzez powtórne wprowadzenie wprowadzasz utratę pokolenia .

Często chcesz ponownie kodować wideo, gdy na przykład zmieniają się jego wymiary lub potrzebujesz określonej prędkości bitów, aby wycisnąć strumień wideo lub oryginalny film używa kodeka, którego nie można odtworzyć z jakiegokolwiek powodu.

Tak więc, jeśli załadujesz wideo MKV do hamulca ręcznego i ponownie zakodujesz go za pomocą x264, koder H.264 używa hamulca ręcznego, przechowujesz go w pojemniku MP4, stracisz jakość bez względu na wszystko, chyba że ustawisz bitrate lub współczynnik jakości tak wysoki, że nie zobaczysz (naprawdę) różnicy. Ale wtedy rozmiar pliku również będzie większy.

W idealnym przypadku przekonwertowałbyś wideo na nieskompresowane wideo, które nie straci żadnej jakości, ale da ci pliki o wielkości kilkunastu gigabajtów, nawet na kilka minut materiału wideo.

Okej, ale naprawdę muszę ponownie zakodować!

Jeśli naprawdę musisz ponownie kodować, pamiętaj, aby nie ustawiać średniej szybkości transmisji, ale wybierz współczynnik stałej szybkości , który jest podobny do „stałej jakości”. Podobnie jak „zmienna przepływność” dla MP3: upewni się, że wydasz bity na potrzebne części wideo i poprawi ogólną jakość - przy tym samym rozmiarze pliku.

Zdrowe wartości CRF wynoszą od 19 do 24, gdzie niższy oznacza „lepszy”. Tak więc możesz spróbować z Współczynnikiem szybkości równym 19. Ponadto upewnij się, że ustawiłeś profil „Wysoki”, który umożliwia enkoderowi używanie wszystkich dzwonków i gwizdków oraz optymalizację jakości dla danej przepływności.

slhck
źródło
Dziękuję Ci! Wygląda na to, że tylko ty dbasz o to pytanie i pomogłeś mi, poszedłem za twoją radą i wydaje się, że jakość jest taka sama jak oryginału! :)
pomarańczowy
W przypadku niektórych plików mkv nie powiedzie się to (Nie można zapisać nagłówka pliku wyjściowego ... nieprawidłowy kodek). Użyj ffprobe -i file.mkv, aby zobaczyć, w jakim formacie jest a / v, prawdopodobnie będziesz musiał ponownie kodować wideo x264 i audio aac /
ac3
masz 100% pewności, że ponowne pakowanie plików nie spowoduje utraty jakości?
PrimitiveNom
1
@BallpointBen Niemożliwe, nie: github.com/HandBrake/HandBrake/issues/…
slhck
1
@Hashim Próbowałem wyjaśnić post zgodnie z żądaniem. A jeśli chodzi o twoje pytanie, ponieważ Hamulec ręczny nie pozwala na przejście, przejście z MP4 na MKV spowoduje utratę jakości. I to zajmie dużo czasu. Po prostu zrób ffmpeg -i input.mp4 -c copy output.mkvi powinieneś być w porządku.
slhck
4

To działa dla mnie bardzo dobrze. Poniżej znajduje się kod do konwersji wszystkich plików .mkv na .mp4 w systemie Windows.

  • Może być konieczne dodanie ffmpeg do ścieżki. możesz po prostu podać pełną ścieżkę do pliku wykonywalnego ffmpeg, D: \ apps \ ffmpeg \ bin \ ffmpeg.exe
  • Pobierz ffmpeg na Windows tutaj.
  • Sposób użycia: upuść na niego plik .mkv. Zajmie cały katalog.

Zapisz w pliku o nazwie convert.bat.

for %%a in ("*.mkv") do ffmpeg.exe -i "%%a" -vcodec copy -acodec copy "%%~na .mp4"
pause
MonkeyMagic
źródło
Działa jak marzenie.
Kit Johnson
Umieściłem to w folderze z programem ffmpeg.exe, a następnie zmieniłem nafor %%a in ("*.mkv") do %~dp0ffmpeg.exe -i "%%a" -vcodec copy -acodec copy "%%~na .mp4"
davidtbernal