2
複数の.mp4ファイルを1つの.mp4にマージする最初の.mp4のみが正しく表示され、他のビデオは表示されません。複数の.mp4ファイルを1つの.mp4ファイルに統合するffmpeg android
私が最初に店に
ffmpeg -f concat -i " + strTextPath + " -c copy " + strFinalMergedVideoPath;
複数の.mp4ファイルを1つの.mp4にマージする最初の.mp4のみが正しく表示され、他のビデオは表示されません。複数の.mp4ファイルを1つの.mp4ファイルに統合するffmpeg android
私が最初に店に
ffmpeg -f concat -i " + strTextPath + " -c copy " + strFinalMergedVideoPath;
あなたは以下のようにArrayListの中にマージしたいすべてのMP4ファイルを、このffmpeg
コマンドを使用していました。
private ArrayList<String> arrFilePaths = new ArrayList<>();
arrFilePaths .add(file1path);
arrFilePaths .add(file2path);
arrFilePaths .add(file3path);
出力ファイルのパスを次のように設定します。
String strVideoFolderPath = Environment.getExternalStorageDirectory().getAbsolutePath();
その後、Asynctaskクラスの下で実行します。
public class MergeVideo extends AsyncTask<String, Integer, String> {
ProgressDialog progressDialog;
@Override
protected void onPreExecute() {
progressDialog = ProgressDialog.show(MotionFlyerTabActivity.this,"",
"Please wait...", true);
// do initialization of required objects objects here
}
@Override
protected String doInBackground(String... params) {
try {
Movie[] inMovies = new Movie[arrFilePaths.size()];
ArrayList<Movie> _clips = new ArrayList<>();
for (int i = 0; i < arrFilePaths.size(); i++) {
inMovies[i] = MovieCreator.build(
arrFilePaths.get(i));
}
List<Track> videoTracks = new LinkedList<>();
List<Track> audioTracks = new LinkedList<>();
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);
}
}
}
Movie result = new Movie();
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()])));
}
BasicContainer out = (BasicContainer) new DefaultMp4Builder()
.build(result);
FileChannel fc = new RandomAccessFile(String.format(strVideoFolderPath + "/output.mp4"), "rw").getChannel();
out.writeContainer(fc);
fc.close();
File file = new File(strVideoFolderPath + "/output.mp4");
String mFileName = file.getAbsolutePath();
return mFileName;
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String value) {
super.onPostExecute(value);
progressDialog.dismiss();
}
}
[concat demuxer](https://ffmpeg.org/ffmpeg-formats.html#concat-1)を使用する必要があります。 – Mulvya
提案のためのThanx @ Mulvya –