-
-
Save nikhan/26ddd9c4e99bbf209dd7 to your computer and use it in GitHub Desktop.
ffmpeg -i test.mov -vcodec libx264 -vf 'scale=640:trunc(ow/a/2)*2' -acodec aac -vb 1024k -minrate 1024k -maxrate 1024k -bufsize 1024k -ar 44100 -strict experimental -r 30 out.mp4 |
-t 2:20
is also needed.
It's also necessary to round to an even number of pixel dimensions:
ffmpeg -i test.mov -vcodec libx264 -vf "pad=ceil(iw/2)*2:ceil(ih/2)*2" -pix_fmt yuv420p -strict experimental -r 30 -t 2:20 -acodec aac -vb 1024k -minrate 1024k -maxrate 1024k -bufsize 1024k -ar 44100 -ac 2 out.mp4
Also, based on Twitter's JSON response, the aspect ratio can only be 3:1 max
I definitely needed a -t
as I was trying to send a 5 second video (using the standard UI) and the screen error was generic ... had to examine the JSON in the response to know they thought it was too short.
@Pomax remark fixed my issue. The aspect ratio was the problem in my case but nothing tells it is the case.
@hertzsprung This one worked for me
@hertzsprung thank you, your command worked for a troublesome DVD rip.
@hertzsprung This one worked for me
It's also necessary to round to an even number of pixel dimensions:
ffmpeg -i test.mov -vcodec libx264 -vf "pad=ceil(iw/2)*2:ceil(ih/2)*2" -pix_fmt yuv420p -strict experimental -r 30 -t 2:20 -acodec aac -vb 1024k -minrate 1024k -maxrate 1024k -bufsize 1024k -ar 44100 -ac 2 out.mp4
Great!
-vf "pad=ceil(iw/2)*2:ceil(ih/2)*2"
This is sadly insufficient for narrow/tall inputs.
I'm sorry, this is complex.
ffmpeg_ar
#!/bin/bash
eval $(ffprobe -v error -show_entries stream=width,height -of default=noprint_wrappers=1 "$1")
#results in e.g.
#width=300
#height=1200
echo "height=$height"$'\n'"width=$width"
newenv=$(bc <<< "width=$width; height=$height;"$'\nscale=3; aspect=width / height;\nprint "aspect=", aspect;
print "''\n'$'";\n\nif (aspect>3) { r=(height) * (aspect/3); print "height=";}
if (aspect<(1/3)) {r=(width) / (aspect/(1/3)); print "width=";}\nscale=0
if (r) { print r/1 }')
[ ! -z "$newenv" ] && echo "$newenv" && export $newenv
echo "aspect=""$(bc <<< "scale=3; $width/$height")"
Example I/O
ffmpeg_ar /tmp/modem.mkv
height=100
width=1000
aspect=10.000
height=333
aspect=3.003
ffmpeg
You can then:
export $( ffmpeg_ar /tmp/in.mkv );
ffmpeg -i in.mkv -filter_complex 'fps=30,format=yuv420p,pad='"ceil($width/2)*2:ceil($height/2)*2"':(ow-iw)/2:(oh-ih)/2' -c:v h264_nvenc -t 02:20 -c:a aac -ac 2 -ar 44100 -r 30 /tmp/out.mp4
Foone's command works for me.