Encodage simple

Maintenant que tu as atteins la CONNAISSANCE, tu vas pouvoir encoder ta vidéo en sachant un minimum ce que tu fais (enfin j'espère).

1. Les outils

Pour maintenant tu vas avoir besoin d'installer ffmpeg.
Ce logiciel est souvent décrit comme le couteau-suisse de l'encodage vidéo (et c'est plutôt vrai). Il vient également avec la commande ffprobe, que l'on va utiliser tout de suite.

2. Connaître son ennemi

Tout d'abord il va falloir regarder ce qu'on a dans notre fichier d'origine. Pour ça on va utiliser ffprobe <nom du fichier vidéo>:

$ ffprobe \[Snow-Raws\]\ クロスアンジュ\ 天使と竜の輪舞\[ロンド\]\ OP01\(BD\ 1920x1080\ HEVC-YUV420P10\ FLAC\).mkv
ffprobe version 4.2.1 Copyright (c) 2007-2019 the FFmpeg developers
   built with gcc 9.2.0 (Gentoo 9.2.0-r2 p3)
   configuration: --prefix=/usr --libdir=/usr/lib64 --shlibdir=/usr/lib64 --docdir=/usr/share/doc/ffmpeg-4.2.1/html --mandir=/usr/share/man --enable-shared --cc=x86_64-pc-linux-gnu-gcc --cxx=x86_64-pc-linux-gnu-g++ --ar=x86_64-pc-linux-gnu-ar --optflags='-O2 -pipe -fomit-frame-pointer -march=native' --disable-static --enable-avfilter --enable-avresample --disable-stripping --disable-optimizations --disable-libcelt --enable-nonfree --disable-indev=v4l2 --disable-outdev=v4l2 --disable-indev=oss --disable-outdev=oss --enable-nonfree --enable-bzlib --disable-runtime-cpudetect --disable-debug --disable-gcrypt --disable-gnutls --disable-gmp --enable-gpl --disable-hardcoded-tables --enable-iconv --enable-libtls --disable-libxml2 --disable-lzma --enable-network --disable-opencl --disable-openssl --enable-postproc --disable-libsmbclient --enable-ffplay --enable-sdl2 --enable-vaapi --disable-vdpau --enable-xlib --enable-libxcb --enable-libxcb-shm --enable-libxcb-xfixes --enable-zlib --enable-libcdio --disable-libiec61883 --disable-libdc1394 --enable-libcaca --disable-openal --enable-opengl --disable-libv4l2 --disable-libpulse --enable-libdrm --enable-libjack --disable-libopencore-amrwb --disable-libopencore-amrnb --disable-libcodec2 --disable-libdav1d --enable-libfdk-aac --disable-libopenjpeg --enable-libbluray --disable-libgme --disable-libgsm --disable-libaribb24 --disable-mmal --disable-libmodplug --enable-libopus --disable-libilbc --disable-librtmp --enable-libssh --disable-libspeex --disable-libsrt --enable-librsvg --disable-ffnvcodec --enable-libvorbis --enable-libvpx --disable-libzvbi --disable-appkit --disable-libbs2b --disable-chromaprint --disable-cuda-llvm --disable-libflite --disable-frei0r --disable-libfribidi --enable-fontconfig --disable-ladspa --enable-libass --disable-libtesseract --disable-lv2 --enable-libfreetype --disable-libvidstab --disable-librubberband --disable-libzmq --disable-libzimg --disable-libsoxr --enable-pthreads --disable-libvo-amrwbenc --enable-libmp3lame --disable-libkvazaar --enable-libaom --disable-libopenh264 --disable-libsnappy --disable-libtheora --disable-libtwolame --disable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --disable-gnutls --disable-openssl --disable-armv5te --disable-armv6 --disable-armv6t2 --disable-neon --disable-vfp --disable-vfpv3 --disable-armv8 --disable-mipsdsp --disable-mipsdspr2 --disable-mipsfpu --disable-altivec --disable-amd3dnow --disable-amd3dnowext --disable-fma4 --disable-xop --cpu=host --disable-doc --disable-htmlpages --enable-manpages
   libavutil      56. 31.100 / 56. 31.100
   libavcodec     58. 54.100 / 58. 54.100
   libavformat    58. 29.100 / 58. 29.100
   libavdevice    58.  8.100 / 58.  8.100
   libavfilter     7. 57.100 /  7. 57.100
   libavresample   4.  0.  0 /  4.  0.  0
   libswscale      5.  5.100 /  5.  5.100
   libswresample   3.  5.100 /  3.  5.100
   libpostproc    55.  5.100 / 55.  5.100
Input #0, matroska,webm, from '[Snow-Raws] クロスアンジュ 天使と竜の輪舞[ロンド] OP01(BD 1920x1080 HEVC-YUV420P10 FLAC).mkv':
  Metadata:
    encoder         : libebml v1.3.4 + libmatroska v1.4.5
    creation_time   : 2019-07-02T02:04:17.000000Z
  Duration: 00:01:32.09, start: 0.000000, bitrate: 17118 kb/s
    Stream #0:0(jpn): Video: hevc (Main 10), yuv420p10le(tv, bt709/unknown/unknown), 1920x1080, SAR 1:1 DAR 16:9, 23.98 fps, 23.98 tbr, 1k tbn, 23.98 tbc (default)
    Metadata:
      BPS             : 15411453
      BPS-eng         : 15411453
      DURATION        : 00:01:32.092000000
      DURATION-eng    : 00:01:32.092000000
      NUMBER_OF_FRAMES: 2208
      NUMBER_OF_FRAMES-eng: 2208
      NUMBER_OF_BYTES : 177408950
      NUMBER_OF_BYTES-eng: 177408950
      _STATISTICS_WRITING_APP: mkvmerge v9.4.2 ('So High') 64bit
      _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.2 ('So High') 64bit
      _STATISTICS_WRITING_DATE_UTC: 2019-07-02 02:04:17
      _STATISTICS_WRITING_DATE_UTC-eng: 2019-07-02 02:04:17
      _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
      _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
    Stream #0:1(jpn): Audio: flac, 48000 Hz, stereo, s32 (24 bit) (default)
    Metadata:
      BPS             : 1704420
      BPS-eng         : 1704420
      DURATION        : 00:01:32.090000000
      DURATION-eng    : 00:01:32.090000000
      NUMBER_OF_FRAMES: 1080
      NUMBER_OF_FRAMES-eng: 1080
      NUMBER_OF_BYTES : 19620011
      NUMBER_OF_BYTES-eng: 19620011
      _STATISTICS_WRITING_APP: mkvmerge v9.4.2 ('So High') 64bit
      _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.2 ('So High') 64bit
      _STATISTICS_WRITING_DATE_UTC: 2019-07-02 02:04:17
      _STATISTICS_WRITING_DATE_UTC-eng: 2019-07-02 02:04:17
      _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
      _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES

OK ça fait un peu peur... PAS DE PANIQUE. On nous répond avec beaucoup d'infos sur le fichier mais il y a une bonne partie qui va pas nous intéresser.

Les lignes qui nous intéressent commence après le "INPUT #0" et les lignes qui suivent et commencent par "Duration" et "Stream":

Input #0, matroska,webm, from '[Snow-Raws] クロスアンジュ 天使と竜の輪舞[ロンド] OP01(BD 1920x1080 HEVC-YUV420P10 FLAC).mkv':
  Duration: 00:01:32.09, start: 0.000000, bitrate: 17118 kb/s

On voit donc que le fichier à un bitrate de 17118 kb/s (ce qui est plutôt gros il faut le dire).

    Stream #0:0(jpn): Video: hevc (Main 10), yuv420p10le(tv, bt709/unknown/unknown), 1920x1080, SAR 1:1 DAR 16:9, 23.98 fps, 23.98 tbr, 1k tbn, 23.98 tbc (default)

Il y a un flux vidéo en HEVC (ou H.265) d'une résolution de 1920x1080 pixels.

    Stream #0:1(jpn): Audio: flac, 48000 Hz, stereo, s32 (24 bit) (default)

Puis pour l'audio on a du FLAC, donc de l'audio lossless et on vois aussi que c'est du stéréo. On a donc une source plutôt propre pour faire un réencodage. Normalement on devrait pas rencontrer trop de problème pour réencoder ce fichier pour qu'il soit plus petit sans qu'il y ait trop de pertes.

Il faut noter qu'on ne fait ça que parce que le fichier a un bitrate élevé (17118kb/s) et parce que l'audio est dans un format lossless (FLAC). Si l'audio est déjà dans un format lossy (AAC ou OPUS par exemple) et le bitrate est inférieur à 10000kb/s, il vaut mieux garder le fichier tel qu'il est. Dans tous les cas, la première chose à faire avant de penser à réencoder c'est de lancer ffprobe sur le fichier d'origine.

On passe à l'encodage

Maintenant nous allons prendre ce fichier et le réencoder pour réduire un peu sa taille. On va utiliser le format MKV, pour la vidéo du H.264 et en audio du OPUS.

$ ffmpeg -i <nom du fichier> -c:v libx264 -crf 19 -preset slow -c:a libopus -b:a 128k out.mkv

Cette commande va réencoder le fichier en entrée vers un fichier out.mkv qui aura un flux vidéo en H.264 (défini par -c:v libx264) et un flux audio en OPUS (-c:a libopus).

Pour le flux vidéo on utilise un CRF (ou Constant Rate Factor, que l'on définit avec -crf 19), cela nous permet de viser une qualité de vidéo en sortie plutôt qu'un bitrate précis. Je conseille de rester autour de cette valeur de 19. Si tu veux la changer, il faut garder en tête qu'une valeur plus basse augmentera la taille de la vidéo en sortie (en augmentant donc la qualité normalement) et inversement lorsque tu l'augmentes.
Le --preset slow permet globalement de dire à l'encoder vidéo d'essayer de compresser plus la vidéo qu'avec les options par défaut.

Pour le flux audio on utilise un bitrate constant de 128 kb/s, ce qui pour de l'audio en OPUS est normalement indistinguable d'un audio lossless1.

Du coup pour l'exemple ça donne ça:

$ ffmpeg -i \[Snow-Raws\]\ クロスアンジュ\ 天使と竜の輪舞\[ロンド\]\ OP01\(BD\ 1920x1080\ HEVC-YUV420P10\ FLAC\).mkv -c:v libx264 -crf 19 -preset slow -c:a aac -b:a 128k -movflags +faststart out.mp4

On obtient donc un fichier avec un bitrate réduit de moitié, et une qualité qui normalement est toujours au rendez-vous.

1

Si t'es parano tu peux monter à 192k pour du stéréo, au dessus c'est probablement du placebo