перехресне відео між двома відео за допомогою ffmpeg


27

Я намагався досягти перехресного переходу між двома відеокліпами за допомогою ffmpeg, але поки що не вдався. Я новачок у ffmpeg і здебільшого покладаюся на те, щоб налаштувати те, що я можу знайти в документації та існуючих прикладах в Інтернеті. З того, що я прочитав до цих пір, використання фільтра суміші або накладення повинно допомогти досягти того, що я хочу, але я не можу з’ясувати деталі командного рядка, щоб змусити його працювати.

У завмиранні і Concat фільтрів відмінно підходить для поступового зникнення відео 1, наростаючих і відео 2 і CONCAT на 2 в 1 кліп переходів типу , але я ціную допомогу в отриманні команди переходу з відео 1 до відео 2 без якого - або переходить до чорного між ними. Я не міг ніде знайти прикладів саме для цієї проблеми, можливо, я шукаю неправильні ключові слова ...?

Більш чудово, мої відео - це mp4 (h264 відео, без звуку, якщо це має значення), кожне триває 5 секунд, і я переходжу від ок. 4.5s відео 1 - 0,5s відео 2.

Подібно до того, що цей підручник робить MLT та фрейми (див. Приклад 2:25), хоча я шукаю спосіб зробити це просто у ffmpeg, не викликаючи жодних інших прог. http://www.youtube.com/watch?v=3PRZ9L_KLdI

Будемо дуже вдячні за будь-які вказівники чи, можливо, командний рядок, щоб отримати подібне зменшення, дуже дякую!


Відповіді:


23

Я пропоную зробити так:

  • Створіть чорний фон з такою ж тривалістю та роздільною здатністю, як і вихідне відео
  • Додайте альфа-канал до кожного відео
  • Додайте зменшення ефекту альфа-ефекту до кожного відео
  • Використовуйте накладку для кожного відео з чорним фоном

Отже, команда для додавання перехресного перегляду на 2 відео (5 сек) має бути:

ffmpeg -i 1.mp4 -i 2.mp4 -f lavfi -i color=black -filter_complex \
"[0:v]format=pix_fmts=yuva420p,fade=t=out:st=4:d=1:alpha=1,setpts=PTS-STARTPTS[va0];\
[1:v]format=pix_fmts=yuva420p,fade=t=in:st=0:d=1:alpha=1,setpts=PTS-STARTPTS+4/TB[va1];\
[2:v]scale=960x720,trim=duration=9[over];\
[over][va0]overlay[over1];\
[over1][va1]overlay=format=yuv420[outv]" \
-vcodec libx264 -map [outv] out.mp4

Це зникне перше відео на альфа на 4-й секунді (st = 4) протягом 1 секунди (d = 1), зникає в другому на 0 секунди (st = 0) протягом 1 секунди (d = 1) і перемістить його показ час вперед до 4 сек (+ 4 / ТБ). Потім ми просто вирізаємо 9 секунд чорного кольору, масштабуємо його для виведення розміру відео та накладаємо матеріал.

Сподіваюся, це допомагає.


Привіт @ptQa, велике спасибі, ефект кроссфід працює як шарм. Хоча те, що відбувається у вихідному відео, полягає в тому, що воно показує лише верхній лівий розділ оригінальних відео, а решта кадру відсутня. Я переглянув роздільну здатність, вхід - 960 х 720, а вихід - 320 х 240, але це не зменшує масштаб усього відео, натомість вирізає розділ 320 х 240 у верхньому лівому куті і показує, що у вихідному відео решта вхідні відео відсутні. Чи є доповнення до вашого командного рядка, яке перешкоджає цьому?
Магба

О, я зрозумів, ви також повинні масштабувати чорний колір до роздільної здатності, яку ви хочете отримати. Дивіться оновлену відповідь. Я додав масштаб для фільтра графіка.
ptQa

Це вирішило це, спасибі. Я завантажив
зразкове

Та ж проблема; У мене є варіант цього роботи над деяким власним відео - дякую. Запитання: Як це було б змінено, щоб також перехредно звукозаписи відео, дотримуючись того самого шаблону, що і відео зникають?
Джим Міллер

1
До речі, я думаю, що у зразковій команді відповіді є помилка - це має бути -i 1.mp4 -i 2.mp4..., правда?
Джим Міллер

7

Ось як я зробив:

  • ffmpeg версія N-77197-gdf2ce13
  • 2 відео по 4 секунди.
  • Потрібно приєднатися до цього, зникаючи між ними.
  • відео - 25 кадрів в секунду.

1) Додайте відмирання (від світлого до темного) в кінці 1-го і зникає (темне до світлого) на початку 2-го:

ffmpeg -i 1.mp4 -y -vf fade=out:76:24 1f.mp4

ffmpeg -i 2.mp4 -y -vf fade=in:0:25 2f.mp4

76:24 означає, що зникнення починається кадром 76 і закінчується на 24 кадри пізніше = 1 зникає.

0:25 означає, що зникнення в кадрі розпочнеться 0 і закінчиться на 25 кадрів пізніше.

2) Об’єднайте 2 відео

Перетворити все в TS

ffmpeg -i 1f.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts 1f.ts

ffmpeg -i 2f.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts 2f.ts

Злиття

ffmpeg -i "concat:1f.ts|2f.ts" -bsf:a aac_adtstoasc -c copy output.mp4

Завдяки:

http://www.bogotobogo.com/FFMpeg/ffmpeg_fade_in_fade_out_transitions_effects_filters.php


6
Це не перехрестя.
Gyan

4
Що сказав @Mulvya Перехресний відтінок вицвітає один кліп одночасно, коли зникає інший. Перший кліп має прозорість, що постійно збільшується протягом тривалості перехресного відтінку; друга - прозорість її постійно знижується.
інтуїтивно

7

ffmpeg-concat - це найпростіший спосіб виконати те, що ви хочете, і дозволяє використовувати купу сексуальних переходів OpenGL, за замовчуванням - кроссфід.

ffmpeg-gl-перехід - це спеціальний фільтр ffmpeg, який дозволяє використовувати GLSL для плавного переходу між двома відеопотоками. Цей фільтр значно простіший у використанні та налаштуванні, ніж наведені тут альтернативи.

Цей фільтр підтримує великий список типів переходів, за замовчуванням - перехресне перетворення.

./ffmpeg -i 0.mp4 -i 1.mp4 -filter_complex "gltransition=duration=4:offset=1.5" out.mp4

4
Ви розглядали можливість подати патч до FFmpeg?
llogan

1
Я, безумовно, буду, мені просто потрібно виправити деякі невеликі проблеми та спробувати ще більше. Гарний дзвінок!
fisch2

це в офіційному FFmpeg? Я не можу знайти його
kraftydevil
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.