私自身の経験から、もし品質の損失を絶対に望まないなら、ロスレスはあなたが探しているものです。
よくわかりませんavconv
が、入力したコマンドは、私がやっていることと同じに見えますFFmpeg
。次のFFmpeg
ようにパラメーターを渡すことができます。
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がDTSオーディオ、ストリーム2がサブタイトルのmkvファイルの例を次に示します。
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時間形式も使用できます。
行ごとに:
-hide_banner
FFmpeg
起動時にビルド情報を表示しないようにします。コンソールを上にスクロールしたときに見たくありません。
-ss 0
入力のデコードを開始する前に0秒をシークします。入力ファイルの後、出力ファイルの前にこのパラメーターを指定すると、出力オプションになり、ffmpeg
x秒まで入力をデコードして無視し、出力への書き込みを開始するように指示することに注意してください。入力オプションとして、それはあまり正確ではありません(ほとんどのコンテナ形式ではシークが正確ではないため)が、ほとんど時間がかかりません。出力オプションとしては非常に正確ですが、指定された時間よりも前にすべてのストリームをデコードするのにかなりの時間がかかります。テストのために時間を無駄にしたくありません。
-i "INPUT.mkv"
:入力ファイルを指定します。
-attach "COVER.jpg"
:出力にカバーアート(サムネイル画像、ポスターなど)を添付します。通常、カバーアートはファイルエクスプローラーに表示されます。
-map_metadata 0
:入力0からすべてのメタデータをコピーします。この例では単なる入力です。
-map_chapters 0
:入力0からチャプター情報(存在する場合)をコピーします。
-metadata title="TITLE"
:ビデオのタイトルを設定します。
-map 0:0 ...
:入力0のストリーム0をマップします。これは、入力からの最初のストリームを出力に書き込むことを意味します。このストリームはビデオストリームであるため、出力の最初のビデオストリームであり、したがってストリーム指定子:s:v:0
です。言語タグを英語に設定します。
-map 0:1 ...
:8行目と同様に、2番目のストリーム(DTSオーディオ)をマップし、その言語とタイトルを設定します(プレーヤーから選択するときに識別しやすくするため)。
-map 0:2 ...
:9行目に似ていますが、このストリームはサブタイトルです。
-metadata:s:t:0 ...
:カバーアートのメタデータを設定します。これは、mkvコンテナ形式に必要です。
-c:v libx265 ...
:ビデオコーデックオプション。とても長いので、2行に分けました。この設定は、グラデーションのバンディングを最小限に抑えた高品質のBluayビデオ(1080p)に適しています(x265でダメ)。これは、DVDやテレビ番組、電話のビデオにとってはおそらくやり過ぎです。この設定は主にこのDoom9投稿から盗まれます。
crf=22:...
:ビデオコーデックパラメータの継続。上記のフォーラム投稿を参照してください。
-c:a copy
:音声をコピーします。
-c:s copy
:字幕をコピーします。
-t 120
:120秒後に出力への書き込みを停止します。これにより、トランスコーディングの品質をプレビューするための2分間のクリップが得られます。
"OUTPUT.HEVC.DTS.Sample.mkv"
:出力ファイル名。ビデオコーデックとプライマリオーディオコーデックでファイル名にタグを付けます。
ふう これが私の最初の回答ですので、私が見逃したものがあれば、コメントを残してください。私はビデオ制作の専門家ではありません。ディスクをプレーヤーに入れて映画を見るのが面倒です。
PS。たぶん、この質問はUnixとLinuxに強く関係していないので、他のどこかに属しているかもしれません。
--lossless
実際には、以前に損失のあったコーデックをデコードし、その後損失なしでデコードしたものを含む場合、ファイルを拡大する可能性があります。品質は入力とまったく同じままです。