Parece-me que você precisa fazer isso em três etapas:
- Verifique a proporção da entrada
- Dimensione vídeos com DAR> 7/4 em largura (altere a largura para 700 e dimensione a altura para manter a proporção) e dimensione aqueles com DAR <7/4 em altura
- Coloque o vídeo de forma que ele caiba no espaço 700: 400.
O FFmpeg / avconv pode fazer o dimensionamento / preenchimento com filtros de vídeo em uma única etapa, transcodificando apenas uma vez. Por exemplo, para gravar um vídeo 16: 9, redimensione-o em largura e, em seguida, envie os resultados para a caixa de correio:
ffmpeg -i input.avi -filter:v 'scale=700:-1,pad=700:400:(ow-iw)/2:(oh-ih)/2' \
-c:v libx264 -b:v 2000k -bufsize 20M -c:a aac -strict experimental -ar 44100 -b:a 256k output.mp4
... mas para o primeiro passo (detectando a proporção e comparando-a com o 7: 4 que você precisa), você terá que usar algum tipo de script.
ffprobe input.avi 2>&1 | sed -n '/Video:/s/.*DAR \([0-9]*:[0-9]*\)].*/\1/p'
... você obtém a proporção do vídeo, que será semelhante a '16: 9' ou '4: 3'. Em um script bash, eu usaria algo como:
#!/bin/bash
## Get the aspect ratio in the form x/y
dar=$(ffprobe test0.mp4 2>&1 | sed -n '/Video:/s/.*DAR \([0-9]*:[0:9]*\)].*/\1/p' | sed 's|:|/|')
## use bc to do x/y*100 (bash can't handle floats)
DAR=$(bc <<< 'scale=2; $dar*100')
## ${DAR%.00} will remove the trailing .00 left by bc
if [ ${DAR%.00} -ge 175 ]; then
ffmpeg -i "$1" -filter:v 'scale=700:-1,pad=700:400:(ow-iw)/2:(oh-ih)/2' \
-c:v libx264 -b:v 2000k -bufsize 20M -c:a aac -strict experimental -ar 44100 -b:a 256k "${1%.*}.mp4
else
ffmpeg -i "$1" -filter:v 'scale=-1:400,pad=700:400:(ow-iw)/2:(oh-ih)/2' \
-c:v libx264 -b:v 2000k -bufsize 20M -c:a aac -strict experimental -ar 44100 -b:a 256k "${1%.*}.mp4
fi
exit 0
Obviamente, você terá que adaptá-lo às suas necessidades.