私はビデオ編集に完全に精通しているので、ばかげたことを求めても許してください。
ビデオクリップを取得していますセットトップレコーダーボックスから。クリップはAVIファイルです:
Resolution: 1920 x 1080 Frames Per Second: 60 Video Format: ITU H.264 Audio Format: MPEG 1 Audio, Layer 3 (MP3)
解像度とFPSは私が必要とするものをはるかに超えているので、私は物事を縮小するコマンドを実行しようとしています:
ffmpeg -i highres.avi -r 30 -s 960x540 lowerres.avi
これにより、目的の解像度、フレームレート、ファイルサイズの縮小に成功しましたが、品質が予想以上に低下しました。
新しいファイルを調べたところ、何らかの理由でFFmpegが使用されている形式を変換していることがわかりました。
Video Format: FFmpeg MPEG-4 Audio Format: MPEG 1 Audio, Layer 2
理由がわかりません。入力形式と同じ出力形式を使用しません。このコマンドを使用して、H.264を強制的に使用しようとしました:
ffmpeg -i highres.avi -r 30 -s 960x540 -f h264 lowerresforceh264.avi
残念ながら、失敗しました次の出力が表示されます:
ffmpeg version 0.7.3-4:0.7.3-0ubuntu0.11.10.1, Copyright (c) 2000-2011 the Libav developers built on Jan 4 2012 16:21:50 with gcc 4.6.1 configuration: --extra-version="4:0.7.3-0ubuntu0.11.10.1" --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --enable-shared --disable-static WARNING: library configuration mismatch avutil configuration: --extra-version="4:0.7.3ubuntu0.11.10.1" --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-libopenjpeg --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdirac --enable-libmp3lame --enable-librtmp --enable-libx264 --enable-libxvid --enable-libvo-aacenc --enable-version3 --enable-libvo-amrwbenc --enable-version3 --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay avcodec configuration: --extra-version="4:0.7.3ubuntu0.11.10.1" --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-libopenjpeg --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdirac --enable-libmp3lame --enable-librtmp --enable-libx264 --enable-libxvid --enable-libvo-aacenc --enable-version3 --enable-libvo-amrwbenc --enable-version3 --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay avformat configuration: --extra-version="4:0.7.3-0ubuntu0.11.10.1" --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay avdevice configuration: --extra-version="4:0.7.3-0ubuntu0.11.10.1" --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay avfilter configuration: --extra-version="4:0.7.3-0ubuntu0.11.10.1" --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay swscale configuration: --extra-version="4:0.7.3-0ubuntu0.11.10.1" --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay postproc configuration: --extra-version="4:0.7.3-0ubuntu0.11.10.1" --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay libavutil 51. 7. 0 / 51. 7. 0 libavcodec 53. 6. 0 / 53. 6. 0 libavformat 53. 3. 0 / 53. 3. 0 libavdevice 53. 0. 0 / 53. 0. 0 libavfilter 2. 4. 0 / 2. 4. 0 libswscale 2. 0. 0 / 2. 0. 0 libpostproc 52. 0. 0 / 52. 0. 0 Input #0, avi, from "highres.avi": Metadata: comment : Quality_GOOD encoder : Lavf52.64.2 encoded_by : AverMedia_c281_1.7.2 Duration: 00:01:59.28, start: 0.000000, bitrate: 10263 kb/s Stream #0.0: Video: h264 (High), yuv420p, 1920x1080, 59.94 fps, 59.94 tbr, 59.94 tbn, 119.88 tbc Stream #0.1: Audio: mp3, 48000 Hz, stereo, s16, 128 kb/s [buffer @ 0x8f438a0] w:1920 h:1080 pixfmt:yuv420p [scale @ 0x8f431e0] w:1920 h:1080 fmt:yuv420p -> w:960 h:540 fmt:yuv420p flags:0x4 [libx264 @ 0x8f0fb40] broken ffmpeg default settings detected [libx264 @ 0x8f0fb40] use an encoding preset (e.g. -vpre medium) [libx264 @ 0x8f0fb40] preset usage: -vpre <speed> -vpre <profile> [libx264 @ 0x8f0fb40] speed presets are listed in x264 --help [libx264 @ 0x8f0fb40] profile is optional; x264 defaults to high Output #0, h264, to "lowerresforceh264.avi": Stream #0.0: Video: libx264, yuv420p, 960x540, q=2-31, 200 kb/s, 90k tbn, 30 tbc Stream mapping: Stream #0.0 -> #0.0 Error while opening encoder for output stream #0.0 - maybe incorrect parameters such as bit_rate, rate, width or height
なぜこれができないのかわかりません。「ffmpeg-formats」を実行すると、h264が使用できるものとしてリストされます。入力と出力の両方について。
誰かが私を正しい方向に向けることができれば、私はそれを大いに感謝します。ありがとう。
PS:Ubuntu11.10でFFmpegバージョン0.7.3-4:0.7.30を使用しています。
編集
私はプリセットの使用を検討する解決策を見つけました。プリセットに関する情報を探した後、それらについて説明している次のチュートリアルを見つけました。
http://juliensimon.blogspot.com/2009/01/howto-ffmpeg-x264-presets.html
コーデックと適切なプリセット設定を次のように指定する必要がありました:
ffmpeg -i highres.avi -r 30 -s 960x540 -vcodec libx264 -vpre medium lowerresforceh264vpremedium.avi
まだ調整が必要ですが、これは基本的に私が欲しかったものです。ありがとう。
コメント
- Avermedia .aviファイル.mp4を変換して、Mountain Lion / Mavericksで再生する方法を知りたいだけの人もいます。< pre > ffmpeg -i 140203-1229.avi -vcodec copy -acodec copy fromavermedia_cog.mp4 < / pre >
回答
I ” m助けようとしています。まず、FFMPEG H.264が入力形式ではないと言っている理由がわかりませんか?
FFMPEGコマンドラインを十分に理解していません(誰かいますか?しますか?;))。マルチパスエンコーディング用のスイッチが必要です。おそらく使用でき、ほぼ確実に目的の機能を実行できる組み込みのプリセットがいくつかあることを私は知っています。これらは通常、x264プリセットまたはx264チューンと呼ばれます。そのようなものを見つけることができますか?
コメント
- ありがとう。プリセットについてのあなたの話は、私がありそうな解決策を見つけるのを助けました。 ‘投稿を編集して、自分が行ったことを表示します。
- すばらしい解決策です。スニペットのコレクションに追加されました。ありがとう。
- @BigBeagle:質問に対する回答を見つけたら、回答として投稿できます。質問の編集は、質問をより明確にするために行われます。私が理解しているように、回答は回答セクションにあります。
回答
ffmpegはx264プリセットを削除したため、 -vpre設定が機能しなくなりました。
これで、ビデオファイルを携帯電話で処理できる形式に変換するためのスクリプトができました。
ffmpeg -i input.avi -sws_flags lanczos+accurate_rnd -vf "scale=320:240" -c:v libx264 -crf 20 -preset veryslow -profile:v main -tune fastdecode -c:a copy output.mkv
各オプションについて説明します
-sws_flags lanczos+accurate_rnd
このオプションはダウンスケーリングアルゴリズムです。ぼやけることなくアーティファクトが最小になるため、lanczosをお勧めしますが、遅い。
-vf "scale=..."
は自明です出力解像度を指定します
-crf 20
これは品質、20は良い最終(編集前に使用しないでください)出力設定です。これは一定の品質であり、ファイルサイズがタイトでない場合に最適なオプションであり、他の何よりも最小のファイルサイズでより良い品質を生成します。特定のファイルサイズ(CDまたはDVDに収める必要があるなど)で最高の品質を実現するための2つのパス、固定ビットレート(例:)はストリーミング時にのみ使用する必要があります。特殊なケースは「0」で、ロスレスであり、このオプションの範囲は1(最高品質)から50(最低品質)です。
これに対する良いテストは、-crf 20でエンコードを実行し、ビットレートをメモしてから、それをファイルの2番目のバージョンの-b設定として使用することです。両方とも同じファイルサイズである必要があります。2つを比較してください。品質の違い。
-preset veryslow
これにより、使用するCPUの量が選択され、速度が低下します。ファイルサイズが小さくなり、品質が向上します。
-profile:v main
これは H.264プロファイルですを使用します。高はファイルサイズの面で最も効率的ですが、他の形式と比較してデコードに多くのCPUを使用します。ほとんどの携帯電話にはハードウェアデコーダーが組み込まれており、フラッシュプレーヤーがそれをサポートしているため、最も人気があると言われています。 mainを使用します。
-tune fastdecode
私の携帯電話は、このオプションなしでファイルを再生するのが好きではありませんが、通常、これは空白のままにするか、ビデオゲームの場合は「フィルム」に設定できます。これを使用する主な理由は、品質を少し向上させるためです。
最後に、最新のコンテナ形式を使用することを強くお勧めします。.aviは「H.264を保持するように設計されておらず、私が理解していることから」 ■H.264を保存したり、ファイルを2GBより大きくしたりするための標準はありません。ほとんどの実装はハッキングであり、問題が発生しやすいため、mkvまたはmp4を使用してください。
コメント
- libx264のプリセットは、
-preset slow
- iv id = “のように、
-preset
によって指定されるようになりました。 8ef8c49f49 “>
は、非ブロック化、重み付けされたBフレームとPフレーム、およびCABACを無効にします。Bフレームは処理できますが、CABACは処理できないデコーダーがありますか?-profile:v baseline
、古いハードウェアデコーダーをターゲットにする必要がある場合。(fastdecode
は、softwaをターゲットにする場合に役立ちます。低速のCPUでデコーダーを再作成しますが、ハードウェアデコーダーは使用しません。)メインはBフレームですが、非ブロック化またはCABACは、非ブロック化を使用したベースラインよりも見栄えがよい場合とそうでない場合があります。 h.264の保存に非AVIを推奨する場合は+1。 IIRC、メインはBフレームですが、aviのh.264は十分に標準化されておらず、’ハッキーです。
-crf 20
をハイファイナルと呼びます。 ‘スポーツイベントのように動きが激しい場合を除いて、22または24に変更でき、おそらく問題ありません。回答
明確にすることがいくつかあります:
- 形式は コーデックではありません。 h264でエンコードされたビデオを含むavi 形式のファイルを取得するコーデック。 -vcodec libx264 と .avi のファイル名を使用するだけです。 Ffmpegはファイル拡張子を見ることでフォーマットを認識するはずですが、 -f avi を追加することもできます。 はmpeg1を使用したくないことは間違いありません。mpeg2よりも品質が悪いか、mpeg4と比較してさらに悪いからです。
- 問題は、何も指定しなかったため、ffmpegが可能な限り低い品質を使用したことでした。-sameqオプションが機能することはめったにありません。実際、ビットレートを手動で設定するのは非常に簡単です。たとえば、 -vb 3000k を追加して、平均 video ビットレートが3Mb / sのファイルを取得します。これにより、非常に優れた品質が得られます。これで十分だと思います。上記の解像度で2Mb / sにする必要があります。
- ファイルサイズを小さくするための鍵は解像度ではなく、上記のビットレートです。元の解像度を維持し、ビットレートを操作するだけです。
- オーディオも変換せずに(つまり品質を損なうことなく)保持したいので、 -acodec copy を使用します。
これを試してください: ffmpeg -i highres.avi -acodec copy -vcodec libx264 -vb 2000k lower res.avi
コメント
- 固定ビットレートは、すべてのレート制御モードの中で(品質とサイズの点で)最悪です。 x264であり、避ける必要があります。代わりに、
-crf
を使用して一定品質モードを設定します。