ffmpeg / avconv forza l'output in scala diviso per 2


10

Registro il mio desktop con avconv (aka ffmpeg) e poi lo ridimensiono a 720p.

Di recente ho aggiunto al mio script in modo che possano selezionare una finestra con xwininfo e questa verrà registrata in modo specifico.

Tuttavia, se il formato di output non è divisibile per 2, l'encoder si spaventa e non vedo il mio video.

C'è un modo per risolvere questo problema all'interno di ffmpeg, quindi non devo fare un sacco di matematica manuale in bash per impostare i valori di scala?

È possibile sottrarre / aggiungere il filtro di scala a larghezza / altezza se non sono uniformi? (il giro?)

È possibile applicare un altro filtro dopo la scala originale che potrebbe ottenere questo risultato? (Ciò arrotonderebbe i video con dimensioni di input irregolari e nessun ridimensionamento)

#!/bin/bash
avconv \
-f x11grab -r $fps -s $capturesize -i :0.0$offset \
-vcodec libx264 \
-vf scale=-1:720 \
-pre:v lossless_ultrafast \
-threads 4 \
-y $@

Alcune vecchie mailing list suggeriscono una round()funzione che puoi usare nel filtro ma non riesco a capire bene la sintassi. Se funziona, un scale=round(iw,2):round(ih,2)filtro applicato alla fine risolverebbe tutti i miei problemi in una volta. iwe ihnon sembra funzionare.

Risposte:


9

Poiché la divisione per 2 comporta talvolta numeri dispari, dovrebbe essere:

-vf scale="trunc(oh*a/2)*2:720"

Ciò esegue ciò che si vorrebbe con la -1:720sintassi (mantenere le proporzioni originali)


Uso ceilinvece truncun numero di coppia maggiore come nel caso di 16: 9 480p
Felipe Alcacibar,

8

In realtà il filtro può gestirlo direttamente. Devi solo passare -2invece -1al filtro: ad es

-vf scale="-2:720"

Sono stato sorpreso di scoprirlo in un bug report di 3 anni fa .


Non ha funzionato per me, qual è la versione minima che supporta questo?
Letmaik,

3
-2 funziona per me nella versione 2.3.3 di ffmpeg
Lance Nanek,

7

Dopo molti esperimenti sembra che il seguente filtro applicato dopo che altri filtri di scala arrotondino la larghezza e l'altezza a 2.

scale=trunc(in_w/2)*2:trunc(in_h/2)*2

Fondamentalmente è una cosa divisa, rotonda, moltiplicata, semplicemente non avevo la sintassi giusta.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.