简体   繁体   中英

ffmpeg status & quality / cuda (CPU/GPU)

ffmpeg am i doing it right?

So much time has passed since i use ffmpeg to convert clips on my home web server, now that mp4 (h264 & aac) is the current overall standard (works on every console, smartphone, smartTV, pc) i decided to convert my old clips from various digital cameras to to this new container/codecs.

  1. less space & the same quality.
  2. compatibility
  3. support for tags (subler for mac)

after some research i opted for ffmpeg because of various reasons

  1. commandline (i made my simple web interface with default settings wich i execute with php's exec)
  2. the quality/size amount

I read that many expensive video conversion softwares are not able to handle low bitrate videos properly. I also tested some of them and personally i could not find the proper export settings or i was not impressed by the results... some had fixed default export setings, most had a lower video quality at the same filesize. ffmpeg allows me to set the -crf (18-24 usually) and -preset (veryslow, fast..) witch allows me to reduce the filesize drastically mantaining the same visible quality.

Said that i'm using the preset at veryslow.(there is also placebo but the final video file is only 1% smaller in size).

And here is the command i use

ffmpeg
-y //overwrite the file if it exists

-i INPUTFILE // replace with the input file

-metadata title=THETITLE // set a nice title, visible on modern devices
-metadata date=THEDATE // set a nice title, visible on modern devices

-c:v libx264 // use the h264 codec
 -crf 21 // try different numbers between 18-26
 -preset veryslow // placebo,slow,fast,ultrafast==big file 
 -tune film // tune it a little
 -pix_fmt yuv420p // preferred on most modern devices
 -profile:v main // preferred on most modern devices
 -level 3.1 // preferred on most modern devices 
 -refs 4 // preferred on most modern devices

-c:a libfdk_aac // use aac
 -metadata:s:a language=eng // set a language, visible on modern devices 
 -b:a 128k // audio bitrate 128k is like mp3 192k
 -ar 48000 // 44100 ... whatever
 -ac 2 // audiochannels
 -movflags +faststart //move the metadata in the front of the video so it loads faster

OUTPUTFILE

some camcorder clips with m2ts already have the avc/h264 compatible codec so i just copy the stream. some have the ac3/dolby sorround audio. I convert the audio but keep the ac3 as second audio track mapping the ffmpeg streams.this allows me to watch the mp4 on browsers and mobile devices but i'm able to keep the surround sound to playback on some tv's, advanced media players or devices like apple tv.

not that i'm not happy with the speed (using quad core's) but i recently read again about cuda opencl and there is also the simple fact that i'm not using other converters than ffmpeg since alot of time.

Is ffmpeg (with the setting i use) a good converter to keep the same video quality than the source reducing the space occupied by and average of 30-40% ?

Is GPU conversion really that bad (cuda .. testing a gtx970)? it would be nice to add some more speed to the conversions by using both the gpu and the cpu..but for my understanding they cannot work together??? and using only gpu is a drastical quality loss...cpu si more precise, gpu is faster in calculation are too imprecise from what i read.. so expensive softwares use cuda only for preview purpose... right?

Is ffmpeg or another software compatible with CPU+GPU encoding? i really don't remember where, but i read that the ffmpeg is not a good videoconverter.

i'm really happy with the size/quality, i gained an average of 30% in space with no visible quality loss. With some extra parameters i can adjust some really old analog videos that are deinterlaced in a really bad way.

maybe i could gain more size/quality with another software???

note: i like ffmpeg.it's free and it has commandline so i can create my own interface with php html & js and use it on various machines without the need to install it in every device i use. i uplad the idevice clips directly to the ffmpeg server.

btw.: explain the downvotes...

EDIT:

@talonmies ...cuda tag removed :

http://www.nvidia.com/object/cuda_home_new.html

CUDA® is a parallel computing platform and programming model invented by NVIDIA. It enables dramatic increases in computing performance by harnessing the power of the graphics processing unit (GPU). With millions of CUDA-enabled GPUs sold to date, software developers, scientists and researchers are finding broad-ranging uses for GPU computing with CUDA. Here are a few examples: - See more at: http://www.nvidia.com/object/cuda_home_new.html#sthash.dEYaqae7.dpuf

isn't cuda the programming model that a theoretical ffmpeg library should support to handle GPU encoding on nvidia cards like the gtx 970?? like the badaboom software http://www.geforce.com/games-applications/pc-applications/badaboom-media-converter .

Is ffmpeg (with the setting i use) a good converter to keep the same video quality than the source reducing the space occupied by and average of 30-40% ?

There are many factors to consider, but as a broad generalization you may be able to achieve a "visually lossless or nearly-so-but-most-users-can't-tell, but not technically lossless" output that is also smaller than the input. Start with ~ -crf 18 , then increase it until you reach the highest value that still provides an acceptable quality. Use that value for the rest of your encoding.

If it is too slow use a faster -preset .

See FFmpeg Wiki: H.264 Video Encoding Guide for more info.

Is ffmpeg or another software compatible with CPU+GPU encoding?

  • FFmpeg supports nvenc . Get NVIDIA Video Coding SDK then compile ffmpeg with --enable-nonfree --enable-nvenc . It will likely be slower than x264 when providing a similar quality, but it could be useful if your CPU is already occupied.

  • x264 can support OpenCL ( --opencl option) for lookahead, and maybe some other stuff, but it may not be worth using and could even be slower. You'll just have to try it and compare; assuming you have compatible hardware.

  • Encoders that claim to use the "(GP)GPU" in some way are often slower and/or lower quality than normal x264.

i read that the ffmpeg is not a good videoconverter

Without any reasons given it sounds like an unsubstantiated opinion.

Is ffmpeg (with the setting i use) a good converter to keep the same video quality than the source reducing the space occupied by and average of 30-40% ?

Typically it is, in this case you're using libx264 for the video conversion, try it and see. Maybe try different -crf values. Remember that this conversion [unless crf is a very low value] will be lossy.

Is GPU conversion bad? It's probably not bad, depending on how you use it. FFmpeg doesn't really support any [from the command line] hardware GPU decoding/encoding, AFAIK.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM