-crf 18
and -qscale:a 6
so as not to greatly damage the original quality.net.bramp.ffmpeg
package in Java, you can apply CRF and Audio Quality Sacle as follows.FFmpegOutputBuilder output = new FFmpegOutputBuilder()
.setConstantRateFactor(18)
.setAudioQuality(6)
.setFilename(extractedFile.getPath());
-filesize: 31.4MB
ffprobe test_origin.mp4
Duration: 00:02:00.04, start: 0.000000, bitrate: 2091 kb/s
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 192 kb/s (default)
-crf
option is not given Duration: 00:02:00.00, start: 0.000000, bitrate: 1781 kb/s
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
Duration: 00:02:00.00, start: 0.000000, bitrate: 1956 kb/s
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
Duration: 00:02:00.00, start: 0.000000, bitrate: 2143 kb/s
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
Duration: 00:02:00.00, start: 0.000000, bitrate: 2345 kb/s
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
Duration: 00:02:00.00, start: 0.000000, bitrate: 2829 kb/s
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
Duration: 00:02:00.00, start: 0.000000, bitrate: 33004 kb/s
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
ffmpeg
consumes 100% of CPU resources, there can be a lot of problems.ffmpeg
, but it can be controlled indirectly through -threads
option.ffmpeg -y -v error -ss 01:10:30 -t 120 \
-i /Users/user/Movies/a6fd876f-72db-11ec-9990-246e963a41ed.mp4 \
-crf 18 -qscale:a 6 \
/var/folders/9w/wbdl0s1s67vc1rv789307n9h0000gn/T/video-11194128045073791782/shortclip-4230-4350_a6fd876f-72db-11ec-9990-246e963a41ed.mp4
ffmpeg -y -v error -ss 01:10:30 -t 120 \
-i /Users/user/Movies/a6fd876f-72db-11ec-9990-246e963a41ed.mp4 \
-crf 18 -qscale:a 6 -threads 7 \
/var/folders/9w/wbdl0s1s67vc1rv789307n9h0000gn/T/video-14701788610086880799/shortclip-4230-4350_a6fd876f-72db-11ec-9990-246e963a41ed.mp4
net.bramp.ffmpeg
package in Java, you can calculate and apply threads as follows.int cores = Runtime.getRuntime().availableProcessors();
FFmpegOutputBuilder output = new FFmpegOutputBuilder()
.setConstantRateFactor(FFMPEG_OUTPUT_CRF)
.setAudioQuality(FFMPEG_AUDIO_QUALITY_SCALE)
.addExtraArgs("-threads", String.valueOf((int)Math.floor(cores * 0.7)))
.setFilename(extractedFile.getPath());
The order in which the
-threads
options are added can be a problem.
For example,ffmpeg -i input.mp4 -threads 4 output.mp4
works with the-threads
option, but
Forffmpeg -threads 4 -i input.mp4 output.mp4
, the-threads
option does not work properly.