スペースを確保するためにビデオライブラリをHEVC形式に変換しようとしています。ライブラリ内のすべてのビデオファイルに対して次のコマンドを実行しました:

 #!/bin/bash for i in *.mp4; do #Output new files by prepending "X265" to the names avconv -i "$i" -c:v libx265 -c:a copy X265_"$i" done  

現在、ほとんどのビデオは正常に変換され、品質は以前と同じです。ただし、非常に高品質のいくつかのビデオ(たとえば、5 GBの1つのムービープリント)は品質が低下します。ビデオはすべてピクセル化されます。

この場合の対処方法がわかりません。コマンドラインでcrfパラメーターを変更する必要がありますか?それとも何か他のものですか?

問題は、私が一括変換を行っているということです。そのため、動画ごとにavconvが調整が必要なパラメータを自動的に調整するメソッドが必要です。

UPDATE-1

crfは調整する必要のあるノブです。デフォルトのCRFは28です。品質を向上させるために、28未満のものを使用できます。例:

avconv -i input.mp4 -c:v libx265 -x265-params crf=23 -c:a copy output.mp4 

ただし、問題は、一部の動画のCRFにあります。 28の値で十分ですが、一部のビデオでは、より低いCRFが必要です。これは、大きなビデオの小さなセクションを変換して手動で確認する必要があるものです。しかし、一括変換では、各ビデオを手動で確認するにはどうすればよいですか? avconvが入力ビデオに応じてCRFをインテリジェントに調整できる方法はありますか?

UPDATE-2

x265の--losslessオプション: http://x265.readthedocs.org/en/default/lossless.html

しかし、正しく使用する方法がわかりません。次の方法で使用しようとしましたが、逆の結果が得られました(ビデオはさらにピクセル化されました):

avconv -i input.mp4 -c:v libx265 -x265-params lossless -c:a copy output.mp4 

コメント

  • --losslessは、以前に損失があったコーデックをデコードしてから、ファイルを拡大する可能性があります。ロスレスでデコードした内容を示します。品質は入力とまったく同じです。
  • ソースが不可逆でエンコードされている場合(最も可能性が高い)、達成しようとしていることは不可能です。ロスレスではない場合、品質がさらに低下し(すぐに表示されなくても)、ロスレスからロスレスに変換すると、ファイルサイズが大きくなります。 。

回答

私自身の経験から、品質の低下をまったく望まない場合、-losslessは探しているもの。

avconvについてはよくわかりませんが、入力したコマンドは、FFmpegFFmpegでは、次のようにパラメータを渡すことができます。

ffmpeg -i INPUT.mkv -c:v libx265 -preset ultrafast -x265-params lossless=1 OUTPUT.mkv 

ほとんどのx265スイッチ(値のないオプション)は、次のように指定できます(CLIのみのスイッチを除き、x265バイナリで直接使用されます)。

これで、x265エンコーディングの経験を共有したいと思います。ほとんどの動画(WMV、MPEG、AVC)で/H.264)crf=23を使用します。x265が残りのパラメーターを決定し、通常は十分に機能します。

ただし、ビデオ全体をトランスコードする前に、問題のビデオのごく一部を変換して設定をテストすることがよくあります。ここに例を示します。ストリーム0がビデオ、ストリーム1のmkvファイルを想定します。 DTSオーディオであり、ストリーム2がサブタイトルである:

ffmpeg -hide_banner \ -ss 0 \ -i "INPUT.mkv" \ -attach "COVER.jpg" \ -map_metadata 0 \ -map_chapters 0 \ -metadata title="TITLE" \ -map 0:0 -metadata:s:v:0 language=eng \ -map 0:1 -metadata:s:a:0 language=eng -metadata:s:a:0 title="Surround 5.1 (DTS)" \ -map 0:2 -metadata:s:s:0 language=eng -metadata:s:s:0 title="English" \ -metadata:s:t:0 filename="Cover.jpg" -metadata:s:t:0 mimetype="image/jpeg" \ -c:v libx265 -preset ultrafast -x265-params \ crf=22:qcomp=0.8:aq-mode=1:aq_strength=1.0:qg-size=16:psy-rd=0.7:psy-rdoq=5.0:rdoq-level=1:merange=44 \ -c:a copy \ -c:s copy \ -t 120 \ "OUTPUT.HEVC.DTS.Sample.mkv" 

長いコマンドでバックスラッシュ信号線が途切れることに注意してください。追跡しやすくするために行います。複雑なCLI入力のさまざまなビットの。行ごとに説明する前に、ビデオのごく一部のみを変換する部分は、2行目と最後から2行目です。-ss 0は、0秒前にシークすることを意味します。入力のデコードを開始し、-t 120は120秒後に出力への書き込みを停止することを意味します。 hh:mm:ssまたはhh:mm:ss.sssの時間形式を使用することもできます。

行ごとに:

  1. -hide_bannerは、FFmpegが起動時にビルド情報を表示しないようにします。コンソールを上にスクロールしたときに表示したくないだけです。
  2. -ss 0入力のデコードを開始する前に0秒をシークします。このパラメータの場合は注意してください。入力ファイルのと出力ファイルのが与えられると、出力オプションになり、ffmpegは、x秒まで入力をデコードして無視し、出力への書き込みを開始します。入力オプションとしては、精度が低くなりますが(ほとんどのコンテナー形式ではシークが正確ではないため)、ほとんど時間がかかりません。出力オプションとしては非常に正確ですが、指定された時間より前にすべてのストリームをデコードするのにかなりの時間がかかります。テスト目的では、時間を無駄にしたくありません。
  3. -i "INPUT.mkv":入力ファイルを指定します;
  4. -attach "COVER.jpg":カバーアート(サムネイル画像、ポスターなど)を出力に添付します。カバーアートは通常、ファイルエクスプローラーに表示されます。
  5. -map_metadata 0:入力0からすべてのメタデータをコピーします。この例では単なる入力です。
  6. -map_chapters 0:入力0からチャプター情報(存在する場合)をコピーします;
  7. -metadata title="TITLE":ビデオのタイトルを設定します;
  8. -map 0:0 ...:入力0のストリーム0をマップします。これは、入力からの最初のストリームを出力に書き込むことを意味します。 。このストリームはビデオストリームであるため、出力の最初の video ストリームであり、したがってストリーム指定子:s:v:0です。言語を設定するタグを英語に;
  9. -map 0:1 ...:8行目と同様に、2番目のストリーム(DTSオーディオ)をマッピングし、その言語とタイトルを設定します(選択時に識別しやすくするため)プレーヤーから);
  10. -map 0:2 ...:このストリームが字幕であることを除いて9行目と同様です;
  11. -metadata:s:t:0 ...:カバーアートのメタデータを設定します。これはmkvコンテナ形式に必要です;
  12. -c:v libx265 ...:ビデオコーデックオプション。とても長いので、2行に分けました。この設定は、グラデーションのバンディングが最小限の高品質のブルーレイビデオ(1080p)に適しています(x265では問題ありません)。 DVDやテレビ番組、電話のビデオではやり過ぎである可能性が高いです。この設定は、ほとんどがこのDoom9投稿から盗まれています;
  13. crf=22:...:ビデオコーデックの続きパラメーター。上記のフォーラム投稿をご覧ください;
  14. -c:a copy:音声をコピーします;
  15. -c:s copy :字幕をコピーします;
  16. -t 120:120秒後に出力への書き込みを停止します。これにより、転写品質をプレビューするための2分間のクリップが得られます。
  17. "OUTPUT.HEVC.DTS.Sample.mkv":出力ファイル名。ファイル名にビデオコーデックとプライマリオーディオコーデックのタグを付けます。

ふぅ。これが私の最初の答えですので、私が見逃したことがあればコメントを残してください。私はビデオ制作の専門家ではありません。ディスクをプレーヤーに入れて映画を見るのが面倒なだけの男です。

PS。この質問は別の場所にあるのかもしれません。 Unix & Linuxとは強く関連していません。

コメント

  • まさに私が探していたものです。 !オプションの素晴らしい報道。字幕コンテンツがない場合、ffmpegがc:s copyでボークするかどうか知っていますか?
  • @ElderGeekいいえ、ffmpegはそのオプションが効果がある場合にのみ何かを言います。
  • @TheBitByteはい、いいえ、と思います。 'ロスレスh265ファイルは必要ありません。 'は、圧縮なしの生のビットストリームです。 'は巨大です。私がh265または特にx265の実装について理解していることから、これは可逆圧縮方式ではありません。圧縮を行うと情報が失われますが、必ずしも表示品質が低下するわけではありません。しかし、私は' h265トピックの専門家ではないため、'何かを見逃した可能性があります
  • @ TheBitByte ' h265には可逆圧縮レベルがあるとは思いません。圧縮なしのオプションの場合、'は--losslessです。 h264からh265へのロスレス変換を無駄に検索しましたが、'学んだことから、数学的に不可能であることがわかりました。' / li>
  • --losslessスイッチを含むコマンドを実際に編集して、この回答から外す必要があります。この質問への回答としてそこに置くと、それは'ロスレス圧縮であり、誤解を招くと言っています。

回答

最近、ビデオカタログ全体をHEVCにトランスコードする問題が発生しました。 次の設定で。

h265ize -v -m medium -q 20 -x –no-sao- -aq-mode 3 –delete –stats

-v -詳細出力
-m medium -Mediumエンコード速度(品質が小さいほど、品質が遅いと時間/品質の違いはありません)
-q 20 -使用されるCRF、20はx264の18程度に似ていますが、ちょっと。これは1080pコンテンツ(テレビの90%)用です。4K映画には22を使用する傾向があります
-x -x265中央定義コマンドを使用します
-no-sao はサンプル適応オフセットをオフにします(エンコードの速度を向上させます)
-aq-mode 3 -自動分散で適応量子化を使用し、特に暗い領域で8ビットエンコードを停止します発生する可能性のあるバンディングのほとんど(ただし、エンコード時間は犠牲になります)
-delete -エンコードファイルを次のように置き換えますエンコードされたファイル(これを使用する前にテスト)
-stats -ルートのcsvファイルに統計を書き込みます

私のリグでは、エンコード速度は約30fps(ほとんどの1080pのもの)です。デュアルXeonE5 2687W v2ですが、FFMPEGプロセスでいずれかのプロセッサの最初の側を使用しないように強制します(これは私のPlexサーバーなので、再生などで必要な場合は、トランスコードのオーバーヘッドがあることを確認する必要があります)

はい、ほとんどを変換するのに時間がかかりました。今では、1日2回実行して、その日からx265にエンコードするスケジュールされたタスクがあります。

スペースの節約巨大でした。私の最初のSANは20Tbで使用されていましたが、現在は約12ですが、明らかに6か月のコンテンツが追加されています。

すべての映画のトランスコードも開始しましたが、それは進行中のプロセス。品質レベルを識別し(Radarrは幸いなことにラベルを付けてからうまくラベル付けします)、次の3つのトランスコード設定のいずれかを使用する必要があります。 > -m medium -q 20 -x --no-sao --aq-mode 3 for 1080p
-m medium -q 22 -x --no-sao for 2160p

一部の人に役立つことを願っています。誰かが必要な場合は叫んでください。すべてを手作業で設定します。すべてをx265にエンコードする前に、再生について考えます。クライアントがx265ネイティブをサポートしていない場合、トランスケードはCPUと品質の点で高価になる可能性があります。

コメント

  • x265 2.4以降(よりシャープなエンコードを提供する新しいラムダテーブルを使用)では、SAOは通常ビットレートあたりの品質には良いことです。それでもわずかに汚れますが、それだけの価値がある他のアーティファクトを十分に減らします。
  • -q 20はCRF20ではありません。' s 一定のQPレート制御 。デフォルトの推奨モードであるCRFは、複雑度の高いシーンでQPをいくらか上げるので、'難しすぎるシーンにあまりにも多くのビットを費やすことはありません。エンコード。 (均一なQPに近づけたい場合は、qcompをデフォルトの0.6から0.7または0.8に上げます。1.0に近いほどCQPに近くなります。)
  • 方法'ソースが何であるかわからない場合、hdr / sdrエンコードを処理しますか?

回答

ffmpegでx265エンコーダーのロスレスモードを有効にする正しい構文は-x265-params lossless=1です(=1)。

ただし、ロスレスコーディングには、より適切なコーデックの選択肢があります。 FFV1 は、少なくとも一部の種類のビデオ(両方に最適な設定が選択されている場合)で非常に優れた圧縮率(ファイルサイズ= x265の約80%)であることがテストでわかりました。コーデック)。また、動作も速く、(AFAIK)は特許に邪魔されません。つまり、ビデオアーカイブに関しては、あらゆる点でロスレスH.265よりも優れています。ただし、妥協点は、現在の再生ソフトウェアおよびハードウェアとの互換性です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です