Z własnego doświadczenia wynika, że jeśli nie chcesz absolutnie żadnej utraty jakości, to bezstratne jest to, czego szukasz.
Nie jestem pewien, avconv
ale wpisane polecenie wygląda identycznie jak to, co robię FFmpeg
. W FFmpeg
można przekazać parametr w ten sposób:
ffmpeg -i INPUT.mkv -c:v libx265 -preset ultrafast -x265-params lossless=1 OUTPUT.mkv
Większość x265
przełączników (opcje bez wartości) można określić w ten sposób (z wyjątkiem tych tylko z interfejsem CLI, które są używane tylko z x265
plikiem binarnym).
W tym miejscu chciałbym podzielić się moim doświadczeniem z x265
kodowaniem. Do większości filmów (WMV, MPEG lub AVC / H.264) używam crf=23
. x265
decyduje o pozostałych parametrach i zwykle wykonuje wystarczająco dobrą pracę.
Jednak często zanim zdecyduję się na transkodowanie wideo w całości, testuję moje ustawienia, konwertując niewielką część danego wideo. Oto przykład, załóżmy, że plik mkv ze strumieniem 0 to wideo, strumień 1 to dźwięk DTS, a strumień 2 to podtytuł:
ffmpeg -hide_banner \
-ss 0 \
-i "INPUT.mkv" \
-attach "COVER.jpg" \
-map_metadata 0 \
-map_chapters 0 \
-metadata title="TITLE" \
-map 0:0 -metadata:s:v:0 language=eng \
-map 0:1 -metadata:s:a:0 language=eng -metadata:s:a:0 title="Surround 5.1 (DTS)" \
-map 0:2 -metadata:s:s:0 language=eng -metadata:s:s:0 title="English" \
-metadata:s:t:0 filename="Cover.jpg" -metadata:s:t:0 mimetype="image/jpeg" \
-c:v libx265 -preset ultrafast -x265-params \
crf=22:qcomp=0.8:aq-mode=1:aq_strength=1.0:qg-size=16:psy-rd=0.7:psy-rdoq=5.0:rdoq-level=1:merange=44 \
-c:a copy \
-c:s copy \
-t 120 \
"OUTPUT.HEVC.DTS.Sample.mkv"
Zauważ, że linia odwrotnego ukośnika przerywa linię długiego polecenia, robię to, aby pomóc mi śledzić różne bity złożonego wejścia CLI. Zanim wyjaśnię to wiersz po wierszu, część, w której konwertujesz tylko niewielką część wideo, to druga linia i druga ostatnia linia: -ss 0
oznacza szukanie do 0 sekund przed rozpoczęciem dekodowania wejścia i -t 120
oznacza przestanie zapisywać na wyjściu po 120 sekundach. Możesz także użyć formatu czasu hh: mm: ss lub hh: mm: ss.sss.
Teraz linia po linii:
-hide_banner
zapobiega FFmpeg
wyświetlaniu informacji o kompilacji przy starcie. Po prostu nie chcę tego widzieć, kiedy przewijam konsolę w górę;
-ss 0
szuka 0 sekund przed rozpoczęciem dekodowania wejścia. Zauważ, że jeśli ten parametr jest podany po pliku wejściowym i przed plikiem wyjściowym, staje się on opcją wyjściową i każe ffmpeg
dekodować i ignorować dane wejściowe do x sekund, a następnie rozpocząć zapis do pliku wyjściowego. Jako opcja wprowadzania jest mniej dokładna (ponieważ wyszukiwanie nie jest dokładne w większości formatów kontenerów), ale prawie nie zajmuje czasu. Jako opcja wyjściowa jest bardzo precyzyjna, ale odkodowanie całego strumienia przed określonym czasem zajmuje dużo czasu, a do celów testowych nie chcesz tracić czasu;
-i "INPUT.mkv"
: Określ plik wejściowy;
-attach "COVER.jpg"
: Dołącz okładkę (miniaturę, plakat, cokolwiek) do wydruku. Okładka jest zwykle pokazywana w eksploratorach plików;
-map_metadata 0
: Skopiuj wszystkie metadane z wejścia 0, które w tym przykładzie jest tylko wejściem;
-map_chapters 0
: Skopiuj informacje o rozdziale (jeśli są obecne) z wejścia 0;
-metadata title="TITLE"
: Ustaw tytuł wideo;
-map 0:0 ...
: Mapuj strumień 0 wejścia 0, co oznacza, że chcemy, aby pierwszy strumień z wejścia został zapisany na wyjściu. Ponieważ ten strumień jest strumieniem wideo, jest to pierwszy strumień wideo na wyjściu , stąd specyfikator strumienia :s:v:0
. Ustaw tag języka na angielski;
-map 0:1 ...
: Podobnie jak w wierszu 8, zamapuj drugi strumień (dźwięk DTS) oraz ustaw jego język i tytuł (dla łatwiejszej identyfikacji przy wyborze z odtwarzaczy);
-map 0:2 ...
: Podobne do wiersza 9, z tym wyjątkiem, że ten strumień jest podtytułem;
-metadata:s:t:0 ...
: Ustaw metadane okładki. Jest to wymagane w przypadku formatu kontenera mkv;
-c:v libx265 ...
: Opcje kodeków wideo. Jest tak długi, że podzieliłem go na dwie linie. To ustawienie jest dobre dla wysokiej jakości rozmycia wideo (1080p) z minimalnym pasmowaniem w gradiencie (do którego x265 jest do bani). Najprawdopodobniej jest to przesada w przypadku płyt DVD i programów telewizyjnych oraz filmów z telefonu. To ustawienie zostało w większości skradzione z tego posta w Doom9 ;
crf=22:...
: Kontynuacja parametrów kodeka wideo. Zobacz wyżej wspomniany post na forum;
-c:a copy
: Kopiuj audio;
-c:s copy
: Kopiuj napisy;
-t 120
: Przestań zapisywać na wyjściu po 120 sekundach, co daje nam 2-minutowy klip do podglądu jakości transkodowania;
"OUTPUT.HEVC.DTS.Sample.mkv"
: Nazwa pliku wyjściowego. Nazwy moich plików oznaczam kodekiem wideo i podstawowym kodekiem audio.
Uff To jest moja pierwsza odpowiedź, więc jeśli coś mi umknęło, zostaw komentarz. Nie jestem ekspertem od produkcji wideo, jestem po prostu facetem, który jest zbyt leniwy, aby obejrzeć film, wkładając płytę do odtwarzacza.
PS. Być może to pytanie należy do kogoś innego, ponieważ nie jest ściśle związane z Uniksem i Linuksem.
--lossless
może faktycznie powiększyć plik, jeśli dekoduje poprzednio stratny kodek, a następnie szyfruje to, co dekodował bezstratnie. Jakość pozostanie dokładnie taka sama jak na wejściu.