2015-11-05 170 views
-1

我想用gstreamer-0.10将textoverlay添加到mp4电影中。是的,我知道它的老,但我只需要对mp4做一些改变。我知道如何用gst-launch-0.10来做:gstreamer在C++中添加textoverlay

gst-launch-0.10 filesrc location = input.mp4 name = src! decodebin name = demuxer demuxer。 !队列! textoverlay text =“我的文字”! x264enc! muxer。分路器。 !队列! audioconvert! voaacenc!复用器。 mp4mux name = muxer! filesink location = output.mp4

这会为我创建一个文本覆盖电影。但现在我需要添加textoverlay在CPP以下斌 - 这是我的工作管道创建MP4:

QGst::BinPtr m_encBin = QGst::Bin::fromDescription( 
    "filesrc location=\""+path+"videoname.raw.mkv\" ! queue ! matroskademux name=\"demux\" " 
    "demux.video_00 ! queue ! ffmpegcolorspace ! queue ! x264enc ! queue ! mux.video_00 " 
    "demux.audio_00 ! queue ! audioconvert ! queue ! faac ! queue ! mux.audio_00 " 
    "mp4mux name=\"mux\" ! queue ! filesink name=\"filesink\" sync=false ", 
    QGst::Bin::NoGhost); 

任何人都知道我怎么可以添加textoverlay扔进垃圾桶? 干杯弗雷德里克

+0

哇,很高兴知道为什么downvote。只是告诉我什么时候我在错误的方向... – Freddy

+0

好吧,我做到了 - 这里是简单的文本覆盖BIN但没有音频 - 如果有人知道如何创建并插入空的aac音频,欢迎您! gst-launch-0.10 filesrc location = in.mp4 name = src!解码器! textoverlay text =“我是视频叠加文本”! x264enc! h264parse! mp4mux! filesink位置= out.mp4 – Freddy

+0

但你想C++的权利?一些管道你已经有了(你的问题的第一部分) – nayana

回答

0

我想你应该添加队列textoverlay元素的流水线描述ffmpegcolorspace队列元素之间:

QGst::BinPtr m_encBin = QGst::Bin::fromDescription( 
    "filesrc location=\""+path+"videoname.raw.mkv\" ! queue ! matroskademux name=\"demux\" " 
    "demux.video_00 ! queue ! ffmpegcolorspace ! queue ! textoverlay text=\"My Text\" ! queue ! x264enc ! queue ! mux.video_00 " 
    "demux.audio_00 ! queue ! audioconvert ! queue ! faac ! queue ! mux.audio_00 " 
    "mp4mux name=\"mux\" ! queue ! filesink name=\"filesink\" sync=false ", 
    QGst::Bin::NoGhost); 

我认为自己收到downvote,因为你没不要试图了解GStreamer管道描述,并要求提供随时可用的解决方案。

+0

是的,这是我试过 - 但它没有奏效。然后我得到空的电影文件输出。是的,我对gstreamer管道了解不多,但我阅读了一些内容并尝试过。除了文本覆盖之外,所有工作都很好。以及我也有一个特殊的情况,我必须与一个非常过时的版本工作。无论如何感谢您的建议。 – Freddy

+0

您可以请分享您的输入资产,以便我可以重新播放下面的管道? –

+0

你的意思是mkv电影吗? – Freddy