FFMPEG Video Concat та Overlay


1

Я хочу об'єднати дві ffmpegкоманди в одну команду. У ffmpegсвоїй програмі Android я використовую готовий бінарний файл. Я хочу скласти .tsфайли та накласти зображення.

Я використовую такі команди:

  1. Для скорочення .tsфайлів:

    String[] ffmpegcommand = {"ffmpeg", "-i","concat:"+input_file_path+"|"+input_file_path1, "-c", "copy", "-bsf:a", "aac_adtstoasc", output_file_path};
    
  2. Застосувати ефект накладання зображення:

    String[] ffmpegcommand = {"ffmpeg","-y" ,"-i", input_file_path,"-strict","experimental", "-vf","movie="+AppStaticData.BASE_FOLDER_PATH + File.separator + "watermarklogo.png"+" [watermark]; [in][watermark] overlay=main_w-overlay_w-10:10 [out]", AppStaticData.BASE_FOLDER_PATH+"/" + output_file_path};
    

Я не знайомий з андроїдом. Але, щоб скоротити .ts файли на Linux, ви можете просто "котити" їх, як текстові файли. У Linux я передавав би котируваний файл команді ffmpeg.
Раджиб

Відповіді:


3

Ви можете зробити це в одній команді з фільтром concat :

ffmpeg -i input0.ts -i input1.ts -i input2.ts -i overlay.png -filter_complex \
"[0:v][0:a][1:v][1:a][2:v][2:a]concat=n=3:v=1:a=1[vv][a]; \
 [vv][3:v]overlay=W-w-10:10[v]" \
-map "[v]" -map "[a]" output.mp4

Щоразу, коли я використовував фільтр concat, мені ніколи не доводилося використовувати setptsфільтр для скидання часових позначок. Скажімо, ви сегментуєте .tsфайли за допомогою segmentмуксера, тоді файли TS матимуть ненульовий час запуску, наприклад, перший кадр у другому файлі TS може мати PTS 12.4, але конкатенація все ще працюватиме. Цікаво, в яких випадках це суворо потрібно. Можливо, нам також знадобиться оновити запис у вікі.
slhck

@LordNeckbeard, я додав пропозицію від Areeb Soo Yasir. Це схоже на ту ж команду, але ви, можливо, захочете перевірити.
fixer1234

@ fixer1234 Дякую, але я думаю, що актуальною проблемою є те, що я забув додати зворотну косу рису до деяких рядків у своїй команді. Або він використовує Windows, яку, на мою думку, вимагає ^замість цього, або, як правило, користувачі Windows роблять це в один рядок. Розриви рядків призначені саме для читання. Я виправлю це, і він повинен працювати нормально, як є (для Linux і macOS).
llogan

0

Велике спасибі LordNeckbeard лише за одне, що ви можете подумати, що його рішення не працює, тому що якщо скопіювати та вставити, все не вийде. Просто поставте це як один рядок, і він буде працювати так:

ffmpeg -i file1.mp4 -i file2.mp4 -i file3.mp4 -i watermark.png -filter_complex "[0:v]setpts=PTS-STARTPTS[v0]; [1:v]setpts=PTS-STARTPTS[v1]; [2:v]setpts=PTS-STARTPTS[v2]; [v0][0:a][v1][1:a][v2][2:a]concat=n=3:v=1:a=1[v][aout]; [v][3:v]overlay=W-w-10:10[vout]" -map "[vout]" -map "[aout]" output.mp4

Наміром є кожна відповідь надати повне рішення, яке відрізняється від уже внесеного. Це дійсно, коментар або запропоновано покращення до іншої публікації. Вам трохи не вистачає представника, необхідного для коментаря, але ви можете запропонувати це як редагування іншої відповіді.
fixer1234

Привіт, там фіксатор, добре, якщо LordNeckBeard може оновити його, я радий видалити цю відповідь. Це просто так нерозумно, як це звучить, я думаю, що це трохи непридатно, оскільки він опублікував це та видає помилки з ffmpeg, що спонукало мене спочатку вважати, що відповідь не працює, таким чином, фактично повною робочою командою вище.
Areeb Soo Yasir

Я додав це до відповіді LordNeckbeard. Ви можете зачекати день чи два, щоб побачити, чи погоджується він із редагуванням, перш ніж видаляти вашу відповідь.
fixer1234

@AreebSooYasir Я забув додати кілька пропущених зворотних нахилів у своїй відповіді. Я часто розбиваю команду на кілька рядків для читабельності, тому користувачі можуть легше зрозуміти, як будуються фільтри FFmpeg. Користувачі можуть перестроїти його в єдиний рядок за бажанням (і користувачам Windows буде потрібно це зробити, або я думаю, вони можуть замінити нахил на зворотній кут каретою [ ^]).
llogan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.