我正在尝试使用ffmpeg连接两个mp4文件.我需要这是一个自动过程因此我选择ffmpeg.我正在将这两个文件转换为.ts文件,然后将它们连接起来,然后尝试对该连接的.ts文件进行编码.文件是h264和aac编码,我希望保持质量相同或尽可能接近原始.
ffmpeg -i part1.mp4 -vcodec copy -vbsf h264_mp4toannexb -acodec copy part1.ts
ffmpeg -i part2.mp4 -vcodec copy -vbsf h264_mp4toannexb -acodec copy part2.ts
cat part1.ts part2.ts > parts.ts
ffmpeg -y -i parts.ts -acodec copy -ar 44100 -ab 96k -coder ac -vbsf h264_mp4toannexb parts.mp4
Run Code Online (Sandbox Code Playgroud)
不幸的是我在编码过程中收到来自ffmpeg的以下错误消息:
[h264 @ 0x1012600]sps_id out of range
[h264 @ 0x1012600]non-existing SPS 0 referenced in buffering period
[h264 @ 0x1012600]sps_id out of range
[h264 @ 0x1012600]non-existing SPS 0 referenced in buffering period
[NULL @ 0x101d600]error, non monotone timestamps 13779431 >= …Run Code Online (Sandbox Code Playgroud) 我在我的应用程序中集成了两个本机库(.so).库编译得很好,我也可以在我的应用程序中加载它们.我第一次调用库的本机方法时工作正常,但如果我在Activity中再次调用相同的方法,应用程序将关闭.
我面临的问题与此处提到的完全相同:http:
//grokbase.com/t/gg/android-ndk/1226m68ydm/app-exit-on-second-native-call
可行的解决方案是在另一个Activity中调用本机方法,并通过System.exit(0)强制关闭它.在文章之后,我尝试在成功操作后将指针设置为NULL,但这也没有帮助我.一旦由System.loadLibrary()加载库,也无法卸载它.
我想在不创建新Activity的情况下多次调用本机方法.任何想法如何解决这个问题?
(我最终找到了一个解决方案......就在这里)
好的,我终于找到了解决这个问题的方法.解决方案实际上非常简单.构建另一个独立的本机库(实用程序库)来加载和卸载其他库.我们需要做的是在实用程序的本机方法中使用dlopen()和dlclose().我们可以通过System.loadLibrary()像以前一样加载实用程序库.
因此,在实用程序库的本机方法中,我们需要做的是:
使用#include <dlfcn.h>//这是调用dlopen()和dlclose()函数所必需的.
提供处理程序和函数原型:
void *handle;
typedef int (*func)(int); // define function prototype
func myFunctionName; // some name for the function
Run Code Online (Sandbox Code Playgroud)
通过dlopen()打开库:
handle = dlopen("/data/data/my.package.com/lib/somelibrary.so", RTLD_LAZY);
Run Code Online (Sandbox Code Playgroud)
获取并调用库的功能:
myFunctionName = (func)dlsym(handle, "actualFunctionNameInLibrary");
myFunctionName(1); // passing parameters if needed in the call
Run Code Online (Sandbox Code Playgroud)
现在呼叫完成了.通过dlclose()关闭它:
dlclose(handle);
Run Code Online (Sandbox Code Playgroud)
希望这将有助于其他人面临同样的问题.
我已经从这个链接下载了github的视频修剪代码.
它第一次完美运行,但是当我第二次尝试运行它时,代码崩溃没有任何异常,然后当我尝试在崩溃后第3次运行它时它再次运行!有没有人对这种行为有任何想法?
我还在开发一个应用程序,它有一个修剪视频模块.我真的很感激,如果有人能帮助我的话.
有一个名为input.txt的文件
file '/home/1.flv'
file '/home/2.flv'
Run Code Online (Sandbox Code Playgroud)
我可以使用命令将1.flv和2.flv连接成mp4文件.
# there are two files in output.mp4
ffmpeg -f concat -i input.txt -c copy output.mp4
Run Code Online (Sandbox Code Playgroud)
当我使用以下命令
ffmpeg -i "concat:1.flv|2.flv" -c copy output.mp4
Run Code Online (Sandbox Code Playgroud)
我发现只有一个文件1.flv中output.mp4,为什么呢?