Tambahkan hamparan gambar di depan video menggunakan ffmpeg

31

Saya punya banyak video dan saya harus meletakkan gambar di depan mereka selama sekitar 5 detik, tetapi menambahkannya secara manual dan merendernya setiap waktu akan sangat lama, jadi saya bertanya apakah mungkin untuk melakukannya melalui ffmpeg dan jika Anda bisa, tolong, bantu saya karena saya tidak punya pengalaman dengan ffmpeg. Saya sudah menemukan beberapa perintah tetapi tidak ada yang bekerja. Yang ini misalnya.

ffmpeg -itsoffset 5 -i in.mp4 -r 25 -loop 1 -i intro.png -filter_complex "[1:v] fade=out:125:25:alpha=1 [intro]; [0:v][intro] overlay [v]" -map "[v]" -map 0:a -acodec copy out.mp4
Azthy
sumber
1
Apakah Anda hanya menyalin perintah itu atau menulisnya sesuai dengan kebutuhan Anda? Saya bertanya karena perintah ini melibatkan hal-hal seperti fade out dan segala macam hal lain yang tidak tercakup dalam pertanyaan Anda. Apakah Anda hanya perlu overlay gambar atau Anda perlu lebih dari itu?
PTS
Saya menyalinnya dari suatu tempat, yang saya butuhkan hanyalah meletakkan gambar di depan video.
Azthy

Jawaban:

44

Anda dapat melakukan overlay gambar sederhana menggunakan sintaks berikut:

ffmpeg -i input.mp4 -i image.png \
-filter_complex "[0:v][1:v] overlay=25:25:enable='between(t,0,20)'" \
-pix_fmt yuv420p -c:a copy \
output.mp4

overlay=25:25 artinya kita ingin memposisikan gambar 25px ke kanan dan 25px ke bawah, yang berasal dari sudut kiri atas (0: 0).

enable='between(t,0,20)' berarti kami ingin gambar ditampilkan antara detik 0 dan 20.

[0:v][1:v]berarti bahwa kita ingin file video pertama yang kita impor -i, dalam kasus input.mp4 kami atau bagaimana ffmpeg melihatnya file input video nomor 0, berada di bawah file input video 1, dalam kasus kami image.png. :vhanya berarti kami ingin video 0 dan video 1. [0:a]berarti kami ingin trek audio yang diimpor pertama. Yang juga akan datang dari input.mp4 tetapi akan mengarah ke trek audio, bukan trek video di file mp4.

Jika Anda menginginkan kualitas gambar / pengaturan tertentu dan bukan pengaturan yang dipilih ffmpeg, tambahkan gambar dan atau opsi penyandian audio yang ingin Anda gunakan. Encoder video default adalah x264. Periksa panduan penyandian H.264 untuk kemungkinan pengaturan.

Perintah -acodec copy/ -c:a copyyang Anda miliki di fe hanya akan menggunakan kembali audio dari file sumber. Meskipun Anda tidak dapat melakukannya dengan video tentu saja (dalam hal ini), itu harus ditranskode karena kami membuat sumber video baru.

Jika Anda ingin transcode audio, hapus -c:a copybagian tersebut. Anda mungkin harus secara spesifik menentukan pembuat enkode, misalnya -c:a aac -strict experimental. Lihat panduan pengodean AAC untuk info lebih lanjut.

PTS
sumber
Iterasi berikut dari perintah di atas bekerja untuk saya di Android karena yang asli memberi dan kesalahan seperti aac adalah fitur eksperimental: ffmpeg -i input.mp4 ketat -2 -i image.png -filter_complex [0: v] [1: v] overlay = 25: 25: aktifkan = 'antara (t, 0,20)' output.mp4
muneikh
adakah yang memposisikan di bawah tanpa mengetahui ketinggian? atau jauh kanan tanpa mengetahui lebarnya?
chovy
tentu, hanya menganalisis video dengan ffprobe dan mengekstrak dimensi video dari output. Mungkin ada juga opsi yang terintegrasi dalam ffmpeg tapi saya tidak menyadarinya.
PTS
3
Perintah Anda menggantikan sebuah fragmen dari file video asli, tetapi pengguna mungkin ingin menambahkan (sehingga menambah panjang video) gambar sebelum dan / atau setelah video. Tolong bantu dengan ini
porton
1
@laurent yang tergantung pada file sumber dan atau output Anda. pix_fmt adalah singkatan dari format pixel. Ada banyak format piksel berbeda yang tersedia untuk codec yang berbeda, yang menentukan satu memastikan Anda tidak berakhir dengan sesuatu yang tidak berhasil untuk Anda. yuv420p adalah format piksel yang paling didukung ketika datang ke h264 tetapi ada juga yuv422p dan yuv444p misalnya.
PTS