Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ffmpeg - how to apply filters without losing quality

Tags:

ffmpeg

Here is a simple request, it has an input, output, and two watermarks. From what I gathered I can't apply -codec copy because I'm using a filter.

ffmpeg -i input.mp4 -i wm-bl.png -i wm-br.png -filter_complex "overlay=x=0:y=H-h,overlay=x=W-w:y=H-h" output.mp4

This does the trick, as far as watermarking is concerned, but the output is compressed into half the original file size.

Is it possible to watermark without losing video quality?

like image 642
Mickey Avatar asked Dec 06 '13 23:12

Mickey


People also ask

What is VF in ffmpeg?

-vf is used for simple filtergraphs (one input, one output), and -filter_complex is used for complex filtergraphs (one or more inputs, one or more outputs). Using -filter_complex will allow you omit the movie multimedia source filter and have a shorter command.

What can Ffmpeg do?

ffmpeg is a command-line tool that converts audio or video formats. It can also capture and encode in real-time from various hardware and software sources such as a TV capture card. ffplay is a simple media player utilizing SDL and the FFmpeg libraries.


1 Answers

You must re-encode to perform any filtering

Therefore any attempt at stream copying while filtering will be ignored. This is why -codec copy does nothing for you.

Lossy, but looks lossless

Alternatively you can use proper encoding settings that look "visually lossless", but technically are not truly lossless. Example for H.264:

ffmpeg -i input -codec:v libx264 -crf 18 -preset slow -vf format=yuv420p out.mp4
  • -crf controls quality: range is a log scale of 0-51, 0 is lossless, ~18 is often considered visually lossless, and 23 is default.

  • -preset controls encoding speed and therefore compression efficiency: ultrafast, superfast, veryfast, faster, fast, medium (the default), slow, slower, veryslow.

  • -vf format=yuv420p uses a compatible chroma subsampling required by most players.

Using a lossless format

Although you must re-encode for filtering it does not mean that you have to lose quality. You can use a lossless encoder, such as:

  • -codec:v libx264 -crf 0 -preset veryslow
  • -codec:v ffv1

The output file size can be huge–generally much bigger than your input file.

Use CSS or your player to add the watermark

Avoid encoding completely and just deal with the watermark with CSS or with your HTML5 video player.

Also see

  • FFmpeg Wiki: H.264
like image 112
llogan Avatar answered Oct 05 '22 03:10

llogan