Bagaimana cara menambahkan logo saya selama 30 detik pertama dalam video dengan ffmpeg?

9

Saya mencoba untuk menambahkan logo saya selama 30 detik pertama dalam video dengan ffmpeg. Saya punya video yang disebut d1.mp4dan logo yang disebut logo.png.

Saat video dimulai, tanda air harus berada di sudut kiri atas atau kanan atas video dan menghilang setelah 30 detik.

Bisakah Anda menunjukkan kepada saya bagaimana cara menambahkannya?

iwocan
sumber
nama video saya adalah d1.mp4 dan nama logo saya adalah logo.png, terima kasih ..
iwocan
Lalu apa yang ffmpeg -i d1.mp4 -i logo.pngditunjukkan? Masukkan saja perintah itu dan tunjukkan kepada kami apa outputnya. Saat mengajukan pertanyaan ffmpeg, Anda harus selalu memasukkan sebanyak mungkin detail tentang materi video / audio apa yang Anda miliki, apa yang sudah Anda coba, dan output baris perintah penuh dari semua yang Anda coba.
slhck
inilah yang saya dapatkan di layar cmd saya. pastebin.com/bPCnhXh2
iwocan

Jawaban:

13
ffmpeg -i in.mp4 -framerate 30000/1001 -loop 1 -i logo.png -filter_complex
  "[1:v] fade=out:st=30:d=1:alpha=1 [ov]; [0:v][ov] overlay=10:10 [v]" -map "[v]"
  -map 0:a -c:v libx264 -c:a copy -shortest out.mp4

Ini mengasumsikan bahwa logo adalah gambar diam tunggal dengan saluran alfa dan Anda ingin menaruhnya di atas video dengan frame rate 30000/1001 (NTSC rate). Ubah -framerateuntuk mencocokkan video input Anda jika berbeda. Jika logo Anda adalah video, maka abaikan -framerate 30000/1001 -loop 1. Jika logo tidak memiliki saluran alfa, tambahkan satu dengan menyisipkan mis format=yuva420p,segera sebelum fade.

Ini akan menampilkan logo pada posisi x, y 10,10 selama 30 detik diikuti oleh fade out 1 detik.

mark4o
sumber
1
Sangat menarik! Bisakah Anda menjelaskan mengapa frameratedan loopdiperlukan dalam kasus ini dan bukan untuk hamparan sederhana tanpa filter fade?
Rajib
Terima kasih banyak mark40 tetapi ketika saya menulis kode ini, layar cmd tidak berhenti .. Saya tidak tahu mengapa tetapi tidak berhasil untuk saya ..
iwocan
Hai LordNeckbeard, Ini screenshotnya .. u1312.hizliresim.com/1j/4/v5ny8.png ..
iwocan
1
@ Woocan Saya yakin Anda dapat menyalin hal-hal dari jendela prompt. Saya berasumsi Anda akan mencari cara melakukannya, tetapi lihat Salin Ke Papan Klip Dari Prompt Perintah Windows .
llogan
4
@Rajib: Alasan untuk -frameratedan -loopuntuk gambar diam adalah agar fade out bekerja. Jika hanya ada satu frame maka tidak ada cara untuk menghilang selama interval 1 detik. Idealnya, frame rate harus sama dengan video sehingga fade akan semulus mungkin.
mark4o
19

Menggunakan overlayfilter video untuk menambahkan logo ke video:

masukkan deskripsi gambar di sini

ffmpeg -i video.mp4 -i logo.png -filter_complex "[0:v][1:v]overlay" \
-codec:a copy out.mp4

Untuk memahami perintah ini, Anda perlu tahu apa itu penentu aliran dan membaca Pengantar FFmpeg Filtering akan membantu. [0:v]merujuk ke aliran video dari input pertama ( video.mp4), dan [1:v]mengacu pada streaming video dari input kedua ( logo.mp4). Ini adalah bagaimana Anda dapat mengetahui overlayinput apa yang digunakan. Anda dapat menghilangkan [0:v][1:v], dan overlaymasih akan bekerja, tetapi disarankan untuk eksplisit dan tidak bergantung pada kemungkinan default yang tidak diketahui.

Secara default, logo akan ditempatkan di kiri atas.

Menggunakan streaming-codec:a copy akan menyalin audio. Ini hanya muxes audio yang bukan menyandikan ulang itu. Anggap saja sebagai "salin dan tempel" audio.

Memindahkan logo

Contoh ini akan memindahkan logo 10 piksel ke kanan, dan 10 piksel ke bawah: masukkan deskripsi gambar di sini

ffmpeg -i video.mp4 -i logo.png -filter_complex "[0:v][1:v]overlay=10:10" \
-codec:a copy out.mp4

Contoh ini akan memindahkan logo 10 piksel dari sisi kanan dan 10 piksel ke bawah:

masukkan deskripsi gambar di sini

ffmpeg -i video.mp4 -i logo.png -filter_complex \
"[0:v][1:v]overlay=main_w-overlay_w-10:10" -codec:a copy out.mp4

main_wmengacu pada lebar input "utama" (latar belakang atau [0:v]), dan overlay_wmengacu pada lebar input "overlay" (logo atau [1:v]). Jadi, dalam contoh ini, ini dapat diterjemahkan ke overlay=320-90-10:10atau overlay=220:10.

Mengatur waktu hamparan

Beberapa filter dapat menangani pengeditan garis waktu yang memungkinkan Anda untuk menggunakan ekspresi aritmatika untuk menentukan kapan filter harus diterapkan. Lihat untuk ffmpeg -filtersmelihat filter mana yang mendukung pengeditan waktu.

Contoh ini akan menampilkan logo hingga 30 detik:

ffmpeg -i video.mp4 -i logo.png -filter_complex \
"[0:v][1:v]overlay=10:10:enable=between(t\,0\,30)" -codec:a copy out.mp4

Jika Anda ingin memudar logo lihat jawaban mark4o .

llogan
sumber
Terima kasih banyak! :) Saya minta maaf atas bahasa Inggris saya yang rusak lagi. Perintah ini berfungsi sempurna! :)
iwocan
akhirnya sesuatu yang bisa dimengerti! apa yang harus saya gunakan untuk membuatnya muncul di awal daripada di akhir?
cikatomo
Saya bermaksud tampil di awal DAN di akhir? Dua kali. saya telah mencoba mengaktifkan = antara (t \, 0 \, 30): mengaktifkan = antara (t \, 50 \, 60), tetapi satu-satunya timeline terakhir yang berlaku
cikatomo
@cikatomo enable=not(between'(t,30,50)'). Ini akan menampilkan overlay setiap saat tetapi tidak pada durasi 30-60 detik.
llogan
Sempurna, terima kasih. Meskipun peringatan Anda untuk tidak menggunakan overlaysemua dengan sendirinya, saya lakukan, karena posisi default kiri atas adalah apa yang saya inginkan. (Jadi pada akhirnya bendera saya sederhana filter_complex overlay.)
felwithe