Voglio codificare un video, che ha una durata di 60 secondi, su una destinazione o una dimensione massima di 10 MB .
Ci sono due approcci che conosco. Uno è spiegato nel FFMPEG-Wiki e l'altro che ho trovato nella documentazione. Sfortunatamente, non ho trovato una spiegazione su quando usare quale metodo.
Qualcuno di questi metodi è raccomandato? In caso contrario, quali sono gli aspetti positivi / negativi di ciascun metodo?
1) Calcola e imposta Bitrate in modo che corrisponda alla lunghezza del video, come spiegato in ffmpeg-wiki
(10 MB * 8192 [converte MB in kilobit]) / 60 secondi = ~ 1365 kbit / s bitrate totale 1365k - 128k (bitrate audio desiderato) = 1237k bitrate video
ffmpeg -y -i input -c:v copy -preset medium -b:v 1237k -pass 1 -c:a copy -b:a 128k -f mp4 /dev/null && \
ffmpeg -i input -c:v libx264 -preset medium -b:v 1237k -pass 2 -c:a libfdk_aac -b:a 128k output.mp4
2) Utilizzare il -fs
parametro e lasciare che ffmpeg lo capisca.
ffmpeg -i input -c:v copy -c:a copy -preset medium -crf 23 -fs 10485760 output.mp4
libx264
comec:v
. Nelfs
esempio, non si è transcodifica del video, dal momento che-c:v copy
viene utilizzato. Quindi, anchepreset
ecrf
non hanno alcun effetto.