- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在通过 FFMPEG 从图像创建视频,我能够从图像中获取视频。我还使用 JavaCV 合并两个视频,并且我可以使用 JavaCV 加入视频而不会出现任何问题,前提是这两个视频都是通过相机拍摄的,即实际通过移动相机录制的视频。
我面临的问题:
我无法将使用图像从 FFMPEG 生成的视频与用户选择的视频合并,这些视频主要不是通过移动相机生成和拍摄的视频。
代码:通过图像生成视频的代码:
FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(path + "/" + "dec16.mp4", 800, 400);
try {
recorder.setVideoCodec(avcodec.AV_CODEC_ID_MPEG4);
//recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);
recorder.setVideoCodecName("H264");
recorder.setVideoOption("preset", "ultrafast");
recorder.setFormat("mp4");
recorder.setFrameRate(frameRate);
recorder.setVideoBitrate(60);
recorder.setPixelFormat(avutil.AV_PIX_FMT_YUV420P);
startTime = System.currentTimeMillis();
recorder.start();
for(int j=0;j<MomentsGetStarted.chosen_images_uri.size();j++)
{
if(MomentsGetStarted.chosen_images_uri.get(j).video_id==0)
{
chosen_images.add(MomentsGetStarted.chosen_images_uri.get(j));
}
}
for (int i = 0; i < chosen_images.size(); i++) {
opencv_core.IplImage image = cvLoadImage(chosen_images.get(i).sdcardPath);
long t = 3000 * (System.currentTimeMillis() - startTime);
if (t > recorder.getTimestamp()) {
recorder.setTimestamp(t);
recorder.record(image);
}
}
recorder.stop();
} catch (Exception e) {
e.printStackTrace();
}
合并视频的代码:
int count = file_path.size();
System.out.println("final_joined_list size " + file_path.size());
if (file_path.size() != 1) {
try {
Movie[] inMovies = new Movie[count];
mediaStorageDir = new File(
Environment.getExternalStorageDirectory()
+ "/Pictures");
for (int i = 0; i < count; i++) {
File file = new File(file_path.get(i));
System.out.println("fileeeeeeeeeeeeeeee " + file);
System.out.println("file exists!!!!!!!!!!");
FileInputStream fis = new FileInputStream(file);
FileChannel fc = fis.getChannel();
inMovies[i] = MovieCreator.build(fc);
fis.close();
fc.close();
}
List<Track> videoTracks = new LinkedList<Track>();
List<Track> audioTracks = new LinkedList<Track>();
Log.d("Movies length", "isss " + inMovies.length);
if (inMovies.length != 0) {
for (Movie m : inMovies) {
for (Track t : m.getTracks()) {
if (t.getHandler().equals("soun")) {
audioTracks.add(t);
}
if (t.getHandler().equals("vide")) {
videoTracks.add(t);
}
if (t.getHandler().equals("")) {
}
}
}
}
Movie result = new Movie();
System.out.println("audio and videoo tracks : "
+ audioTracks.size() + " , " + videoTracks.size());
if (audioTracks.size() > 0) {
result.addTrack(new AppendTrack(audioTracks
.toArray(new Track[audioTracks.size()])));
}
if (videoTracks.size() > 0) {
result.addTrack(new AppendTrack(videoTracks
.toArray(new Track[videoTracks.size()])));
}
IsoFile out = null;
try {
out = (IsoFile) new DefaultMp4Builder().build(result);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
long timestamp = new Date().getTime();
String timestampS = "" + timestamp;
File storagePath = new File(mediaStorageDir
+ File.separator);
storagePath.mkdirs();
File myMovie = new File(storagePath, String.format("%s.mp4", timestampS));
FileOutputStream fos = new FileOutputStream(myMovie);
FileChannel fco = fos.getChannel();
fco.position(0);
out.getBox(fco);
fco.close();
fos.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String mFileName = Environment.getExternalStorageDirectory()
.getAbsolutePath();
// mFileName += "/output.mp4";
File sdCardRoot = Environment.getExternalStorageDirectory();
File yourDir = new File(mediaStorageDir + File.separator);
for (File f : yourDir.listFiles()) {
if (f.isFile())
name = f.getName();
// make something with the name
}
mFileName = mediaStorageDir.getPath() + File.separator
+ "output-%s.mp4";
System.out.println("final filename : "
+ mediaStorageDir.getPath() + File.separator
+ "output-%s.mp4" + "names of files : " + name);
single_video = false;
return name;
} else {
single_video = true;
name = file_path.get(0);
return name;
}
错误:
我在尝试合并通过图像生成的视频和普通视频时遇到的错误是
12-15 12:26:06.155 26022-26111/? W/System.err﹕ java.io.IOException: Cannot append com.googlecode.mp4parser.authoring.Mp4TrackImpl@45417c38 to com.googlecode.mp4parser.authoring.Mp4TrackImpl@44ffac60 since their Sample Description Boxes differ
12-15 12:26:06.155 26022-26111/? W/System.err﹕ at com.googlecode.mp4parser.authoring.tracks.AppendTrack.<init>(AppendTrack.java:48)
我试过的修复:
Google 建议我将 JavaCV 中的编解码器从 avcodec.AV_CODEC_ID_MPEG4
更改为 avcodec.AV_CODEC_ID_H264
。但是当我这样做时,我无法从图像中获取视频,从而引发以下错误:
12-15 12:26:05.840 26022-26089/? W/linker﹕ libavcodec.so has text relocations. This is wasting memory and is a security risk. Please fix.
12-15 12:26:05.975 26022-26089/? W/System.err﹕ com.googlecode.javacv.FrameRecorder$Exception: avcodec_open2() error -1: Could not open video codec.
12-15 12:26:05.975 26022-26089/? W/System.err﹕ at com.googlecode.javacv.FFmpegFrameRecorder.startUnsafe(FFmpegFrameRecorder.java:492)
12-15 12:26:05.975 26022-26089/? W/System.err﹕ at com.googlecode.javacv.FFmpegFrameRecorder.start(FFmpegFrameRecorder.java:267)
我需要什么:
从图像创建视频是不可避免的,并且该视频肯定会用于与可能具有任何编解码器格式的其他视频合并。所以我需要找到一种方法来合并任何类型的视频,而不管它们的编解码器或任何其他参数。我试图通过仅使用 Jars 和 SO 文件来保持简单,并且我不想通过全面实现 FFMPEG 库来让自己发疯。话虽如此,如果我没有任何其他方法来实现我想要的,我也准备好研究该库,但是非常感谢具有几乎可以工作代码的可靠资源。干杯。
更新:我查看了 OpenCV 的 GitHub 上提到的问题,但没有从中找到任何可靠的东西。 OpenCV Issues
最佳答案
您正在使用 MP4
解析器,这意味着它不会触及视频的编码。这仅在两个视频共享相同的编码器设置(如分辨率、帧率以列出一些最明显的设置)时才有效。
如果您需要合并具有不同编解码器或参数的视频,那么您必须将它们重新编码为目标通用格式和参数集,在本例中为简单的MP4
解析器不会做。
您可以直接使用 ffmpeg 实现这一点。
关于android - 无法使用 JavaCV 在 Android 中合并视频 ("Sample Description"错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34284325/
In condition, COLUMN = [:id, :tag_list, :price, :url, :Perweight, :Totalweight, :memo, :created_at,
我正在构建一个逻辑回归分类器。 我从一组 500.000 条记录开始,我只想使用其中的一个样本。 你有什么建议: 1) 缩放总体然后采样2)缩放样本3) 仅缩放样本的 X_TRAIN 分割? 为什么?
我正在尝试进行 8 级分类。这是代码: import keras import numpy as np from keras.preprocessing.image import ImageDataG
我想在 Keras 中创建一个可以“逐个样本”学习的模型;这种机器叫online learning ,一个逐个接收和拟合数据的模型。我的问题是:我怎样才能在 Keras 中做到这一点?是否可以通过在拟
请帮帮我。我无法正确使用我的数据表。我想做的是 从表中选择并使用where函数。但我做不到。 这是我的 Controller 代码 public function reporttable ()
我将所有正样本的大小调整为相同的大小,因此负样本的大小也应与正样本的大小相同。 最佳答案 通常,通过对象检测,您可以在图像上滑动固定大小的搜索窗口,从而产生特征响应。然后,分类器将响应与经过训练的模型
为自己创建一个简单的通行证生成器,我注意到如果我希望我的人口只有数字(0-9),总共有 10 个选项,如果我希望我的长度超过 10,它不会使用更多的数字然后一次并返回“样本大于总体”错误。 是否可以维
当我读到一篇论文“批量归一化:通过减少内部协变量偏移来加速深度网络训练”时,我想到了一些问题。 论文中写道: Since m examples from training data can estim
我的代码 import random MyList = [[1,2,3,4,5,6,7,8],[a,s,d,f,g,h,h],[q,w,e,r,t,y]] MyListRandom = [] rand
我正在尝试从图中随机选择 n 个样本。为此,我使用 random.sample 函数创建了一个名为 X 的列表,如下所示: X= random.sample(range(graph.ecount())
我想知道在哪种情况下我可以将“主样本”或“子样本”或同时用于“响应断言”中的“文本响应”。 我用谷歌搜索,但尚未收到满意的答案。 帮助表示赞赏。 最佳答案 根据JMeter帮助, This is fo
我对使用 Hadoop 等大数据工具还很陌生。我想在 Yarn/或 Yarn Simulator 上执行公开可用的集群跟踪 ( https://github.com/google/cluster-da
我正在尝试从 Samsung Galaxy Nexus(Android 4.0)中尽可能快地读出传感器值。为此,我使用不同的传感器和采样率做了一些实验,并发现了一个非常奇怪的行为。当我仅使用 Acc-
首先,我要说的是,我对机器学习、kmeans 和 r 相当陌生,这个项目是一种了解更多相关知识的方法,也是向我们的 CIO 展示这些数据的方法,以便我可以在开发新的帮助台系统。 我有一个 60K 行的
我试图从我的查询集中抽取一些记录来提高性能,例如: from random import sample from my_app import MyModel my_models = MyModel.o
我正在阅读此主题:Typecasting variable with another typedef type_b *sample_b = (type_b *) ((void *) &sample);
首先,这可能是 Snakemake and pandas syntax 的副本.但是,我仍然很困惑,所以我想再解释一下。 在 Snakemake 中,我加载了一个包含多列的示例表。其中一列称为“Rea
你好,我是 python 新手,刚刚开始编写基本的 python 脚本。我决定编写一个密码生成器程序。我遇到了 random.sample() 和 itertools.combinations() 函
假设一个文件有很多原型(prototype)和函数对象声明代码: function Sample() { ... } Sample.prototype.method1 = () => { ..
我正在使用 AVAudioRecorder。我以 44100 采样率以 caf 格式 录制音频。就记录成功了。录制后,我想转换已录制的 caf 采样率为 11025 和 22050 的音频文件。是否可
我是一名优秀的程序员,十分优秀!