私はh.264コーデックを使ってMP4にAVIファイルを圧縮したいです。私は同じ品質を得ることができませんでした。どうすれば圧縮できますか?
元のビデオ画面:
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
FFmpegコマンド:
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
FFmpegコマンド:
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
まず最初に、より新しいバージョンのFFmpegをインストールしてください - ダウンロードページ から静的ビルドを入手してください。
vpre
プリセット(これはエンコーダ設定ではなくffmpeg設定のデフォルト値を設定する方法です)の使用は実際には必要ありません。通常は、エンコーダで定義されている-preset
オプションを使用します。
あなたが低い出力品質を得る理由はあなたの2つの場合それぞれ、以下の通りです:
最初のケースではcrf 25
を使用します。 Constant Rate Factor これはx264エンコーダーのデフォルト(23)よりも品質が劣ります。 CRFが品質を管理します。低いCRF、おそらく20、18などを設定してみてください。ここでは、低いほど品質が良くなりますが、ファイルサイズが大きくなります。 CRFを6に変更すると、おおよそ、元の平均ビットレートの2分の2になります。
generation loss のため、低いCRFを設定する必要があります。すでにエンコードされているものをエンコードしているので、ここでもビジュアル情報を捨てています。それは決して良いことではありませんが、あなたがしなければならないならば、あなたは入力ビデオからあまりにも多くの情報を取り除かないようにより高い品質を設定しなければならないでしょう。
2番目のケースでは、2 MBit/sの固定ビットレートを設定しようとしています。あなたの入力ビデオはだいたい同じビットレートを持っています。現在、x264は同じビットレートでMPEG-4ビジュアルエンコーダーよりもはるかに優れたビジュアル品質を提供しますが、世代損失のために、元のものよりもさらに高いビットレートを使用したい場合がありますあまりにも多くの情報を圧縮してしまうでしょう。
さらに、一定のビットレートエンコーディングでは、一部のパッセージは見栄えが良くなりますが、ビデオの他の部分は見栄えが悪くなる可能性があります。エンコーダが何かに費やしたいビット数を自由に選択しないようにすると、ターゲットファイルのサイズを知ることを犠牲にして品質を犠牲にすることになります。
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
プリセットを選択することもできます。これにより圧縮率が向上しますが、エンコードには明らかに時間がかかります。
あなたが適当なファイルサイズでまともな品質のファイルを手に入れることができないならば、あなたは運が悪いです。再エンコードせずに、元のファイルをそのままにしておくことをお勧めします。すでに圧縮されているものを圧縮するときに、「同じ品質を維持する」ツールはありません。