FFmpegでYouTube向けにエンコードしたい場合は
$ ffmpeg -i input.avi -c:v libx264 -preset slow -crf 18 -c:a copy -pix_fmt yuv420p output.mkv
のようなコマンドでエンコードできます。
ポイントは-pix_fmt yuv420pの部分だと思います。-pix_fmt yuv420pのオプションを消してエンコードするとChroma subsamplingが4:4:4になるみたいです。ローカルPCでは正常に再生できますが、アップロードすると映像が乱れる場合があるようです。(YouTube以外でも動画アップロードに対応しているWebサービスでは-pix_fmt yuv420pのオプションを付けておいた方が良いみたいです。)
オプションについての簡単な説明
-c:v libx264は動画をx264でエンコードするという設定です。出力するファイルをoutput.mkvの代わりにoutput.mp4にする場合は、デフォルトでx264でエンコードの設定になるので省略できます。
-preset slowはエンコード速度に関する設定です。エンコードに時間を掛けてでも圧縮率を上げてファイルサイズを減らしたい場合はslow/slower/veryslowを使います。逆に少しでも短時間でエンコードを終わらせたい場合はmedium/fast/faster/veryfastを使います。
-crf 18の部分は動画のクオリティに関する部分になっています。画質を落としてでもファイルサイズを減らしたい場合は18より大きな値を設定します。逆に、ファイルサイズを増やして画質を上げたい場合は18より小さな値を設定します。
-c:a copyはオーディオについては再エンコードしないという設定です。AACで再エンコードしたい場合は-c:a aac -b:a 192kのような感じで設定します。(192kはオーディオのビットレートです。)
リンク
Encode/YouTube – FFmpeg
https://trac.ffmpeg.org/wiki/Encode/YouTube