Jump to content
fredericopissarra

Problemas com vídeos "baixados"...

Recommended Posts

Tenho observado que a maioria dos vídeos que baixamos, seja via torrents, seja via outros sites de vídeo (Youtube, e... a-ham... XVideos, PornHub, etc...), não aderem aos padrões de vídeos... Por exemplo, O frame-rate pode ser não padronizado (geralmente, 24 fps [filmes da telona], 24000/1001 fps ou 23.976 fps [filmes da telona no padrão NTSC], 25 fps [PAL]; ou 30000/1001 ou 29.97 fps [NTSC]). Alguns frame-rates não são padrão, como 30 fps, por exemplo...

Existe um outro problema relativo aos frame-rates: Num container de vídeo são armazenados 2 frame-rates: O do qual o vídeo foi codificado e o qual o vídeo será "tocado". Às vezes os dois não batem... Seria prudente que a relação entre eles fosse 1:1, da mesma forma que a resolução gráfica para o aspect ratio.

Outro problema é o aspect ratio. Os mais comuns são 4/3 (letter-box) e 16/9 (wide-screen), mas existem outros: 3/2 (35mm still camera film), 16/10 (outro padrão para wide-screen, menos usual), 5:3 (Super 16 - padrão Europeu), 64/24 e 32:9 (ultra wide-screen - também neos usual). No entanto, muitos vídeos usam resoluções gráficas não padronizadas, distorcendo a imagem (daí o macete das barras pretas que mostrei antes)...

Um terceiro problema, mas que não entra, necessariamente, na categoria de padrões, é o bitrate em que o vídeo é codificado... É comum, hoje em dia, que vídeos tenham bitrates MUITO altos, na tentativa de compensar distorções causadas por "artefatos" no vídeo. Então, é comum ver vídeos HD (720p), por exemplo, com bitrates na ordem de 4~5 Mb/s, quando, aproximadamente 2 Mb/s é mais que suficiente. Isso diminuirá o tamanho do vídeo com perdas insignificantes.

Minha dica, use o ffmpeg para converter seus vídeos para os padrões... Por exemplo, se você tem um vídeo em 640x382 (uma resolução não padrõnizada - aspecto 320/191), note que ele está mais próximo do aspecto 16/9 (wide screen) do que 4/3 (letter-box). Assim, convertê-lo para 16/9 pode ser uma boa ideia... Ainda, ajuste o framerate... suponha que o vídeo original use 30 fps, usar NTSC pode ser outra boa ideia... E, como vamos usar widescreen, a resolução final poderá ser 1280x720 (duplicar x e y não causará problemas de distorção, se o filtro certo for usado)... assim, com uma nVidia, podemos fazer:

$ ffmpeg -hwaccel cuvid \
  -i videoin.mp4 \
  -c:v h264_nvenc \
  -pix_fmt yuv420p \
  -bufsize 1.998M -maxrate 1.998M -b:v 1.998M \
  -r ntsc \
  -vf scale=1280:720:flags=lanczos,setdar=16/9 \
  -c:a ac3 \
  -b:a 128k -ac 2 -ar 44.1k -async 1 \
  videoout.mp4

Aqui ajusto chroma subsampling para o YUV 4:2:0 (algumas vezes o vídeo vêm codificado com NV12, por exemplo); o bitrate para 1.998 Mb/s (segundo aquela minha "fórmula mágica" num post anterior); o frame-rate para 29.97 (ntsc), reescalono o vídeo para 1280x720, usando o filtro lanczos, ajusto o aspect ratio (DAR) para 16/9 [o ffmpeg fará isso sozinho, mas prefiro dar uma mão])... Logo depois uso o codec AC-3 (AAC não funciona na minha TV! hehe), ajustando o bitrate do audio para 128 kb/s, stereo com sampling-rate de 44.1 kHz (48 kHz é exagero!).

No audio, o filtro -async 1 (alias para um filtro aresample) garante que o audio estará sincronizado com o novo frame-rate do vídeo...

Há uma desvantagem em fazer isso se seu container tem um stream de legenda (subtitle) emburido... As legendas estão sincronizadas com o frame-rate do vídeo, ao mudar o frame-rate não temos como sincronizar as legendas via algum filtro... Assim, retire a legenda do vídeo (opção -sn), obtenha a legenda e resincronize-a usando algum outro software (SubRip, por exemplo).

Voilà! videoout.mp4 está dentro do padrão para widescreen 720p.

Se você tem um PC com video on-board, mas seu processador é Intel i# de uma geração mais recente (6ª geração em diante?), pode trocar a opção -hwaccel cuvid por: "-hwaccel vaapi -vaapi_device /dev/dri/renderD128"; trocar o encoder para "h264_vaapi", mas deve adicionar o filtro "hwupload" na opção -vf e pode até mudar o escalonador para "scale_vaapi": "-vf hwupload,scale_vaapi=1280:720,setdar=16/9" (para gerações anteriores a 6ª, deixe com "scale=1280:720:flags=lanczos,hwupload,setdar=16/9".
 

Edited by fredericopissarra
  • l33t 1

Share this post


Link to post
Share on other sites

Ahhh... atualmente tenho preferido codificar meus vídeos com frame rate 23.976 fps (NTSC-FILM). Isso me dá um bit rate menor...

Também tenho preferido, para Widescreen (aspecto 16:9) a resolução de 1280x720 e para LetterBox (aspecto 4:3), 720x540. Respectivamente, teremos os bit rates de 1.6Mb/s e 650kb/s. Codec avc1 (h264). Chroma subsampling: YUV420P (ou NV12, se estiver recodificando numa velha máquina Intel com um i5 de 3ª geração!)... No caso do Widescreen, poderia ter o padrão de 1920x1080 (Full HD), mas o bit rate teria que ser de 3.6 Mb/s, o que me dá arquivos maiores e o ganho de "clareza" da imagem é indistinguível (a não ser que você vá ver um filme numa TV de 60" ou mais)...

Áudio: AC-3, 96 kb/s, stereo e sampling rate de 44.1 kHz.

Container: MPEG-4 (.mp4).

Em certos casos consigo arquivos até 8 vezes menores que os originais, baixados por ai. Mas é mais comum umas 4 ou 5 vezes menor.

Edited by fredericopissarra

Share this post


Link to post
Share on other sites

PS: E 4K? Para 3840x2160 @ 23.976 fps você precisa de 14.4 Mb/s de bit rate. Compare com 1280x720: O arquivo final ficará, pelo menos 9 vezes maior, em 4K, contando apenas o bit rate. Sem contar o tamanho dos quadros... Um vídeo de 4K pode ficar de 9 a 18 vezes maior que um em HD.

Por isso que para o mesmo vídeo, em 720p tendo uns 500 MB de tamanho, um em 2160p tem uns 4.5 GiB ou mais...

Share this post


Link to post
Share on other sites

E 8K? Tem gente entusiasmada com isso...

8K é resolução de 7680x4320 (yep... nada de 8k aqui, no máximo 7.7k - te enganaram, de novo!) para 23.976 fps, teríamos um bit rate mínimo de 57.5 Mb/s. Ou seja, o vídeo final típicamente fica 36 vezes maior que o mesmo vídeo em 720p. Aquele vídeo hipotético de 500 MB ficaria com 18 GiB.

Isso ai é o tamanho de um episódio de uma série qualquer (geralmente cerca da 40 minutos de vídeo)...

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...