LINUX.ORG.RU

Оптимизация размера mp4 файлов

 


1

1

Есть mp4-файлы, хочу чтобы они были меньше по размеру с минимальными патерями качества. В какую сторону смотреть и что почитать? Или может быть есть волшебный ключик которым сделает мне за^Wмечательно?

★★★★★

Последнее исправление: Debasher (всего исправлений: 1)

Не надо. С минимальными потерями качества (что-то около -crf 5, например) они станут больше по размеру, относительно исходника.

Lavos ★★★★★
()

Если файлы не исходные (в убервысоком битрейте и без хаков сжатия), то боженька тебя покарает. А так лучшее, чего можно добиться, например, с h264 — пресет пласибо и 2-проходный средний битрейт по настроению. Смотреть, когда обернётся в тыкву. В зависимости от контента ещё можно пресеты контентовые потыкать.

Вопрос, что для тебя минимальные потери: «ты не увидишь разницы при внимательном покадровом сравнении и отсутствие артефактов» или «подходит для обработки и повторного сжатия»

anonymous
()
Ответ на: комментарий от MyLittlePony

Можешь, конечно, снизить битрейт, но 5000 kb/s должно хватить на любое видео в FullHD при Placbo без видимых потерь (если не говорить о скрупулезном сравнении кадров)

MyLittlePony
()
Ответ на: комментарий от MyLittlePony

Скорее для 720p@30. У меня есть очень негативный опыт с тем пласибо. Можно попробовать h265 — при малом битрейте там потери меньше, как минимум. Он куда более ресурсоёмкий, однако если цель именно ужать — вполне себе вариант.

anonymous
()
Ответ на: комментарий от anonymous

Все эти прикидки зависят в первую очередь от контента, конечно.

anonymous
()

Не получится их уменьшить без потерь, там есть эффекты сжатия, времени и прочее

Так что лучше вообще не трогать

Правда есть кодек vp9 говорят меньше файлы при том же качестве

ism ★★★
()

Вначале посмотреть битрейты потоков с помощью ffprobe, затем сделать пробный прогон ffmpeg указав битрейт ниже. Посмотреть что получилось, если качество не устраивает, или можно пожертвовать еще, то, соответственно, битрейт увеличить или уменьшить.

Можно пережать другим кодеком, оставить один аудио-канал, уменьшить битрейт аудио, поменять контейнер. Пробуй что тебе больше подойдет.

foxy_ant ★★
()

Всем спасибо, буду играться!

Debasher ★★★★★
() автор топика

с минимальными патерями качества

Не получится.

Файлы у тебя скорее всего не исходники, поэтому ты их пережимаешь второй раз, добавляя ещё больше потерь. Они уже сжаты с потерями. Сделать нормально можно только добыв исходники и сжав с нужными параметрами с них (а не с того, что у тебя есть).

Если очень хочется, а требования по качеству всё же не столь жёсткие, то всё просто:

ffmpeg -i originalfile.mp4 -c:a copy -c:v h264 -crf 21 -preset slower newfile.mp4

Играйся с параметром -crf (то есть, ставь вместо 21 более высокие и более низкие цифры), пока не получишь результат, которые тебя устроит. Чем ниже число, тем выше качество и большего размера файл выйдет. Чем выше число, тем соответственно наоборот меньше получится файл, но и качество хуже. То есть, если качество устраивает — увеличивай цифру ещё на единичку и проверяй. До тех пор, пока не наткнёшься на картинку, которая уже не будет удовлетворять. Ну и вернись к последней удовлетворяющей. Используй всегда это значение для «вот такого» (то есть, устраивающего лично тебя) качества. На мой взгляд, оптимальными являются значения от 20 до 23. В зависимости от целей, я использую, как правило, в этих пределах. Но у тебя могут быть совершенно другие требования, и вполне может быть тебя устроит 28, например. Ещё выше начинается уже совсем (опять же, на мой взгляд) всё плохо.

Двухпроходное кодирование бессмысленно, если тебе не нужно задать точный битрейт. Оно существует лишь для этого. Если тебе нужен «минимально возможный при таком-то визуальном качестве картинки», crf — то, что тебе нужно. Вопреки распространённому заблуждению, двухпроходное кодирование не улучшает соотношение объём/качество по сравнению с crf. Они идентичны. Заблуждение идёт от того, что есть ещё однопроходное кодирование с заданным битрейтом (а не crf), вот его использовать не надо.

То есть, при двухпроходном кодировании ты, грубо говоря, говоришь «хочу максимально возможное качество при вот таком точно битрейте». Соответственно, файл получится предсказуемого размера, но такого качества, которое в него влезет, не выше. При CRF же ты говоришь «хочу вот такое качество при минимально возможном битрейте». Получаешь файл несколько менее предсказуемого размера, но зато того качества, которого хотел. Два файла одинакового объёма, полученные с использованием того и другого способа, будут одинаковы по качеству.

Вместо пресета slower можно использовать, конечно, placebo. Но это очень сильно увеличит время кодирования и очень слабо повлияет на объём файла.

Прошу заметить, что при использовании crf пресет не влияет на качество картинки абсолютно никак. Он влияет лишь на объём файла при том же качестве ценой большего времени на кодирование.

И да, принципиально ли, чтобы в результате было именно mp4? А то есть кодек x265 (HEVC), который при примерно том же качестве картинки даёт объём файла меньше где-то на 40%. Но если нужна поддержка в браузере прямо сейчас или же поддержка железными плеерами (особенно старыми), то конечно он не годится.

P.S. Ах да. Пока играешься с crf в поисках устраивающего значения, используй preset fastest. На картинку-то он не влияет. А когда найдёшь нужное значение, жми уже «чистовик» со slower (ну или даже placebo, если хочется).

Psych218 ★★★★★
()
Последнее исправление: Psych218 (всего исправлений: 3)
Ответ на: комментарий от Psych218

Спасибо за такой большой и познавательный пост!

И да, принципиально ли, чтобы в результате было именно mp4?

Да, нужно воспроизведение на самых разных мобилках.

Debasher ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.