Passar de 100mb para 10mb é um ligeiramente irrealista queda de 90% no tamanho, mas darei um exemplo de redução para 50mb criando um vídeo H.264, que é um mais razoável < Redução de 50% no tamanho, bem como redução para 40mb usando HEVC.
Estou usando o seguinte arquivo de amostra:
wget http://dl3.h265files.com/TearsOfSteel_720p_h265.mkv
Você pode usar esse arquivo de amostra para confirmar os seguintes resultados que eu dei e talvez experimentar um pouco mais. O MediaInfo revela o seguinte para este arquivo baixado:
mediainfo \
--Inform="General;Duration=%Duration/String3%\nFile size=%FileSize/String1%" \
TearsOfSteel_720p_h265.mkv
Duration=00:12:14.058 <-----
File size=101 MiB <-----
As setas, claro, são minhas! Você então talvez tenha 2 escolhas realmente boas:
- Codificar novamente para H.264
- Codificar novamente para HEVC
1. Re-Encode para H.264 (50mb)
O H.264 é amplamente aceito agora e seria uma excelente opção para o seu arquivo de vídeo de saída. A fórmula para calcular a taxa de bits de saída para os 50MB desejados seria então:
(50 MiB * 8192 [converts MiB to kBit]) / 734 seconds = ~558 kBit/s total bitrate
558 - 128 kBit/s (desired audio bitrate) = 430 kBit/s video bitrate
Para isso, use o seguinte comando FFmpeg 2 pass:
ffmpeg -y -i TearsOfSteel_720p_h265.mkv \
-c:v libx264 -b:v 430k -pass 1 \
-c:a libmp3lame -b:a 128k -f mp4 /dev/null && \
ffmpeg -i TearsOfSteel_720p_h265.mkv \
-c:v libx264 -b:v 430k -pass 2 \
-c:a libmp3lame -b:a 128k TearsOfSteel_smaller.mp4
O tamanho do arquivo resultante é de 49,4 MiB com qualidade de visualização bastante razoável, mas não surpreendente. Muito bom para uma redução de 50% no tamanho do arquivo e uma queda enorme na taxa de bits de vídeo, na verdade!
2. Re-codificar para HEVC (40mb)
Outra opção (como sugerido por emk2203) é recodificar o fluxo HEVC existente com uma taxa de bits menor, desta vez objetivando 40mb, já que HEVC reivindica melhor qualidade a uma taxa de bits menor .
Desta vez, a fórmula seria:
(40 MiB * 8192 [converts MiB to kBit]) / 734 seconds = ~446 kBit/s total bitrate
446 - 128 kBit/s (desired audio bitrate) = 318 kBit/s video bitrate
e a linha de comando do FFmpeg 2 pass é:
ffmpeg -y -i TearsOfSteel_720p_h265.mkv \
-c:v libx265 -x265-params pass=1 -b:v 318k \
-c:a libmp3lame -b:a 128k -f mp4 /dev/null && \
ffmpeg -i TearsOfSteel_720p_h265.mkv \
-c:v libx265 -x265-params pass=2 -b:v 318k \
-c:a libmp3lame -b:a 128k TearsOfSteel_smaller.mp4
E isso fornece um arquivo de 40 MB com qualidade bastante razoável .
Em conclusão:
A partir desse exemplo, você pode experimentar mais, diminuindo o MiB necessário na fórmula e observando a qualidade de visualização subsequente. Divirta-se!
Referências:
- Guia de codificação de vídeo H.264: codificação de 2 passos Artigo FFmpeg trac que fornece informações definitivas e de fácil acesso na codificação de 2 passagens para H.264.
- FFmpeg e Guia de codificação H.265 FFmpeg trac gudelines para codificação para HEVC usando o wrapper x265.
- FFmpeg e VP9 Encoding Guide Outra opção é codificar o VP9 e todos os detalhes estão neste trac do FFmpeg página. Mais uma vez você está após a seção de codificação de 2 passagens ...