Como obter boa qualidade ao converter vídeo digital?

3

Eu peguei minha velha filmadora Panasonic NV-GS500; para finalmente transformar todas as nossas gravações em mídia digital.

Até agora, as coisas funcionaram com facilidade:

  • No Ubuntu 16.04; Eu apenas tive que conectar o dispositivo e meu laptop; através do cabo DV / firewire
  • Apenas usando as configurações padrão (eu não selecionei nenhum formato de saída; usei apenas um arquivo "único" ilimitado) ... kino criou um arquivo capture.dv para mim
  • Isso criou um arquivo ~ 8 GB por 40 minutos de vídeo ... ok comigo
  • usei um pequeno script que lê ffmpeg -i infile -pix_fmt yuv420p -crf 23 outfile para transformar esse arquivo dv em um mp4

Mas, infelizmente, a qualidade do mp4 não é tão convincente. Especialmente em movimentos rápidos, muitas coisas de pixelish.

Assim, quero melhorar tudo. E como agora descobriu que kino está realmente "morto"; Eu estou querendo saber qual combinação de ferramentas me dá boa qualidade; tão facilmente quanto possível.

Atualização: o comando completo para o ffmpeg já está acima, aqui está a saída que estou recebendo ao executar isso:

>  ffmpeg -i capture001.dv -pix_fmt yuv420p -crf 23 test.mp4

ffmpeg version 2.8.10-0ubuntu0.16.04.1 Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.4) 20160609
  configuration: --prefix=/usr --extra-version=0ubuntu0.16.04.1 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --cc=cc --cxx=g++ --enable-gpl --enable-shared --disable-stripping --disable-decoder=libopenjpeg --disable-decoder=libschroedinger --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzvbi --enable-openal --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzmq --enable-frei0r --enable-libx264 --enable-libopencv
  WARNING: library configuration mismatch
  avcodec     configuration: --prefix=/usr --extra-version=0ubuntu0.16.04.1 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --cc=cc --cxx=g++ --enable-gpl --enable-shared --disable-stripping --disable-decoder=libopenjpeg --disable-decoder=libschroedinger --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzvbi --enable-openal --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzmq --enable-frei0r --enable-libx264 --enable-libopencv --enable-version3 --disable-doc --disable-programs --disable-avdevice --disable-avfilter --disable-avformat --disable-avresample --disable-postproc --disable-swscale --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libvo_aacenc --enable-libvo_amrwbenc
  libavutil      54. 31.100 / 54. 31.100
  libavcodec     56. 60.100 / 56. 60.100
  libavformat    56. 40.101 / 56. 40.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 40.101 /  5. 40.101
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  2.101 /  1.  2.101
  libpostproc    53.  3.100 / 53.  3.100
[dv @ 0x2566420] Detected timecode is invalid
[dv @ 0x2566420] Estimating duration from bitrate, this may be inaccurate
Input #0, dv, from 'capture001.dv':
  Duration: 00:39:45.36, start: 0.000000, bitrate: 28800 kb/s
    Stream #0:0: Video: dvvideo, yuv420p, 720x576 [SAR 64:45 DAR 16:9], 28800 kb/s, 25 fps, 25 tbr, 25 tbn, 25 tbc
    Stream #0:1: Audio: pcm_s16le, 32000 Hz, stereo, s16, 1024 kb/s
    Stream #0:2: Audio: pcm_s16le, 32000 Hz, stereo, s16, 1024 kb/s
[libx264 @ 0x256dea0] using SAR=64/45
[libx264 @ 0x256dea0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
[libx264 @ 0x256dea0] profile High, level 3.0
[libx264 @ 0x256dea0] 264 - core 148 r2643 5c65704 - H.264/MPEG-4 AVC codec - Copyleft 2003-2015 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=12 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'test.mp4':
  Metadata:
    encoder         : Lavf56.40.101
    Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 720x576 [SAR 64:45 DAR 16:9], q=-1--1, 25 fps, 12800 tbn, 25 tbc
    Metadata:
      encoder         : Lavc56.60.100 libx264
    Stream #0:1: Audio: aac (libvo_aacenc) ([64][0][0][0] / 0x0040), 32000 Hz, stereo, s16, 128 kb/s
    Metadata:
      encoder         : Lavc56.60.100 libvo_aacenc
Stream mapping:
  Stream #0:0 -> #0:0 (dvvideo (native) -> h264 (libx264))
  Stream #0:1 -> #0:1 (pcm_s16le (native) -> aac (libvo_aacenc))
Press [q] to stop, [?] for help
frame= 1449 fps=112 q=-1.0 Lsize=   10373kB time=00:00:57.93 bitrate=1466.7kbits/s    
video:9424kB audio:906kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.411332%
[libx264 @ 0x256dea0] frame I:29    Avg QP:22.01  size: 23022
[libx264 @ 0x256dea0] frame P:826   Avg QP:24.37  size:  8655
[libx264 @ 0x256dea0] frame B:594   Avg QP:25.43  size:  3086
[libx264 @ 0x256dea0] consecutive B-frames: 29.4% 42.9% 14.7% 13.0%
[libx264 @ 0x256dea0] mb I  I16..4: 21.0% 76.6%  2.3%
[libx264 @ 0x256dea0] mb P  I16..4:  1.7%  5.9%  0.5%  P16..4: 46.9%  9.4%  6.7%  0.0%  0.0%    skip:28.9%
[libx264 @ 0x256dea0] mb B  I16..4:  0.0%  0.1%  0.0%  B16..8: 48.5%  2.5%  0.6%  direct: 3.3%  skip:44.8%  L0:46.0% L1:50.8% BI: 3.2%
[libx264 @ 0x256dea0] 8x8 transform intra:73.6% inter:82.2%
[libx264 @ 0x256dea0] coded y,uvDC,uvAC intra: 66.2% 56.2% 6.0% inter: 19.5% 23.4% 0.1%
[libx264 @ 0x256dea0] i16 v,h,dc,p: 14% 39% 12% 35%
[libx264 @ 0x256dea0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 18% 16% 33%  5%  5%  6%  6%  5%  7%
[libx264 @ 0x256dea0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu:  9% 60% 14%  3%  3%  3%  3%  2%  2%
[libx264 @ 0x256dea0] i8c dc,h,v,p: 56% 20% 21%  3%
[libx264 @ 0x256dea0] Weighted P-Frames: Y:14.9% UV:1.5%
[libx264 @ 0x256dea0] ref P L0: 62.5% 14.1% 15.9%  6.8%  0.7%
[libx264 @ 0x256dea0] ref B L0: 81.5% 17.0%  1.5%
[libx264 @ 0x256dea0] ref B L1: 94.9%  5.1%
[libx264 @ 0x256dea0] kb/s:1331.94
Exiting normally, received signal 2.

(interrompido após alguns segundos com ctrl-c)

    
por GhostCat 30.12.2016 / 15:57

2 respostas

4

Vale a pena executar um filtro de vídeo de desentrelaçamento durante a codificação de vídeo e isso pode muito bem diminuir alguns dos efeitos de tela estranhos que você está vendo em seu vídeo de saída. Um segundo pensamento, não relacionado ao artefato de movimento, mas que vale a pena adicionar, é o uso de um filtro anti-ruído.

1. Desentrelaçamento:

Para o FFmpeg, a melhor e mais rápida escolha é yadif , que na moda geek peculiar significa simplesmente "Yet Another DeInterlacing Filter '!

yadif pode ser usado sem opções ou você pode especificar uma opção para cada um dos três campos:

  1. mode : O modo básico de entrelaçamento para adotar
  2. parity : a paridade de campo de imagem assumida para o vídeo entrelaçado de entrada
  3. deint : especifica quais quadros devem desentrelaçar

Os padrões seguros podem ser especificados na linha de comando do FFmpeg como:

-vf yadif=0:-1:0

Se você quiser alterar todos esses detalhes, leia aqui:

FFmpeg Filter Documentation: yadif
link

Um outro filtro de desentrelaçamento chamado mcdeint (desentrelaçamento de compensação de movimento) também pode ser aplicado, mas você pode achar isto dolorosamente lento. Uma linha de comando típica para uso desse filtro seria:

-vf yadif=1:-1:0,mcdeint=2:1:10

E novamente os detalhes das opções mcdeint podem ser vistos na documentação do FFmpeg:

Documentação do filtro FFmpeg: mcdeint
link

2. Denoising:

Um final que pode valer a pena alguma experimentação é o uso de um filtro de denoising, embora isso não deva afetar o artefato de movimento, ainda é uma adição valiosa. Sob o FFmpeg, existem algumas opções, mas uma que merece atenção é nlmeans (quadros de denoise usando o algoritmo Non-Local Means). Você precisará do mais recente FFmpeg para este.

Para usar isso na linha de comando mais fácil, tente o seguinte:

-vf yadif=0:-1:0,nlmeans

Há um acerto com nlmeans em termos de tempo de codificação, não uma penalidade tão severa como é visto com mcdeint , mas ainda é uma consideração ...

Se você tiver uma cópia mais antiga do FFmpeg sem acesso a este filtro mais recente, há um filtro denoise mais antigo que pode ser usado com segurança com confiança nos padrões de sane:

-vf yadif=0:-1:0,hqdn3d

Eu noto no meu próprio sistema que hqdn3d é muito, muito mais rápido que o mais recente nlmeans . Melhor? Bem, eu suspeito que isso seja um debate para outro fórum:)

E esperamos que uma combinação de qualquer um desses pensamentos resolva seu problema ...

Referências:

por andrew.46 02.01.2017 / 21:25
3

Você pode obter uma qualidade muito boa de maneira rápida e fácil usando o aplicativo Handbrake . Instale-o com:

sudo apt-get install handbrake

Eu sugiro que você codifique para x264, ele é atualmente mais usado e você pode ter arquivos muito pequenos enquanto preserva a boa qualidade. Para arquivo privado, recomendo configurar o RF constante (fator de taxa) entre 16 e 18 (menor = maior qualidade e tamanho maior).

Se o seu vídeo é barulhento (provavelmente é), também há um filtro denoise bem organizado:

Você também pode precisar desentrelaçar sua origem. Quanto ao áudio ... 320 kbps MP3 ou AAC deve dar grandes resultados para o arquivo pessoal. Tudo pode ser definido na GUI do Handbrake.

    
por GreggD 30.12.2016 / 16:07

Tags