Ffmpeg Nvidia GPU mkv エンコーディング出力ファイル サイズ

Ffmpeg Nvidia GPU mkv エンコーディング出力ファイル サイズ

私は以下の環境で作業してきました。

ウブントゥ 16.04.3

FFmpeg: 3.4.2

-- configuration: --prefix=/usr/local/ffmpeg_new/ --enable-cuda --enable-cuvid --enable-nvenc --enable-nonfree --enable-libnpp --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64 --enable-libvpx --enable-libvorbis --enable-libfreetype

クーダ9.1.85

GPU: GeForce GTX 1080ti

メディア ファイルが 2 つあります: caller_video.webm (80 MB) と callee_video.webm (120 MB)

次に、以下のコマンドを使用してこれらのビデオからオーディオを分離します。

time ffmpeg -y -i caller.webm -vn -ab 256 caller.wav

Caller.wav= 260MB

次に、caller.wavファイルを多重化してcallee_video.webm

time ffmpeg -y -i callee_video.webm -i caller.wav -filter_complex '[0:a]aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo,volume=0.5[a1]; [1:a]aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo,volume=0.5[a2]; [a1][a2]amerge,pan=stereo|c0<c0+c2|c1<c1+c3[out]' -map 0:v -map '[out]' -c:v copy  tempfile.mkv

一時ファイルのファイルサイズ: 87MB

次に、以下のコマンドを使用して一時ファイルをエンコードします。

time ffmpeg -y -i temp_file.mkv    -pixel_format yuv444p -preset default  -vf  drawtext=fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf:x=8:y=8:fontsize=16:fontcolor=yellow@1:expansion=strftime:basetime=1518172680000000:text='%Y-%m-%d %H-%M-%S'  -acodec libvorbis  -c:v h264_nvenc   final_video.mkv

最終ビデオサイズ: 270 MB

orig webm私が理解しようとしているのは、80MB のファイルをエンコードすると、エンコードされた出力 mkv ファイルのサイズが約 20MB になるということです。

しかし、エンコード前のサイズが 87 MB である多重化された一時メディア ファイル ( callee_video.webm+ )に対して同じ操作を実行すると、270 MB になります。caller.wav

何が足りないのか、何が間違っているのか?

答え1

エンコード コマンドに品質またはビットレート設定が指定されていないため、エンコーダーが選択することになります。これにより、ビットレートが大きくなる可能性があります。

1 Mbit/s でのシングルパス平均ビットレート エンコードを使用するように指定できます-b:v 1M。ビットレートは、ビデオのサイズと品質要件によって異なります。

また、QP 23 で可変ビットレート固定品質エンコードを実行するためにも使用できます-qp 23。QP が高いほど品質は低くなり、QP が低いほど品質は低くなります。

ffmpeg -h encoder=h264_nvencエンコーダーの可能なオプションについては を参照してください。

関連情報