FFMPEG разумные значения по умолчанию

Я использую ffmpeg для добавления водяных знаков к видео в формате PNG с использованием vfilters, например так:

ffmpeg -i 26.wmv -vcodec libx264 -acodec copy -vf "movie=logo.png [watermark]; [in][watermark] overlay=10:10 [out]" 26_w.mkv

Однако все входные файлы имеют разное качество / битрейт, и я хочу, чтобы выходные файлы были такого же качества / битрейта, что и входные файлы. Как бы я этого достиг? Кроме того, я почти ничего не знаю о ffmpeg, так есть ли какие-либо параметры, которые было бы разумно установить, чтобы обеспечить хорошее качество: соотношение размеров файлов?

2 ответа

Решение

Обычно желание, чтобы результат был "того же качества", что и исходные данные, - это предполагаемая вещь, которую люди всегда будут хотеть. К сожалению, это невозможно при использовании кодера с потерями, и даже кодеры без потерь могут не обеспечивать такое же качество из-за преобразования цветового пространства, подвыборки цветности и других проблем. Тем не менее, вы можете получить визуально без потерь (или почти) выходных данных при использовании энкодера с потерями; Это означает, что это может выглядеть так, как если бы результат был одинаковым для ваших глаз, но технически это не так. Кроме того, попытка использовать тот же битрейт и другие параметры, что и на входе, скорее всего, не даст того, чего вы хотите.

Пример:

ffmpeg -i input -codec:v libx264 -preset medium -crf 24 -codec:a copy output.mkv

Два варианта для вас настроить -crf а также -preset, CRF (коэффициент постоянной скорости) - ваш уровень качества. Чем ниже значение, тем выше качество. Предварительная установка представляет собой набор параметров, которые дадут конкретную скорость кодирования против компромисса сжатия. Более медленная предустановка будет кодировать медленнее, но обеспечит более высокое сжатие (сжатие - это качество на размер файла). Основное использование:

  1. Используйте самое высокое значение crf, которое по-прежнему дает желаемое качество.
  2. Используйте самый медленный пресет, к которому у вас есть терпение (см. x264 --help для списка предустановок и игнорировать предустановки плацебо, так как это шутка).
  3. Используйте эти настройки для остальных ваших видео.

Другие заметки:

  • Вам не нужно кодировать видео целиком, чтобы проверить качество. Вы можете использовать -ss а также -t варианты выбора случайного раздела для кодирования, такие как -ss 30-t 60 который пропустит первые 30 секунд и создаст 60-секундный выход.

  • В этом примере аудио копируется потоком, а не перекодируется.

  • Помните, что каждый кодировщик отличается и то, что работает для x264, не будет применяться к другим кодировщикам.

  • добавлять -pix_fmt yuv420p если вывод не воспроизводится в немых плеерах, таких как QuickTime.

Также см:

Вот набор очень хороших примеров http://ffmpeg.org/ffmpeg.html

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

<?php 
$filename = "./upload/".$_GET['name'].".".substr(strrchr($_FILES['Filedata']['name'], '.'), 1);
move_uploaded_file($_FILES['Filedata']['tmp_name'], $filename);
chmod($filename, 0777);
exec ("ffmpeg -i ".$filename." -ar 22050 -b 200 -r 12 -f flv -s 500x374 upload/".$_GET['name'].".flv");
exec ("ffmpeg -i ".$filename." -an -ss 00:00:03 -an -r 1 -s 300x200 -vframes 1 -y -pix_fmt rgb24 upload/".$_GET['name']."%d.jpg");
?>
Другие вопросы по тегам