Mythtvで記録されたmpg(mpeg2)ファイルをstreamablemp4ファイルに変換しようとしています。 mp4への変換は簡単ですが、使用する前にファイル全体を最初に変換する必要があります。クイックストリーミングのためにファイルの先頭に「movアトム」を置く変換ツールを使用する場合でも、それが起こる前にmp4全体をエンコードする必要があります。
私はavconvのドキュメントで「mov/mp4/ismv muxerはフラグメンテーションをサポートしています」と読みました。ファイルの先頭に「偽」のmov atomを配置し、ファイル全体の各キーフレームに新しいものを配置して、トランスコード中または変換が中断されたときにビデオをストリーミングできるようにします。 。
ファイルの変換方法についてavconvの指示( http://libav.org/avconv.html#MOV_002fMP4_002fISMV )に従っていると思いますが、エンコーダーがパラメーター。以下は私のコマンドと、それが生成するエラー出力です。私はグーグルと自分自身で答えを探し尽くしたが、何も手伝ってくれなかったので空白になった。
Avconvバージョン0.8.1-4:0.8.1-0ubuntu1でubuntu 12.04x64を実行しているシステム。
コマンド:
avconv -i 1081_20111227200000.mpg -f mp4 -movflags frag_keyframe+empty_moov -c:v libx264 -c:a copy output.mp4
エラー:
[mp4 muxer @ 0x36772e0] [Eval @ 0x7fffeddb69b0] Undefined constant or missing '(' in 'frag_keyframe'
[mp4 muxer @ 0x36772e0] Unable to parse option value "frag_keyframe+empty_moov"
[mp4 muxer @ 0x36772e0] Error setting option movflags to value frag_keyframe+empty_moov.
Output #0, mp4, to 'output.mp4':
Stream #0.0: Video: libx264, yuv420p, 1920x1080 [PAR 1:1 DAR 16:9], q=-1--1, 90k tbn, 29.97 tbc
Stream #0.1(eng): Audio: ac3, 48000 Hz, 5.1, 384 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (mpeg2video -> libx264)
Stream #0:1 -> #0:1 (copy)
Could not write header for output file #0 (incorrect codec parameters ?)
さまざまなマルチプレクサ(h264などの-fパラメーター)を試しましたが、movflagがサポートされていなかった(論理的)などのエラーがありました。
パッケージ、依存関係、またはポイントだけがありませんか?前もって感謝します。
この正確な問題について bug がlibavに提出されています。憂鬱なことに、対処されていないようです。 avconvは優れたエンコードツールであると考えるのが最善であると思いますが、優れたカプセル化ツールではありません。
最適な方法は、 GPAC のMP4Boxを使用することです。これは、主にメディアストリームをmp4ファイルにカプセル化することに関係していると思われるユーティリティです。たとえば、en/de/transcodingは行いません。 UbuntuにGPACをインストールする場合、次のように言うことができます。
MP4Box -add non-streamable.mp4 new-shiny-streamable.mp4
MP4Boxはデフォルトでmp4ファイルをストリーミング可能にします:
バージョン0.2.4の時点では、MP4Boxは常に0.5秒のインターリーブとメタデータでファイルを開始時に保存するため、HTTPストリーミングに適しています。 ( ソース )
here を参照してください:これはffmpegガイドですが、avconvにも同様に適用されます。
ストリーミング用のファイルの作成については知りませんが、エラーはプリセットを失っている可能性があり、おそらく品質設定もある可能性があります(ただし、他の品質設定がない場合、avconvはデフォルトとして-crf 23を使用していると思いますが)供給される)。試してください:
avconv -i 1081_20111227200000.mpg -f mp4 -movflags frag_keyframe+empty_moov -c:v libx264 -preset medium -c:a copy output.mp4
プリセットは次のとおりです。超高速、超高速、超高速、高速、高速、中、低速、低速、超低速。プリセットが速いとエンコードは速くなりますが、ファイルが大きくなりますが、遅いプリセットはファイルが小さくなりますが、作成に時間がかかります。異なるプリセット間に品質の違いはありません。 「プラセボ」プリセットもありますが、これはx264開発者による冗談であり、無視する必要があります。
Ifそれが機能しない場合は、以下を使用してみてください:
avconv -i 1081_20111227200000.mpg -f mp4 -movflags frag_keyframe+empty_moov -c:v libx264 -crf 20 -preset medium -c:a copy output.mp4
20は完全にarbitrary意的です。最適なcrf設定を選択してください。 Lower =画質は向上しますが、ファイルサイズは大きくなります。そのガイドによると、おそらく18〜28の間を使用する必要があります。