Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

FFMPEG command to crop and transpose video comes out zoomed in bad quality

I'm trying to convert an mp4 video with dimensions usually 960x720 into a sqaure 480:480 video but it comes out looking squished usually, the command is

"-y -i %s -vf crop=480:480,transpose=%d -threads 5 -metadata:s:v rotate=0 -c:v libx264 -crf 27 -preset ultrafast -c:a copy -bsf:a aac_adtstoasc %s";

Am I missing something, do I need to down scale first or something?

**EDIT adding full console output. The ffmpeg command is updated, but the goal still remains the same, take an arbitrary video and square crop it

07-14 22:30:32.813: D/ffmpeg(30354): -y -i /data/data/com.myapp.app/cache:temp/i7h4ajm0nim1mbcnrqotvrhhsc.mp4 -vf scale=iw*sar:ih,transpose=1 -threads 5 -metadata:s:v rotate=0 -c:v libx264 -crf 27 -preset ultrafast -c:a copy -bsf:a aac_adtstoasc -aspect 1:1 /data/data/com.myapp.app/cache:temp/p1t3bhs0oa3lpqa67g5i9ninm9.ts
07-14 22:30:32.903: D/ffmpeg(30354): new time reamining 9283
07-14 22:30:32.913: D/FFmpeg(30354): Running publishing updates method
07-14 22:30:35.963: D/ffmpeg(30354): WARNING: linker: /data/data/com.myapp.app/files/ffmpeg has text relocations. This is wasting memory and prevents security hardening. Please fix.
07-14 22:30:35.963: D/ffmpeg(30354): ffmpeg version n2.4.2 Copyright (c) 2000-2014 the FFmpeg developers
07-14 22:30:35.963: D/ffmpeg(30354):   built on Jun  3 2015 21:56:01 with gcc 4.8 (GCC)
07-14 22:30:35.963: D/ffmpeg(30354):   configuration: --target-os=linux --cross-prefix=/Users/Brian1/development/ffmpeg-android/toolchain-android/bin/arm-linux-androideabi- --arch=arm --cpu=cortex-a8 --enable-runtime-cpudetect --sysroot=/Users/Brian1/development/ffmpeg-android/toolchain-android/sysroot --enable-pic --enable-small --enable-libx264 --enable-pthreads --disable-muxers --enable-muxer=mpegts --enable-muxer=mp4 --disable-demuxers --enable-demuxer=mpegts --enable-demuxer=mov --enable-demuxer=mpeg --enable-demuxer=mp4 --disable-debug --disable-decoders --enable-decoder=h264 --enable-decoder=aac --disable-devices --disable-encoders --enable-encoder=libx264 --disable-network --disable-ffserver --enable-version3 --enable-hardcoded-tables --disable-ffplay --disable-ffprobe --enable-gpl --enable-yasm --disable-doc --disable-shared --enable-static --pkg-config=/Users/Brian1/development/ffmpeg-android/ffmpeg-pkg-config --prefix=/Users/Brian1/development/ffmpeg-android/build/armeabi-v7a-neon --extra-cflags='-I/Users/Brian1/development/ffmpeg-android/toolchain-android/include -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fstack-protector-all -mfpu=neon' --extra-ldflags='-L/Users/Brian1/development/ffmpeg-android/toolchain-android/lib -Wl,-z,relro -Wl,-z,now -pie' --extra-libs=-lm --extra-cxxflags=
07-14 22:30:35.963: D/ffmpeg(30354):   libavutil      54.  7.100 / 54.  7.100
07-14 22:30:35.963: D/ffmpeg(30354):   libavcodec     56.  1.100 / 56.  1.100
07-14 22:30:35.963: D/ffmpeg(30354):   libavformat    56.  4.101 / 56.  4.101
07-14 22:30:35.963: D/ffmpeg(30354):   libavdevice    56.  0.100 / 56.  0.100
07-14 22:30:35.963: D/ffmpeg(30354):   libavfilter     5.  1.100 /  5.  1.100
07-14 22:30:35.963: D/ffmpeg(30354):   libswscale      3.  0.100 /  3.  0.100
07-14 22:30:35.963: D/ffmpeg(30354):   libswresample   1.  1.100 /  1.  1.100
07-14 22:30:35.963: D/ffmpeg(30354):   libpostproc    53.  0.100 / 53.  0.100
07-14 22:30:35.963: D/ffmpeg(30354): Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/data/data/com.myapp.app/cache:temp/i7h4ajm0nim1mbcnrqotvrhhsc.mp4':
07-14 22:30:35.963: D/ffmpeg(30354):   Metadata:
07-14 22:30:35.963: D/ffmpeg(30354):     major_brand     : mp42
07-14 22:30:35.963: D/ffmpeg(30354):     minor_version   : 0
07-14 22:30:35.963: D/ffmpeg(30354):     compatible_brands: isommp42
07-14 22:30:35.963: D/ffmpeg(30354):     creation_time   : 2015-07-15 05:30:32
07-14 22:30:35.963: D/ffmpeg(30354):   Duration: 00:00:02.75, start: 0.000000, bitrate: 9315 kb/s
07-14 22:30:35.963: D/ffmpeg(30354):     Stream #0:0(eng): Video: h264 (avc1 / 0x31637661), yuv420p, 960x720, 10062 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 180k tbc (default)
07-14 22:30:35.963: D/ffmpeg(30354):     Metadata:
07-14 22:30:35.963: D/ffmpeg(30354):       rotate          : 90
07-14 22:30:35.963: D/ffmpeg(30354):       creation_time   : 2015-07-15 05:30:32
07-14 22:30:35.963: D/ffmpeg(30354):       handler_name    : VideoHandle
07-14 22:30:35.963: D/ffmpeg(30354):     Side data:
07-14 22:30:35.963: D/ffmpeg(30354):       displaymatrix: rotation of -90.00 degrees
07-14 22:30:35.963: D/ffmpeg(30354):     Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 151 kb/s (default)
07-14 22:30:35.963: D/ffmpeg(30354):     Metadata:
07-14 22:30:35.963: D/ffmpeg(30354):       creation_time   : 2015-07-15 05:30:32
07-14 22:30:35.963: D/ffmpeg(30354):       handler_name    : SoundHandle
07-14 22:30:35.963: D/ffmpeg(30354): [libx264 @ 0xb6808800] using SAR=4/3
07-14 22:30:35.963: D/ffmpeg(30354): [libx264 @ 0xb6808800] using cpu capabilities: none!
07-14 22:30:35.963: D/ffmpeg(30354): [libx264 @ 0xb6808800] profile Constrained Baseline, level 3.1
07-14 22:30:35.963: D/ffmpeg(30354): [adts @ 0xb685b000] Using AVStream.codec.time_base as a timebase hint to the muxer is deprecated. Set AVStream.time_base instead.
07-14 22:30:35.963: D/ffmpeg(30354): Output #0, mpegts, to '/data/data/com.myapp.app/cache:temp/p1t3bhs0oa3lpqa67g5i9ninm9.ts':
07-14 22:30:35.963: D/ffmpeg(30354):   Metadata:
07-14 22:30:35.963: D/ffmpeg(30354):     major_brand     : mp42
07-14 22:30:35.963: D/ffmpeg(30354):     minor_version   : 0
07-14 22:30:35.963: D/ffmpeg(30354):     compatible_brands: isommp42
07-14 22:30:35.963: D/ffmpeg(30354):     encoder         : Lavf56.4.101
07-14 22:30:35.963: D/ffmpeg(30354):     Stream #0:0(eng): Video: h264 (libx264), yuv420p, 720x960 [SAR 4:3 DAR 1:1], q=-1--1, 29.97 fps, 90k tbn, 29.97 tbc (default)
07-14 22:30:35.963: D/ffmpeg(30354):     Metadata:
07-14 22:30:35.963: D/ffmpeg(30354):       handler_name    : VideoHandle
07-14 22:30:35.963: D/ffmpeg(30354):       creation_time   : 2015-07-15 05:30:32
07-14 22:30:35.963: D/ffmpeg(30354):       rotate          : 0
07-14 22:30:35.963: D/ffmpeg(30354):       encoder         : Lavc56.1.100 libx264
07-14 22:30:35.963: D/ffmpeg(30354):     Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, 151 kb/s (default)
07-14 22:30:35.963: D/ffmpeg(30354):     Metadata:
07-14 22:30:35.963: D/ffmpeg(30354):       creation_time   : 2015-07-15 05:30:32
07-14 22:30:35.963: D/ffmpeg(30354):       handler_name    : SoundHandle
07-14 22:30:35.963: D/ffmpeg(30354): Stream mapping:
07-14 22:30:35.963: D/ffmpeg(30354):   Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
07-14 22:30:35.963: D/ffmpeg(30354):   Stream #0:1 -> #0:1 (copy)
07-14 22:30:35.963: D/ffmpeg(30354): Press [q] to stop, [?] for help
07-14 22:30:35.963: D/ffmpeg(30354): frame=   17 fps=0.0 q=27.0 size=       0kB time=00:00:00.36 bitrate=   0.0kbits/s    
07-14 22:30:35.963: D/ffmpeg(30354): frame=   33 fps= 32 q=27.0 size=     164kB time=00:00:01.15 bitrate=1163.1kbits/s    
07-14 22:30:35.963: D/ffmpeg(30354): frame=   46 fps= 30 q=29.0 size=     213kB time=00:00:01.33 b
like image 726
Brian Avatar asked Jun 25 '15 06:06

Brian


1 Answers

You can try this (takes care of cropping AND downsizing)...

ffmpeg -i input.file -s 480x480 -vf crop=480:480,setdar=1:1,setsar=1:1 output.mp4

-s will set scale (video canvas area)
crop=480:480 will crop from centre.. if you need from specific use: crop=480:480:pos-X:pos-Y
setdar will set Display Aspect Ratio
setsar will set Sample Aspect Ratio

Results: (screen grabbed MP4 stills via MPC-Home Cinema)

enter image description here

like image 69
VC.One Avatar answered Nov 02 '22 22:11

VC.One