Trabalhando em torno da limitação do FFMPEG Mod2

0

Eu gostaria de usar o ffmpeg para processar em lote uma pasta de arquivos de vídeo de diferentes tamanhos, codificações, etc.

Estamos usando o script abaixo. O problema é que estamos criando um vídeo a partir do qual um processo subsequente extrairá fatias largas de 3p. Portanto, um ideal teria mod 3 width. Mas o 264 só espera o mod 2. Você pode ver que estamos trabalhando com o mod 6. Mas em alguns arquivos de vídeo menores, isso introduz artefatos indesejáveis.

A questão detalhada é: há meios de alcançar o mod 3, talvez aproveitando o anamorfismo?

ffmpeg -i "$f" \ -vf 'scale=-6:300' \ -c:v h264 -preset "medium" -r 24 \ -map 0:a \ -map 0:v \ -map 0:s \ -map_metadata 0 \ -c:a aac -ac 1 \ -c:s copy \ -y "$partname"
    
por Ted Goranson 01.04.2017 / 15:01

1 resposta

0

Não é uma limitação absoluta. Aplica-se quando o formato de pixel de saída tem planos cromados subamostrados, como yuv420p , yuv422p ..etc.

Se o seu processo subseqüente puder manipular yuv444p, você pode simplesmente executar

ffmpeg -i "$f" -vf 'scale=-3:300,format=yuv444p' \
       -r 24 -c:v libx264 -preset "medium" -map 0:a -map 0:v -map 0:s -map_metadata 0 \
       -c:a aac -ac 1 -c:s copy -y "$partname"

Mas se ele puder manipular somente yuv420p , você poderá preencher a saída da escala com preto e fazer com que seu aplicativo descarte a última fatia com largura de 1 px.

ffmpeg -i "$f" -vf 'scale=-3:300,pad=iw+1:ih' \
       -r 24 -c:v libx264 -preset "medium" -map 0:a -map 0:v -map 0:s -map_metadata 0 \
       -c:a aac -ac 1 -c:s copy -y "$partname"
    
por 01.04.2017 / 15:37

Tags