ffmpeg – 同じ品質を維持するMP4(H.264)にAVI(Xvid)を変換する

ffmpeg h.264 video-conversion video-encoding

私はh.264コーデックを使用してMP4にAVIファイルを圧縮したいです。私は同じ品質を得ることができませんでした。どのように圧縮することができますか?

Original Video:

オリジナルビデオ画面

FFmpegのコンソール出力(ffmpeg -i input.avi)

FFmpeg version SVN-r26402, Copyright (c) 2000-2011 the FFmpeg developers
built on Dec 28 2012 10:03:40 with gcc 4.4.6 20120305 (Red Hat 4.4.6-4)
configuration: --enable-shared --enable-gpl --enable-version3 --enable-nonfree                                                                                         --enable-pthreads --enable-x11grab --enable-libopencore-amrnb --enable-libopenc                                                                                        ore-amrwb --enable-libdc1394 --enable-libfaac --enable-libmp3lame --enable-libop                                                                                        enjpeg --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libx264                                                                                         --enable-libxvid --enable-zlib --enable-filter=drawtext
libavutil     50.36. 0 / 50.36. 0
libavcore      0.16. 1 /  0.16. 1
libavcodec    52.108. 0 / 52.108. 0
libavformat   52.93. 0 / 52.93. 0
libavdevice   52. 2. 3 / 52. 2. 3
libavfilter    1.74. 0 /  1.74. 0
libswscale     0.12. 0 /  0.12. 0
[mpeg4 @ 0x626b50] Invalid and inefficient vfw-avi packed B frames detected
Input #0, avi, from 'input.avi':
Metadata:
encoder         : VirtualDubMod 1.5.10.2 (build 2542/release)
Duration: 01:32:38.13, start: 0.000000, bitrate: 2094 kb/s
Stream #0.0: Video: mpeg4, yuv420p, 720x304 [PAR 1:1 DAR 45:19], 23.98 tbr,                                                                                         23.98 tbn, 23.98 tbc
Stream #0.1: Audio: ac3, 44100 Hz, 5.1, s16, 384 kb/s
At least one output file must be specified

Test 1

FFmpeg command:

ffmpeg -i input.avi -vcodec libx264 -vpre lossless_slow -crf 25 -acodec libfaac -threads 0 -t 60 1.mp4

テスト1画面

FFmpegのコンソール出力(ffmpeg -i 1.mp4)

    FFmpeg version SVN-r26402, Copyright (c) 2000-2011 the FFmpeg developers
built on Dec 28 2012 10:03:40 with gcc 4.4.6 20120305 (Red Hat 4.4.6-4)
configuration: --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-pthreads --enable-x11grab --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libdc1394 --enable-libfaac --enable-libmp3lame --enable-libopenjpeg --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-zlib --enable-filter=drawtext
libavutil     50.36. 0 / 50.36. 0
libavcore      0.16. 1 /  0.16. 1
libavcodec    52.108. 0 / 52.108. 0
libavformat   52.93. 0 / 52.93. 0
libavdevice   52. 2. 3 / 52. 2. 3
libavfilter    1.74. 0 /  1.74. 0
libswscale     0.12. 0 /  0.12. 0
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '1.mp4':
Metadata:
major_brand     : isom
minor_version   : 512
compatible_brands: isomiso2avc1mp41
creation_time   : 1970-01-01 00:00:00
encoder         : Lavf52.93.0
Duration: 00:01:00.01, start: 0.000000, bitrate: 618 kb/s
Stream #0.0(und): Video: h264, yuv420p, 720x304 [PAR 1:1 DAR 45:19], 437 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc
Metadata:
creation_time   : 1970-01-01 00:00:00
Stream #0.1(und): Audio: aac, 44100 Hz, 5.1, s16, 176 kb/s
Metadata:
creation_time   : 1970-01-01 00:00:00
At least one output file must be specified

Test 2

FFmpeg command:

ffmpeg -y -i input.avi -pass 1 -vcodec libx264 -vpre slow -b 2000k -threads 0 -t 60 -f mp4 -an -y /dev/null
ffmpeg -y -i input.avi -pass 2 -vcodec libx264 -vpre slow -b 2000k -threads 0 -t 60 -acodec libfaac -ab 128k -ac 2 2.mp4

テスト2画面

FFmpegのコンソール出力(ffmpeg -i 2.mp4)

FFmpeg version SVN-r26402, Copyright (c) 2000-2011 the FFmpeg developers
built on Dec 28 2012 10:03:40 with gcc 4.4.6 20120305 (Red Hat 4.4.6-4)
configuration: --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-pthreads --enable-x11grab --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libdc1394 --enable-libfaac --enable-libmp3lame --enable-libopenjpeg --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-zlib --enable-filter=drawtext
libavutil     50.36. 0 / 50.36. 0
libavcore      0.16. 1 /  0.16. 1
libavcodec    52.108. 0 / 52.108. 0
libavformat   52.93. 0 / 52.93. 0
libavdevice   52. 2. 3 / 52. 2. 3
libavfilter    1.74. 0 /  1.74. 0
libswscale     0.12. 0 /  0.12. 0
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '2.mp4':
Metadata:
major_brand     : isom
minor_version   : 512
compatible_brands: isomiso2avc1mp41
creation_time   : 1970-01-01 00:00:00
encoder         : Lavf52.93.0
Duration: 00:01:00.01, start: 0.000000, bitrate: 1097 kb/s
Stream #0.0(und): Video: h264, yuv420p, 720x304 [PAR 1:1 DAR 45:19], 1028 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc
Metadata:
creation_time   : 1970-01-01 00:00:00
Stream #0.1(und): Audio: aac, 44100 Hz, stereo, s16, 63 kb/s
Metadata:
creation_time   : 1970-01-01 00:00:00
At least one output file must be specified

  52  mollyjane  2012-12-28


ベストアンサー

まず第一に、FFmpeg の最新バージョンをインストールします – ダウンロードページから静的ビルドを取得します

vpre プリセット (これはエンコーダの設定ではなく、FFMPEG の設定にデフォルト値を設定する方法です) の使用は実際には必要ありません

出力品質が低くなる理由は、あなたの2つのケースについて、それぞれ以下の通りです

  1. 最初のケースでは、Constant Rate Factorcrf 25を使用していますが、これはx264エンコーダのデフォルト値(23)よりも品質が悪くなります。CRFは品質をコントロールします。また、「CTRF」と呼ばれるものもあります。ここでは、低い方が画質は良いが、ファイルサイズが大きくなる。CRFを6に変更すると、大体の場合、元の平均ビットレートの2倍/半分になります

    世代損失のため、CRFを低く設定する必要があります。すでにエンコードされているものをエンコードしているわけですから、またしても視覚情報を捨てていることになります。それは決して良いことではありませんが、どうしても必要ならば、入力された映像からあまり多くの情報を取り除かないように、より高い品質に設定する必要があります

  2. 2 つ目のケースでは、2 MBit/s のビットレートを一定に設定しようとしています。入力ビデオのビットレートはほぼ同じです。x264 は、同じビットレートであれば MPEG-4 Visual エンコーダよりもはるかに優れた画質を提供しますが、生成ロスがあるため、オリジナルよりもさらに高いビットレートを使用したい場合があります

    さらに、一定のビットレートでエンコードすると、ある部分は良く見えても、他の部分は悪く見えてしまうことがあります。エンコーダが何かにかけるビット数を自由に選択できるようにしないと、ターゲットファイルサイズを知ることを犠牲にして品質を犠牲にすることになります

    x264には一定のビットレートモードがありますが、他のエンコード方式に比べて劣るとされています。実際には、2パスエンコーディングは最適な画質を目指しているわけではないので、その点はご勘弁を

そうは言っても、次のようなことを試してみてください

ffmpeg -i input.avi -c:v libx264 -crf 19 -preset slow -c:a libfdk_aac -b:a 192k -ac 2 out.mp4

libfdk_aacが利用できない場合は、代わりにこれを使用してください

ffmpeg -i input.avi -c:v libx264 -crf 19 -preset slow -c:a aac -b:a 192k -ac 2 out.mp4

メインの品質コントロールノブはCRFの設定になります。それを試してみて、より良い品質を必要とする場合は、より低い値を使用してください

また、veryslowのプリセットを選択することで、より良い圧縮が可能になりますが、エンコードには明らかに時間がかかります

あなたが合理的なファイルサイズでまともな品質のファイルを取得するために管理することができない場合は、あなたは運がないです。再エンコードせずに、元のファイルをそのままにしておく方が良いでしょう。すでに圧縮されているものを圧縮しているときに、魔法のような「同じ品質を維持する」ツールはありません

64  slhck  2012-12-28


タイトルとURLをコピーしました