web-dev-qa-db-ja.com

MKVビデオをWindowsのiOSデバイスと互換性のあるロスレスMP4ビデオに変換する方法は?

私はFFmpeg(Windows)を使い始めたばかりで、助けが必要です。

MKVをMP4に変換し、品質の低下をできるだけ少なくしたいと考えています。 MKVはMakeMKVで作成され、とりわけDTSサウンドトラックを含みます。それらはロスレスです。変換したいのは、iPadにストリーミングするつもりであり、AppleTV。iPadはDTS=およびMKVをサポートしていません。MKVはどちらもDVDとBlu-Rayです。MKVにはビデオ、サウンドトラック、字幕が含まれています。

私はこれを試しましたが、DTSサウンドトラックが原因で音が出ません:

ffmpeg -i input.mkv -c:v copy -c:a copy output.mp4

誰かが私を助けてくれますか?

どのコーデックを使用すればよいですか? MP4はAppleに最適ですか?

10
Striky

MP4は確かにAppleデバイスとソフトウェアに最適な形式です。DTSも実際にはサポートされていません。多くのMP4ビデオファイルには2つのオーディオトラックが含まれています。1つDTSおよび1つのAAC。

利用可能な複数のエンコーダがあり、それらはすべて ffmpeg wiki に文書化されています。使用可能なコーデックは、ffmpegのコンパイル方法によって異なります。 libfdk_aacを使用すると最良の結果が得られますが、このコーデックはフリーではないため、常に利用できるとは限りません。

あなたが試すことができるもの(私はそれらを私の認識された品質の順に並べます、最高のものから)

ffmpeg -i input.mkv -c:v copy -c:a libfdk_aac -b:a 128k output.mp4
ffmpeg -i input.mkv -strict experimental -c:v copy -c:a aac -b:a 192k output.mp4
ffmpeg -i input.mkv -c:v copy -c:a libfaac -b:a 192k output.mp4

DTSトラックも保持したい場合は、 -map フラグを使用します。

OPには直接使用しませんが、OS Xプログラム subler を使用すると、このプロセスが非常に簡単になります。

編集:コメントtl; dr? OPは次のコマンドで問題を解決しました

ffmpeg -i input.mkv -strict experimental -map 0:0 -map 0:1 -map 0:2 -map 0:3 -c:v copy -c:a aac -b:a 384 -c:s copy output.mp4

ヒント:字幕の-c:s copyが機能しない場合は、-c:s mov_textをお試しください。
何度も助けてくれました。

22
jornane

私はこれが古い質問であることを知っています—すでに回答があります–しかし、macOSのFFmpegで使用しているいくつかのコマンドを共有したいと思いました。

MKVからのAACオーディオを含むx264ビデオエンコードMP4

MP4を含むMKVの基本的な変換ですが、オーディオを128kでAACに変換します。マッピングに注意してください:-map 0:0はソース入力(0)からの最初の(0)トラックを意味し、-map 0:1はからの2番目の(1)トラックを意味します同じソース入力(0)。複数のオーディオトラックがある場合にこれを行うのが好きなので、select -map 0:3などを実行して3番目のトラックを取得できます。

ffmpeg -i input.mkv \
       -c:v copy \
       -c:a aac -b:a 128k \
       -map 0:0 -map 0:1 \
       output.mp4 \
       ;

MKVからのAACオーディオを含むHEVC/x265ビデオエンコードMP4

これは上記のx264コマンドに似ていますが、代わりにHEVC/x265を使用して、ソースのMKVから同じ品質のビデオではなくてもより小さなファイルサイズを取得します。 HEVC/x265を使用する場合、私はiOSビデオを720にスケーリングすることを好みます。私のMacBook、iPad、iPhoneは、ノイズの少ない再生品質がしっかりしています。ハードウェアとOSがHEVC/x265再生をサポートしていることを確認してください。また、HEVC/x265はCPUに非常に負荷がかかるため、マシンにCPU能力が十分にない場合、90分のビデオをエンコードするのに1日程度かかることがあります。

ffmpeg -i input.mkv \
       -vf scale=-1:720 \
       -c:v libx265 -crf 20 \
       -c:a aac -b:a 128k \
       -threads 4 \
       -tag:v hvc1 \
       -map 0:0 -map 0:1 \
       output.mp4 \
       ;

以下は、入力ファイルと出力ファイル以外の各コアパラメータの内訳です。

  • -vf scale=-1:720:ビデオを高さ720にスケーリングし、幅を自動的に計算します。 FFmpegがMKVを詰まらせる可能性があることに注意してくださいsome私が100%明確にしていないため、次のように幅を明示的に設定する必要があります:-vf scale=1280:720。何がうまくいくか実験してみてください。
  • -c:v libx265 -crf 20libx265は、ビデオエンコーディングコーデックです。 -crf 20CRF(定率係数) です。指定しない場合のデフォルトのCRFは28ですが、現在のところ、品質がかなり高いことがわかります。品質とファイルサイズのバランスが非常に良いので、20を選択します。
  • -threads 4:スレッド数を指定したい。私のシステムは現在4で処理できますが、2または3に減らすこともあります。処理するのに十分なCPUがあれば、数値が大きいほど速くなります。
  • -tag:v hvc1:iOSデバイスがHEVC/x265ビデオを適切に再生するために導入する魔法のメタデータ設定。

そしてそれはそれについてです!

0
JakeGould