ubuntu qt5.7怎样使用ffmpeg

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ubuntu qt5.7怎样使用ffmpeg相关的知识,希望对你有一定的参考价值。

参考技术A 这个函数定义在FFmpegSDK\include\libavutil文件夹下的commom.h文件里,你只要在工程的c++\\include里面包含这个路径就行了

从 Qt 中杀死 ffmpeg 会导致视频文件损坏

【中文标题】从 Qt 中杀死 ffmpeg 会导致视频文件损坏【英文标题】:Killing ffmpeg from Qt results in a corrupt video file 【发布时间】:2014-08-10 06:16:24 【问题描述】:

我正在使用 Qt 在 Windows 7 上记录来自 Mobotix 摄像头的流数据。我使用的命令是:

ffmpeg -f mjpeg -i "http://admin:password@192.168.0.100/control/faststream.jpg?stream=full" -c:v libx264 -preset slow -crf 22 -c:a copy out.mp4

这在命令行中运行良好,当我想停止它时,我只需按 Ctrl-C。但我是通过 QProcess 从使用 Qt 5.2 的应用程序中执行此操作的。 10 分钟后,我想停止录制,所以我尝试了QProcess::terminate(),但这并没有停止。 QProcess::kill() 有效,但无法播放生成的视频。 This answer 建议我这样做是正确的。

我连接到QProcess::finished(),所以当我调用 QProcess::kill() 时,结果是:

int exitCode = 62097 QProcess::ExitStatusexitStatus = QProcess::CrashExit

Apparently 这是 Qt 在杀死进程时使用的返回码。

那么我有没有其他方法可以优雅地终止进程(与按 Ctrl-C 相同)或通过 ffmpeg 库执行相同的功能以便我可以正确停止它?

【问题讨论】:

你为什么在AVI 容器中使用H.264 视频?您可以尝试输出到.mp4.mkv 文件吗? 抱歉,剪切粘贴出错。 【参考方案1】:

我解释了在该线程中处理相同问题的正确方法: http://qt-project.org/forums/viewthread/47654/

它非常简单,您只需发送 q 作为退出信号,这是一个简单的示例:

myProcess->setProcessChannelMode(QProcess::ForwardedChannels);
myProcess->write("q");
myProcess->closeWriteChannel();

请记住,您也必须退出您的父进程...祝您好运。

【讨论】:

【参考方案2】:

Qt 没有可移植的方式来做到这一点。但是,您可以使用 QProcess::processId() 来获取您可以使用的本机进程 PID。在POSIX-complitable 系统上,您可以使用kill(pid, SIGINT) 发送Ctrl-C。只需包括signal.hsys/types.h。在 Windows 上更难,看看这个问题:link

【讨论】:

不幸的是 QProcess::processId() 说“这个功能是在 Qt 5.3 中引入的”,我目前正在使用 Qt 5.2。我必须改用 QProcess::pid()。

以上是关于ubuntu qt5.7怎样使用ffmpeg的主要内容,如果未能解决你的问题,请参考以下文章

ffmpeg解码后的视频帧怎样显示出来

ffmpeg对视频进行帧序列提取要怎样改变它的输出位置?

我怎样才能用ffmpeg寻找第X帧?

Ubuntu中Qt5.7.0无法输入中文

Ubuntu14.04 + Qt5.7.1(静态编译)

怎样才能得到ffmpeg的colorchannelmixer的colormatrix