Como reduzir o tamanho do vídeo?

0

Introdução

Eu uso este comando para desassociar e estabilizar um vídeo:

ffmpeg2 -i SHAKY_INPUT_VIDEO.mp4 -vf \
  vidstabdetect=stepsize=6:shakiness=8:accuracy=9:result=transform_vectors.trf \
  -f null -

ffmpeg2 -i SHAKY_INPUT_VIDEO.mp4 -vf \
  vidstabtransform=input=transform_vectors.trf:zoom=1:smoothing=30,unsharp=5:5:0.8:3:3:0.4 \
-vcodec libx264 -preset slow -tune film -crf 18 -acodec copy SMOOTH_OUTPUT_VIDEO.mkv

(Eu uso o mkv, pois a saída do mp4 resulta neste erro: Não foi possível encontrar o tag para o codec pcm_s16le no fluxo # 1, o codec não é atualmente suportado no container)

Fonte: link

Eu uso o ffmpeg2 (Veja Desvendando vídeos usando o script )

Como reduzir o tamanho do vídeo?

Acima de duas linhas, estabilize o tamanho do vídeo. Como posso reduzir o tamanho?

Eu vejo dois aspectos:

  • áudio
  • resolução. Se eu entendi a seguinte saída, a resolução é no momento 1920x1080. Eu acho que 720p seria o suficiente.

Meus metadados de vídeo:

===> ffprobe2 20170217_114248.MOV 
ffprobe version git-2017-02-19-3206ea4 Copyright (c) 2007-2017 the FFmpeg developers
  built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.4) 20160609
  configuration: --extra-libs=-ldl --prefix=/opt/ffmpeg --enable-avresample --disable-debug --enable-nonfree --enable-gpl --enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb --disable-decoder=amrnb --disable-decoder=amrwb --enable-libpulse --enable-libfreetype --enable-gnutls --disable-ffserver --enable-libx264 --enable-libx265 --enable-libfdk-aac --enable-libvorbis --enable-libmp3lame --enable-libopus --enable-libvpx --enable-libspeex --enable-libass --enable-avisynth --enable-libsoxr --enable-libxvid --enable-libvidstab --enable-libtheora --enable-libwavpack --enable-libopenjpeg --enable-libgsm --enable-nvenc
  libavutil      55. 47.100 / 55. 47.100
  libavcodec     57. 80.101 / 57. 80.101
  libavformat    57. 66.102 / 57. 66.102
  libavdevice    57.  2.100 / 57.  2.100
  libavfilter     6. 73.100 /  6. 73.100
  libavresample   3.  2.  0 /  3.  2.  0
  libswscale      4.  3.101 /  4.  3.101
  libswresample   2.  4.100 /  2.  4.100
  libpostproc    54.  2.100 / 54.  2.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '20170217_114248-Felix-Jáchymovská.MOV':
  Metadata:
    major_brand     : qt  
    minor_version   : 0
    compatible_brands: qt  
    creation_time   : 2017-02-17T10:39:32.000000Z
  Duration: 00:03:15.00, start: 0.000000, bitrate: 23478 kb/s
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080, 22060 kb/s, 60 fps, 60 tbr, 60k tbn, 120k tbc (default)
    Metadata:
      creation_time   : 2017-02-17T10:39:32.000000Z
      handler_name    : iCatch Alias Data Handler
      encoder         : iCatch AVCC
    Stream #0:1(eng): Audio: pcm_s16le (sowt / 0x74776F73), 44100 Hz, 2 channels, s16, 1411 kb/s (default)
    Metadata:
      creation_time   : 2017-02-17T10:39:32.000000Z
      handler_name    : iCat Alias Data Handler
    
por guettli 01.03.2017 / 19:54

1 resposta

1

Você tem vários métodos para reduzir o tamanho do arquivo de saída:

Codifique o áudio

Como você mencionou, você pode codificar o áudio em vez de copiar o formato PCM robusto, sem perdas e sem compressão.

Usando o libfdk_aac

Seu ffmpeg suporta o codificador AAC libfdk_aac, que é o melhor codificador AAC suportado por ffmpeg agora. Para usá-lo, substitua -c:a copy por -c:a libfdk_aac -vbr 5 .

Usando o codificador FFmpeg AAC nativo

Como alternativa, você pode usar o codificador FFmpeg AAC nativo. Para usá-lo, substitua -c:a copy por -c:a aac -b:a 128k . Não é tão bom quanto libfdk_aac, mas dá mais bits e será aceitável.

Agora você pode usar o formato de contêiner de saída MP4 se preferir em Matroska (MKV).

Para mais informações sobre esses dois codificadores, veja Wiki do FFmpeg: AAC .

Use um valor -crf mais alto

Ao usar libx264 para codificar vídeo H.264, a opção -crf é um método de controle de taxa para controlar a qualidade. Um valor de ~ 18 ou mais resultará mais ou menos em uma saída visualmente sem perdas, mas dependendo do conteúdo, também pode resultar em um arquivo um pouco grande. Aumentar o valor +6 normalmente diminuirá o tamanho do arquivo de saída em 50%. A recomendação geral é usar o maior valor -crf que ainda forneça uma qualidade aceitável.

Se você está direcionando um tamanho de arquivo de saída específico, como devido a restrições de mídia de armazenamento, você deve codificar usando o modo de duas passagens . No entanto, a menos que um tamanho de arquivo de destino específico seja de extrema importância, é mais fácil e rápido usar apenas -crf (não usei duas passagens em anos).

Para mais informações, consulte Wiki do FFmpeg: H.264 .

Use um codificador diferente

Se usado corretamente codificando para H.265 / HEVC com libx26 5 pode resultar em um tamanho de arquivo menor com a mesma qualidade percebida. A desvantagem é a lentidão da codificação, e o suporte ao player / dispositivo ainda não é tão prevalente quanto o H.264.

Eu não usei muito esse codificador, então não sei o que -crf valores sugerem, mas vale a pena tentar. Talvez você tenha que usar -preset veryslow para realmente superar x264 se já estiver usando uma das predefinições mais lentas em x264.

Veja Wiki do FFmpeg: H.265 .

Escalonamento

Se você quiser reduzir a escala, pode ser mais rápido dimensionar primeiro em ambos os comandos, em vez de redimensionar por último no segundo comando. Você terá que experimentar porque eu não estou familiarizado com o vidstab * ou se é um gargalo ou não.

-vf scale=-2:720,vidstab*...
    
por LordNeckbeard 02.03.2017 / 20:08