我需要在基于Qt的应用程序中从视频中提取帧.使用ffmpeg库我能够将帧作为AVFrames获取,我需要将其转换为QImage以在我的应用程序的其他部分中使用.这种转换需要高效.到目前为止似乎sws_scale()是正确的功能使用,但我不确定要指定什么源和目标像素格式.
使用Qt,在QWidget上渲染完全下载的图像非常简单.但是,我想在获取时呈现部分下载的渐进式jpg(或png).
我需要批量处理一堆视频,将它们的高度扩展到240,保持纵横比相同.几乎完成工作的命令是:
$ avconv -threads 4 -ss 0.0 -i input.avi \
-map 0:0,0:0 -map 0:1,0:1 -vf "scale=-1:240" -y -f mpegts \
-async -1 -vcodec libx264 -vcodec libx264 -flags2 +fast \
-flags +loop -g 30 -bufsize 1024k \
-b 200k -bt 220k -qmax 48 -qmin 2 -r 20 -acodec libmp3lame \
-ab 44k -ar 44100 -ac 2 output.ts
Run Code Online (Sandbox Code Playgroud)
你可以看到,有趣的部分是 -vf "scale=-1:240"
这适用于缩放输出宽度为偶数的视频.否则,我收到以下错误消息:
[libx264 @ 0x7fc4f8821e00] width not divisible by 2 (341x240)
Run Code Online (Sandbox Code Playgroud)
我该如何克服这个问题?
编辑:根据这个链接,我尝试使用-vf "scale=trunc(oh/a/2)*2:240"哪个输出电影但产生的视频质量非常差.
编辑#2:这不是重复, …
我有一个需要完全删除的视图层次结构。可以只调用removeFromSuperview顶部父视图还是我需要递归访问每个子节点并单独删除它?
编辑:只是为了澄清,我知道删除父级会从物理上删除子级,但这是否也适当地减少了他们的引用计数?
我有一个IOS应用程序,需要跟踪每天的免费使用时间.一旦超过阈值,用户就必须购买应用程序或等待第二天解锁当天的免费使用时间.
是否有本地方法来检测用户是否已将时钟设置回来?假设没有Internet连接与时间服务器同步
当我makeffmpeg时,我可以看到以下几行
CC ffmpeg.o
LD ffmpeg_g
CP ffmpeg
STRIP ffmpeg
Run Code Online (Sandbox Code Playgroud)
什么是快速查找CC,LD等命令的方法,只需对Makefile进行少量修改即可?
我正在将ffplay作为后台进程运行,该进程将图像数据提供给主UI进程。我设置了“ SDL_VIDEODRIVER = dummy”,以禁止在SDL窗口中显示ffplay视频。
问题是,即使未显示视频输出窗口,ffplay进程仍会显示为应用程序窗口(坞站,CMD + TAB条目等)。我该如何避免呢?
这是我输入的xml
<app appid="{C38B7539}" lang="en">
<updatecheck/>
</app>
Run Code Online (Sandbox Code Playgroud)
通过以下php解析
$xmlObj = simplexml_load_string($xmlStr);
if ($xmlObj === false) {
// log errors
return;
}
print_r($xmlObj);
Run Code Online (Sandbox Code Playgroud)
Windows上的输出(故障)
[app] => SimpleXMLElement Object
(
[@attributes] => Array
(
[appid] => {C38B7539}
[lang] => en
)
[0] => SimpleXMLElement Object <-- Note the 0 instead of updatecheck
(
)
)
Run Code Online (Sandbox Code Playgroud)
linux上的输出(正确)
[app] => SimpleXMLElement Object
(
[@attributes] => Array
(
[appid] => {C38B7539}
[lang] => en
)
[updatecheck] => SimpleXMLElement Object
(
)
)
Run Code Online (Sandbox Code Playgroud)
结果在linux 下和windows下array_key_exists('updatecheck', $xmlObj) …
在 Moto G 上开发我的应用程序时,我经常遇到数以万计的以下消息充斥日志。
E/MM_OSAL ( 275): isSamePayload Sync byte(0x47) not found!! m_nCurrOffset=0
E/MM_OSAL ( 275): isSamePayload Sync byte(0x47) not found!! m_nCurrOffset=0
... repeated 20000 times in a span of 12 secs
D/WifiStateMachine(1004): processMsg: L2ConnectedState
D/WifiStateMachine(1004): handleMessage: X
D/WifiStateMachine(1004): handleMessage: E msg.what=131155
... repeated 15000+ times all interspersed together
Run Code Online (Sandbox Code Playgroud)
现在,当然我已经设置了 Logcat 过滤器,但是所有这些消息都填满了 logcat 缓冲区,而我自己的调试消息不断消失。
观察
如何阻止这些不需要的消息溢出 Logcat 缓冲区?
更新:好的,我想我找到了一些线索。logcat 缓冲区没有被清除
$ ./adb …Run Code Online (Sandbox Code Playgroud) 我taglib为Windows 构建了静态库,如下所示.得到了mingw,而不是VS.
git clone https://github.com/taglib/taglib.git git_taglibcmake的Win32安装程序从cmake.orgcmake -G "MinGW Makefiles" -DCMAKE_INSTALL_PREFIX=/C/taglib_package -DCMAKE_C_COMPILER=/C/MinGW4.4/bin/gcc.exe -DCMAKE_CXX_COMPILER=/C/MinGW4.4/bin/g++.exe -DENABLE_STATIC=ON -DENABLE_STATIC_RUNTIME=ON -DHAVE_ZLIB=0mingw32-make.exemingw32-make.exe install到C:\taglib_package在我的Qt项目中,我正在使用这个库
的.pro
INCLUDEPATH+="C:/taglib_package/include/taglib"
QMAKE_LIBDIR += "C:/taglib_package/lib"
LIBS+= -lz -ltag
Run Code Online (Sandbox Code Playgroud)
的.cpp
#include "fileref.h"
#include "taglib.h"
...
TagLib::FileRef f("Z:/Documents/sample.mp3");
TagLib::String artist = f.tag()->artist();
std::cout<< "Artist is " << artist << std::endl;
Run Code Online (Sandbox Code Playgroud)
这导致以下链接错误
release/main.o:main.cpp:(.text+0x93): undefined reference to `_imp___ZN6TagLib8FileNameC1EPKc'
release/main.o:main.cpp:(.text+0xb3): undefined reference to `_imp___ZN6TagLib7FileRefC1ENS_8FileNameEbNS_15AudioProperties9ReadStyleE'
release/main.o:main.cpp:(.text+0xdf): undefined reference to `_imp___ZNK6TagLib7FileRef3tagEv'
release/main.o:main.cpp:(.text+0x101): undefined reference to `_imp___ZN6TagLib6StringD1Ev' …Run Code Online (Sandbox Code Playgroud)