I need to convert flv video into mp4 video, so I used this command:

ffmpeg -i input.flv -c -vcodec libx264 -acodec copy output.mp4

But output video has little bit worse video quality, how can I fix it?

MP4 info (output):

  • video: 472kb/s bitrate, 680*480, 24 FPS
  • audio: 112kb/s bitrate, 44.1 kHz, mpeg audio, stereo

FLV info (input):

  • video: 1500kb/s bitrate, 680*480, 24 FPS
  • audio: 112kb/s bitrate, 44.1 kHz, mpeg audio, stereo


I tried with -crf 18 and this is result (colors of output are more bright and look at that yellow line on the cap, on the output image that yellow line contains something like noise).





  • Add -crf 20 ..
    – Gyan
    Commented Jun 12, 2018 at 9:09
  • 1
    @Gyan why 20? 23 is default, right? And 0 is lossless, so why no 0?
    – tomsk
    Commented Jun 12, 2018 at 9:11
  • 1
    0 output isn't compatible with most players. Low CRF offers diminishing returns. 18 is considered visually lossless, but you don't need to try that first.
    – Gyan
    Commented Jun 12, 2018 at 9:20
  • 1
    Not sync directly, but timestamp fidelity and drop/dup decisions if source timebase and output timebase have much different resolutions.
    – Gyan
    Commented Jun 14, 2018 at 5:27
  • 1
    As far as the color is concerned, looks like the source is full range and the output is flagged or treated as limited range.
    – Gyan
    Commented Jun 14, 2018 at 5:27

2 Answers 2


Lossy codecs such as x264 degrade the image quality by design, if you don't want to lose image quality you either have to use a lossless codec or better yet, not re-encode at all.

I assume the source material is either H.264 or MPEG-2, so the best solution in your case would be to simply copy all the streams into the new container:

ffmpeg -i input.flv -c copy output.mp4

Here's the command for using x264's lossless mode if you have to re-encode for whatever reason:

ffmpeg -i input.flv -c:a copy -c:v libx264 -crf 0 output.mp4

Please higher your -minrate, -maxrate, -bufsize and study its codec. Download the Better container for video codec and audio codec separately. encode the codec in these containers but follow these steps:

1. Download the audio and video separately. you can do this by adding -vn and -an on the output command line. -vn means 'no video' while -an means 'no audio'. After that, study the codec of video or audio, and encode it to its better container... Here are the best container for modern codecs.

"Audio/Video codec"

*AAC/H264 is better on (TS)
*OPUS is better on (MKV)
*VP9 is better on (AVI)

2. After downloading the video/audio separately, you need to merge them together of course. Please include your said -minrate, -maxrate, and -bufsize. Don't forget to study your codecs and join them together with these containers:


*Mixing VP9 and OPUS is better on (MKV)
*Mixing H264 and AAC is better on (MOV)
*otherwise most incompatible codec is better on (MKV)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.