Sunday, October 30, 2016
- Phần đầu tiên của code thường là ffmpeg: cái này là để gọi đến file ffmpeg.exe nó sẽ thực thi cái code của các bác.
- Tiếp đến là nhập dữ liệu đầu vào: Cấu trúc của nó là -i inputfile1(đường dẫn đến file đầu vào, nếu file nằm cùng thư mục với ffmpeg.exe thì để tên file là được) đầu vào có thể là ảnh, video, audio tùy các bác nó nhận được hết (nếu có nhiều hơn 1 input file các bác cứ thêm -i inputfile2 đằng sau cái inputfile1 nhé) nó sẽ thành ntn ffmpeg -i fileinput1 -i fileinput2
Sau input file thường sẽ là -filter_complex hoặc -vf "option1,option2", -af "option1,option2"
Phần cuối sẽ là -vcodec (sau cái này là phần định dạng đầu ra cho video cái này cứ lấy theo code của các bác trên này k cần sửa nhiều đâu)... -acodec(sau cái này là phần định dạng đầu ra cho audio cái này cứ lấy theo code của các bác trên này k cần sửa nhiều đâu) ... -preset ultrafast(cái này là tốc độ render ultrafast là nhanh nhất, có thể để superfast chậm hơn nhưng chất lượng ren xong sẽ đẹp hơn chút) output.mp4 (đường dẫn fileuotput)
-vf, -af, -filter_complex là gì?
-vf -> video filter: nó là phần khai báo trước khi bác sử dụng 1 option nào cho video
-af -> audio filter: nó là phần khai báo trước khi bác sử dụng 1 option nào cho audio
-af và -vf thường sử dụng khi chỉ có 1 đầu vào cà 1 đầu ra (tức là chỉ có 1 inputfile vào). Nếu chỉ có 1 inputfile thì mặc định những option xử lý sẽ trên inputfile đó nên cấu trúc đơn giản hơn nhiều.
Chốt lại cấu trúc cơ bản nếu có 1 video đầu vào sẽ là:
ffmpeg -i inputfile -vf "option1,option2" -af "option1,option2" -vcodec ... -acodec ... -preset ultrafast output.mp4
Khi có từ 2 fileinput trở lên (thường khi làm thu nhỏ có background kèm video và logo...) các bạn sẽ dùng -filter_complex - khai báo chung và sẽ chỉnh từng option cho đầu vào bằng cách đặt tên cho nó.
Các bạn sẽ thấy cấu trúc trong phần filter_complex như sau "[0:v]option1,option2[video1];[1:v]option1,option2[viodeo2];[video1][video2]option1,option2[videoout]"
[0:v]: cái này là xử lý video input đầu tiên sau khi xử lý xong thì đặt tên là [video1] (giả sử như crop hoặc làm mờ...)
[1:v]: cái này là xử lý video input thứ 2 sau đó đặt tên cho nó là [video2]. Sau khi xử lý riêng thì gộp lại thành 1 đầu ra [video1][video2]overlay=1:1[videoout](giả sử mình dùng option overlay để đè 2 video lên nhau, video nào đứng sau thì sẽ ở phía trên nhé) và đặt tên cho đầu ra là [videoout]
Nếu nhiều input hơn thì cứ thế tăng lên [2:v],[3:v]...
Tương tự ta có [0:a],[1:a]... Để xử lý audio
Nếu bạn chỉ muốn lấy audio của 1 trong 2 video mà thôi thì gọi audio video đó ra. Nếu lấy ở video input thứ 2 thì gọi [1:a]option1,option2[audioout] -> đặt tên audio đầu ra là audioout
Sau filter_complex các bác nên chỉ định đầu ra cuối cùng cho output bằng hàm -map. Như ở 2 ví dụ trên thì mình sẽ gọi -map [videoout] -map [audioout] để lấy chính xác phần muốn xuất ra tiếp đến là phần cuối -vcodec -acodec và -preset đến output
Viết lại tổng thể cấu trúc với 2 input, lấy âm thanh từ input thứ 2 cho các bác dễ hình dung
ffmpeg -i -i fileinput1 -i fileinput2 -filter_complex "[0:v]option1,option2[video1];[1:v]option1,option2[viodeo2];[video1][video2]option1,option2[videoout];[1:a]option1,option2[audioout]" -map [videoout] -map [audioout] -vcodec ... -acodec ... -preset ultrafast output.mp4
Vậy là đã xong cấu trúc cơ bản của FFMPEG rồi. Các bác có thể tùy biến sáng tạo ghép các option vào code để tạo ra sản phẩm của riêng mình.
Các option và ví dụ có đầy đủ trong link này các bác tự nghiên cứu nhé. https://ffmpeg.org/ffmpeg-filters.html
E xin note lại 1 vài option hay sử dụng cho các bác dễ tìm (thông số chi tiết các bác tự tìm hiều trong link trên nhé):
crop: Cắt bớt chiều rộng chiều dài của video (cái này chắc biết hết r)
scale: Phóng to, thu nhỏ video theo kích cỡ mình muốn
hflip: đào video theo chiều dọc
vflip: đảo video theo chiều ngang
boxblur: làm mờ video
overlay: xếp chồng 2 video lên nhau
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment