Android: concatenar dos videos

Estoy intentando concatenar dos videos en Android. Ya estoy usando ffmpeg para otras necesidades, pero estoy usando halfninja , que es sólo 0.9. El 0.9 uno no permite las siguientes maneras de hacerlo:

// filter_complex isn't recognized vk.run(new String[] { "ffmpeg", "-i", inputFile1, "-i", inputFile2, "-filter_complex", "'[0:1] [0:0] [1:1] [1:0] concat=n=2:v=1:a=1 [v] [a]'", "-map", "'[v]'", "-map", "'[a]'", outputFile }); // Or, after converting the two videos to ts, trying to merge them: concat:file1.ts|file2.ts: No such file or directory vk.run(new String[] { "ffmpeg", "-i", "'concat:" + ts1 + "|" + ts2 + "'", "-vcodec", "copy", "-acodec", "copy", "-absf", "aac_adtstoasc", output }); 

La tercera cosa que intenté es usar el demuxer concat explicado aquí , que no se reconoce con ffmpeg 0.9 tampoco.

¿Hay alguna manera de concatenar dos vídeos en Android con ffmpeg 0.9 (u otra biblioteca)?

Bueno, la única solución encontrada fue usar ffmpeg ≥1.1. He compilado el 2.1, que está funcionando muy bien. Esto es lo que uso ahora:

 /** * Concatenates two videos * @param inputFile1 First video file path * @param inputFile2 Second video file path * @param outputFile Output file path */ public static void concatenate(String inputFile1, String inputFile2, String outputFile) { Log.d(TAG, "Concatenating " + inputFile1 + " and " + inputFile2 + " to " + outputFile); String list = generateList(new String[] {inputFile1, inputFile2}); Videokit vk = Videokit.getInstance(); vk.run(new String[] { "ffmpeg", "-f", "concat", "-i", list, "-c", "copy", outputFile }); } /** * Generate an ffmpeg file list * @param inputs Input files for ffmpeg * @return File path */ private static String generateList(String[] inputs) { File list; Writer writer = null; try { list = File.createTempFile("ffmpeg-list", ".txt"); writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(list))); for (String input: inputs) { writer.write("file '" + input + "'\n"); Log.d(TAG, "Writing to list file: file '" + input + "'"); } } catch (IOException e) { e.printStackTrace(); return "/"; } finally { try { if (writer != null) writer.close(); } catch (IOException ex) { ex.printStackTrace(); } } Log.d(TAG, "Wrote list file to " + list.getAbsolutePath()); return list.getAbsolutePath(); } 

La respuesta de Marc funcionará si tus videos tienen la misma codificación. Estoy utilizando esto para fusionar videos grabados en mi aplicación. Cuando graba vídeos de la cámara frontal y de la cámara trasera, mezcla audio (esto puede deberse a diferentes velocidades de fotogramas entre vídeos). Así que estoy usando el siguiente comando, pero es mucho más lento que la fusión con una lista, ya que no verifica las codificaciones.

  final FFmpeg ffmpeg = FFmpeg.getInstance(activity); List<String> cmdList = new ArrayList<>(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < videoFilenameList.size(); i++) { cmdList.add("-i"); cmdList.add(videoFilenameList.get(i)); sb.append("[").append(i).append(":0] [").append(i).append(":1]"); } sb.append(" concat=n=").append(videoFilenameList.size()).append(":v=1:a=1 [v] [a]"); cmdList.add("-filter_complex"); cmdList.add(sb.toString()); cmdList.add("-map"); cmdList.add("[v]"); cmdList.add("-map"); cmdList.add("[a]"); cmdList.add("-preset"); cmdList.add("ultrafast"); cmdList.add(outFile); sb = new StringBuilder(); for (String str : cmdList) { sb.append(str).append(" "); } String[] cmd = cmdList.toArray(new String[cmdList.size()]); ffmpeg.execute(cmd, new ExecuteBinaryResponseHandler() { @Override public void onSuccess(String message) { } @Override public void onFailure(String message) { } @Override public void onProgress(String message) { } @Override public void onStart() { } @Override public void onFinish() { } } 
  • Cómo capturar vídeo usando Intent y establecer la ruta de grabación y limitar el tiempo de grabación
  • Android Dev - 3rd Party Media Player SDK u otras opciones?
  • Cómo detectar el uso de HDMI en Samsung Galaxy S II
  • YouTube Video no se reproduce en WebView - Android
  • No se reproduce el video de YouTube en WebView
  • Error de salida de Android ffmpeg
  • ¿Podemos volver a escribir la API de MediaCodec en C?
  • Transcode / Convert Video to Mp4 en Android
  • Los vídeos de Youtube incrustados en la vista Web de Android no se reproducen en el formato SINGLE_COLUMN
  • Cómo jugar videos de Youtube en Android Video View?
  • SetPluginsEnabled no existe para WebView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.