2017-02-03 1 views
0
String[] code = new String[]{"ffmpeg", "-i","D:/ffmpeg/20170201_164127.mp4", 

      "-i","D:/ffmpeg/cc.png", "-filter_complex", 

      "[0:v][1:v]overlay=main_w-overlay_w-5:main_h-overlay_h-5", 
      "drawtext=fontfile=/ffmpeg/Arial.ttf:text='TESTING'[email protected]:fontsize=70:x=10:y=H-th-10:box=1:[email protected]:boxborderw=5:x=10:y=H-th-10", 

      "[out]","-map", "[out]", "-map", "2:0", 
      "-acodec","mp3", "D:/ffmpeg/test7.mp4"}; 



      Process processDuration = new ProcessBuilder(code).redirectErrorStream(true).start(); 

      StringBuilder strBuild = new StringBuilder(); 

      try (BufferedReader processOutputReader = new BufferedReader(new InputStreamReader(processDuration.getInputStream(), Charset.defaultCharset()));) { 

       String line; 

       while ((line = processOutputReader.readLine()) != null) { 

        strBuild.append(line + System.lineSeparator()); 

       } 

       processDuration.waitFor(); 

      } 

      String outputJson = strBuild.toString().trim(); 

      System.out.println(outputJson); 

      } 

Когда я использую только изображения, код верен. Но когда я использую весь код это происходит:Как вставить изображения и текст в видео с помощью ffmpeg - java

[NULL @ 00000000006abe60] Не удалось найти подходящий формат для 'DrawText = fontfile =/FFmpeg/Arial.ttf: текст =' TESTING'fontcolor = белый @ 1.0: fontsize = 70: x = 10: y = H-th-10: box = 1: [email protected]: boxborderw = 5: x = 10: y = H-th-10 ' drawtext = fontfile = /ffmpeg/Arial.ttf:text='TESTING'[email protected]:fontsize=70:x=10:y=H-th-10:box=1:[email protected]:boxborderw=5:x= 10: у = Н-м-10: Недопустимый аргумент

+1

Пожалуйста, добавьте дополнительную информацию: что произойдет, если вы попытаетесь запустить эту команду в CMD? Из чего это сообщение (исключение выбрано, стандартный поток вывода, поток ошибок)? –

+0

Вы говорите 'ffmpeg', что фильтр drawtext является выходным файлом. Я не пользователь Java, но, скорее всего, это проблема с цитированием, запятой и/или выпуском строки. Показывая фактическую команду 'ffmpeg', созданный код покажет, где находится проблема. Кроме того, используйте aac вместо mp3 для MP4: некоторые мейнстримные, дерьмовые игроки имеют проблемы с декодированием этой комбинации. – LordNeckbeard

+0

Когда я пытаюсь с кодом CMD в порядке, программа работает по-разному. Но когда я пытаюсь с java не работать. – MaF

ответ

0

Если, как это кажется, пробел вставляется после каждого аргумента в строке, то, что объясняет ошибку. Вы не вложили весь filter_complex в кавычки, поэтому между вложением и drawtext вставлено пространство. Для FFmpeg похоже, что вы завершаете filter_complex с наложением и, следовательно, строка drawtext представляет результат.

Так как обеспечить весь filter_complex аргумента в одной строке, включая ДО [out], без пробелов между ИЛИ добавить открытия двойных кавычек перед тем [0:v] и закрытия цитаты после [out]. Вам, вероятно, придется избегать этих цитат.

Смежные вопросы