Saya memiliki pemutar video html 5 yang lebar 700px, tinggi 400px. Saya mencoba avconv
menggunakan ffmpeg untuk mengubah ukuran (sambil mempertahankan rasio aspek) dan memastikannya pas dengan pemain saya.
Input dapat berupa file dengan ukuran berapa pun, jadi saya perlu mengubah ukuran yang lebih besar tetapi memusatkan yang lebih kecil dengan bilah hitam. Sejauh ini saya sudah mencoba: -s
dan -aspect
, saya sudah melihat pad
digunakan dengan -vf
saklar tetapi tidak mengerti cara kerjanya cukup untuk mendapatkan apa yang saya butuhkan.
Ini adalah gagasan kasar tentang apa yang saya butuhkan. Saya tidak yakin apakah itu mungkin. Ini hampir seperti CSS max-width / max-height. Saya menyadari ini mungkin hanya omong kosong kata-kata tetapi jika ada orang yang mengerti apa yang saya bicarakan, saya akan menghargai bantuan, Terima kasih.
perintah avconv:
avconv -y -i control.avi -vcodec libx264 -b 2000k -bufsize 20M -acodec aac -strict experimental -ar 44100 -ab 256k bigbuck_out.mp4
sumber
Jawaban:
Metode sederhana adalah dengan menggunakan
force_original_aspect_ratio
opsi dalam filter skala .Gambar asli. Merupakan video rasio aspek 640x480, 4: 3.
Dalam contoh-contoh ini gambar asli akan diskalakan agar sesuai dengan keluaran rasio aspek 16: 9 sambil mempertahankan rasio aspek asli. Untuk melakukan ini, Anda dapat:
Kotak surat atau kotak surat
Gambar kotak-kotak. Menyesuaikan input 640x480 (4: 3) ke dalam output 1280x720 (16: 9).
Ini akan meningkatkan gambar. Jika Anda ingin menghindari peningkatan, lihat contoh di bawah ini.
Sebaliknya, letterboxing akan terjadi jika rasio aspek input lebih lebar daripada rasio aspek output. Misalnya, input dengan rasio aspek 2,35: 1 yang cocok dengan output 16: 9 akan menghasilkan letterboxing.
Sama seperti di atas tetapi tanpa upscaling
640x480 (4: 3) input ke output 1280x720 (16: 9) tanpa upscaling.
Tanaman
Gambar yang dipangkas. Rasio aspek input 4: 3, rasio aspek keluaran 16: 9.
sumber
color
opsi, sepertipad=1280:720:(ow-iw)/2:(oh-ih)/2:color=red
(atau Anda dapat menggunakan heksadesimal jika Anda mau). Lihat daftar warna .Inilah perintah yang akan menambahkan pillar atau letterboxing untuk lebar keluaran tetap. Ini agak lama, tetapi Anda harus menentukan padding beberapa cara.
Pertama, di shell Anda tentukan lebar dan tinggi keluaran:
Kemudian jalankan perintah:
Ini dilepaskan ke hal-hal mendasar yang diperlukan untuk mengubah ukuran dan membalut — tambahkan opsi video dan audio lainnya sesuai keinginan Anda. Perhatikan bahwa angka untuk
width
danheight
harus dapat dibagi 2 agar dapat berfungsi untuk sebagian besar codec.Inilah penjelasan tentang apa yang terjadi:
min()
) dan hanya memilih faktor itu untuk mengubah ukuran.iw*min(…):ih*min(…)
).$width:$height
adalah lebar dan tinggi keluaranscale
filter.sumber
-movflags +faststart
contoh slhck. Ini akan memungkinkan video Anda yang diunduh secara progresif untuk memulai pemutaran sebelum sepenuhnya diunduh, dan juga melihat Panduan Pengkodean FFmpeg dan x264 dan Panduan Pengkodean FFmpeg dan AAC untuk instruksi dan contoh pengkodean lebih lanjut.pad=$width:$height:(ow-iw)/2:(oh-ih)/2"
ow-iw
.Menurut saya, Anda perlu melakukan ini dalam tiga langkah:
FFmpeg / avconv dapat melakukan penskalaan / padding dengan filter video dalam satu langkah, transcoding hanya sekali. Misalnya, untuk mengambil video 16: 9, skalakan dengan lebar, lalu hasilkan kotak surat:
... tetapi untuk langkah pertama (mendeteksi rasio aspek dan membandingkannya dengan 7: 4 yang Anda butuhkan) Anda harus menggunakan skrip sejenis.
... akan memberi Anda rasio aspek video, yang akan terlihat seperti '16: 9 'atau' 4: 3 '. Dalam skrip bash, saya akan menggunakan sesuatu seperti:
Tentunya Anda harus menyesuaikannya dengan kebutuhan Anda.
sumber