2015-12-01 64 views
11

FFmpeg( "'X'、 '2'、 '6'、 '4' '' FOURCC)を使ってOpenCV 3でh264ビデオを書くときに問題があります。私はそれまでのところすべての関連記事を見てきましたが、何も助けてくれません。コード:OpenCV 3からLinuxにFFmpegでx264を書き込む

cv::VideoWriter writer(output_path.string(), CV_FOURCC('X','2','6','4'), 60, frame_size); 

出力:

OpenCVの:FFMPEG:タグ0x34363258/'X264' は、コーデックID 28と形式ではサポートされていない 'MP4/MP4(MPEG-4パート14)' のOpenCV :FFMPEG:フォールバック 使用タグ0x00000021/'!'

結果のビデオは非常に小さく(バイト単位)、判読できません。 four_ccを-1に設定すると、FFmpegから "unknown tag"が返されます。私は、他の人が示唆しているように、コーデックを選択するプロンプトを表示しません。

OpenCVの3つのDOC状態:

MP4コンテナとFFMPEGバックエンドはネイティブFOURCC コードとして他の値を使用します。あなたはFOURCCコード変換についてOpenCVの から警告メッセージを受信することができるので、ObjectTypeを参照。彼らはrefrence H264/x264のがリストされていない、とearlier SO postsは、適切なコードとしてすべてのリストX.2.6.4に思えるので、私は、その文を解釈するかどうかはわかりませんページ

。 H.2.6.4を使用すると、実際には同じ出力が得られます。

提案や回避策はありますか?

P.S.私が代わりにMP4のMKVコンテナを使用してみました:ffmpegのは、それはそれは--enable-libx264

EDITで構成されたことを示しています、最新のUbuntuメンテナからです。サポートされていないタグについての警告はなくなりましたが、結果のビデオはまだ読めません。

+0

私はこの問題を解決する方法を伝えることはできませんが、 'VideoWriter'はあまり強力ではありません。あなたは、おそらくいくつかの作業形式でビデオを保存し、ffmpegでH264に変換する必要があります。 – Miki

+0

@Miki opencv行列をx264_picture_tに正しく変換してx264を直接使う方法が分かっているなら、それはうまくいくかもしれません。私はYUV_I420に変換し、x264_picture_tのフィールドを手動で設定しようとしましたが、これまでに失敗しました。 –

答えて

4

問題は表示された警告とは関係ありませんでした。 VideoWriterは3チャンネルのカラー画像(VideoWriterのコンストラクタの5番目の引数であるisColorのデフォルト値は "true"です)を期待していましたが、シングルチャンネルの画像を書き込もうとしていました。解決策はisColorをfalseに設定していました。

+0

ダウン投票の場合は、回答を改善するために投票を説明することを検討してください。 –

+0

この回答は数年前ですが、私は同じ問題で苦労しています。私はOpenCV 3.2.0を使っているOSXで、 'openh264'でコンパイルしたffmpegを使っています。第5引数を「真」または「偽」に設定するか、それを放置しても、私には違いはありません。どのように私はこれをデバッグすることができます他のアイデア? – kramer65

+0

@ kramer65、これについて別の問題を投稿し、これを参照することをお勧めします。これはあなたが持っている問題ではない(つまり、isColorフラグは違いを生じません)。私が持っている唯一の提案 - X264とH264コードの両方を試してみてください。また、Linuxでは、libx264開発ライブラリをインストールする必要がありましたが、openh264ではなく... OSX用のパッケージがあるかどうかはわかりません。 –

4

私はここにあなたの発見が鍵だと思う:MP4コンテナで

FFMPEGのバックエンドはネイティブにFOURCCコードとして他の値を使用しています:あなたはFOURCCコード変換についてOpenCVのからの警告メッセージが表示されることがありので、のObjectTypeを参照してください。 ffmpegために実施

MP4タグ値がこれを確認し、isom.cに、ff_mp4_obj_type[]です。これをサポートするには、OpenCVのcap_ffmpeg_impl.hppのコードを更新する必要があります。私は約1時間か2ヵ月ぶりに突っ込んで、それが些細なことではなく、救済されたことに気づいた。

.aviファイルに出力するのが1つの回避策です。 OpenCVとmp4に問題があり、.movまたは.aviを使用するように言われている人々の例がたくさんあります。 (Here's one。)

@グレッグKramida:メッセージが残っている、と私の出力ファイルのみ〜48バイトになった:isColor = falseが私のために助けにはならなかった設定。ドキュメントによると、それはWindowsのフラグです - Linux上で私が何をしていても、それは良くありません。

は、あなたはそれ自体で、ffmpegのとx264のを生成することができることを確認しましたか?私は、コマンドラインでこれを起動するときにlibx264を確認した後に

は、値0x21であります

ffmpeg -i x264-input.mp4 -vcodec libx264 -f mp4 x264-output.mp4 

私はVideoWriter.open()に直接0x21を使用することにしました。これは、有効で解釈可能なビデオファイルを生成します。

参考までに、私のソフトウェア3.0をffmpegのされています

ffmpeg -version 
ffmpeg version 3.0 Copyright (c) 2000-2016 the FFmpeg developers 
built with gcc 4.9.2 (Debian 4.9.2-10) 
configuration: --enable-libx264 --enable-gpl --prefix=/usr/local --enable-shared --cc=`gcc -fPIC` --enable-libfdk-aac --enable-libx265 --enable-nonfree --enable-libmp3lame 
libavutil  55. 17.103/55. 17.103 
libavcodec  57. 24.102/57. 24.102 
libavformat 57. 25.100/57. 25.100 
libavdevice 57. 0.101/57. 0.101 
libavfilter  6. 31.100/6. 31.100 
libswscale  4. 0.100/4. 0.100 
libswresample 2. 0.101/2. 0.101 
libpostproc 54. 0.100/54. 0.100 

とで構成されたOpenCVの3.1.0:

cmake \ 
    -D WITH_IPP=ON \ 
    -D INSTALL_CREATE_DISTRIB=ON \ 
    -D CMAKE_BUILD_TYPE=Release \ 
    -D CMAKE_INSTALL_PREFIX=/usr/local .. 

x264のは、Debianジェシーのためlibx264-142:amd64リリースです。

+0

これは興味深いです。私もLinux上にあり、 '' isColor''のフラグをfalseに設定することで、私にとって大きな違いがありました。あなたが持っている問題が何であれ、それは明らかに私のものとは異なるので、OpenCVからの直接MP4出力に興味があるなら、あなたの問題を説明する別の質問を投稿し、これを参照することをお勧めします。私はこの会話をプライベートチャットにして、SOの優先QAフォーマットに固執することを提案します。そこに私のコンパイルフラグを提供することができます。 –

関連する問題