Исходя из моего собственного опыта, если вы хотите абсолютно без потерь в качестве, --lossless - это то, что вы ищете.
Не уверен, avconv
но введенная вами команда выглядит идентично тому, что я делаю FFmpeg
. В FFmpeg
вы можете передать параметр , как это:
ffmpeg -i INPUT.mkv -c:v libx265 -preset ultrafast -x265-params lossless=1 OUTPUT.mkv
Большинство x265
ключей (опции без значения) могут быть указаны следующим образом (кроме тех, которые предназначены только для CLI, они используются только с x265
двоичным кодом напрямую).
В связи с этим я бы хотел поделиться своим опытом с x265
кодированием. Для большинства видео (будь то WMV, или MPEG, или AVC / H.264) я использую crf=23
. x265
определяет остальные параметры и обычно выполняет достаточно хорошую работу.
Однако часто, прежде чем я решу полностью перекодировать видео, я проверяю свои настройки, конвертируя небольшую часть рассматриваемого видео. Вот пример, предположим, что файл mkv с потоком 0 является видео, поток 1 является аудио DTS, а поток 2 является субтитром:
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"
Обратите внимание, что обратная косая черта прерывается в длинной команде, я делаю это, чтобы помочь мне отслеживать различные биты сложного ввода CLI. Прежде чем я объясню это построчно, часть, где вы конвертируете только небольшую часть видео, является второй строкой и второй последней строкой: -ss 0
означает поиск до 0 секунд перед тем, как начать декодирование ввода, и -t 120
означает прекращение записи в вывод через 120 секунд. Вы также можете использовать форматы времени чч: мм: сс или чч: мм: сс.ссс.
Теперь построчно:
-hide_banner
не позволяет FFmpeg
показывать информацию о сборке при запуске. Я просто не хочу видеть это, когда прокручиваю вверх в консоли;
-ss 0
ищет 0 секунд до начала декодирования ввода. Обратите внимание, что если этот параметр задан после входного файла и перед выходным файлом, он становится опцией вывода и указывает ffmpeg
декодировать и игнорировать ввод до x секунд, а затем начать запись в вывод. Как вариант ввода он менее точен (поскольку поиск не точен в большинстве форматов контейнеров), но почти не занимает времени. Как вариант вывода, он очень точен, но занимает много времени для декодирования всего потока до указанного времени, и для целей тестирования вы не хотите тратить время;
-i "INPUT.mkv"
: Укажите входной файл;
-attach "COVER.jpg"
: Прикрепите обложку (миниатюру, плакат, что угодно) к выводу. Обложка обычно отображается в файлах;
-map_metadata 0
: Скопируйте все метаданные из ввода 0, который в данном примере является просто вводом;
-map_chapters 0
: Скопировать информацию главы (если имеется) со входа 0;
-metadata title="TITLE"
: Установить заголовок видео;
-map 0:0 ...
: Сопоставить поток 0 ввода 0, что означает, что мы хотим, чтобы первый поток ввода был записан в вывод. Так как этот поток является видеопоток, это первый видео поток в выходе , следовательно , поток спецификатор :s:v:0
. Установите его языковой тег на английский;
-map 0:1 ...
: Аналогично строке 8 сопоставьте второй поток (аудио DTS) и установите его язык и заголовок (для упрощения идентификации при выборе из проигрывателей);
-map 0:2 ...
: Аналогично строке 9, за исключением того, что этот поток является субтитром;
-metadata:s:t:0 ...
: Установить метаданные для обложки. Это требуется для формата контейнера mkv;
-c:v libx265 ...
: Параметры видео кодека. Это так долго, что я разбил его на две строки. Эта настройка хороша для высококачественного синего видео (1080p) с минимальной полосой в градиенте (что при х265 хреново). Скорее всего, это перебор для DVD, телешоу и телефонных видео. Этот параметр в основном украден из этого поста в Doom9 ;
crf=22:...
: Продолжение параметров видеокодека. Смотрите сообщение на форуме, упомянутое выше;
-c:a copy
: Скопировать аудио;
-c:s copy
: Копировать субтитры;
-t 120
: Прекратить запись на выход через 120 секунд, что дает нам 2-минутный клип для предварительного просмотра качества транскодирования;
"OUTPUT.HEVC.DTS.Sample.mkv"
: Имя выходного файла. Я помечаю свои имена файлов видеокодеком и основным аудиокодеком.
Уф. Это мой первый ответ, поэтому, если я что-то пропустил, оставьте комментарий. Я не эксперт по производству видео, я просто парень, которому лень смотреть фильм, вставляя диск в плеер.
PS. Возможно, этот вопрос относится к чему-то другому, поскольку он не сильно связан с Unix и Linux.
--lossless
может на самом деле увеличить файл, если он декодирует ранее кодек с потерями, а затем включает то, что он декодировал без потерь. Качество останется таким же, как на входе.