Cách Để Cài Đặt Ffmpeg Là Gì ? Hướng Dẫn Tìm Hiểu Ffmpeg Cơ Bản – In4tintuc – Trang Tổng Hợp Online

Trong thời đại mà video ngắn phổ biến như tiktok, facebook hay trên Piepme, là một lập trình viên, bạn phải hiểu: các nguyên tắc và kỹ thuật đằng sau việc chỉnh sửa video. Bài viết này mô tả ngắn gọn thành phần của các nguyên tắc của video và các công cụ chỉnh sửa video phổ biến, cũng như cách sử dụng FFmpeg trong NodeJS.

Đang xem: Ffmpeg là gì

Để hiểu nguyên lý của video, trước tiên bạn nên bắt đầu với nguyên lý của hình ảnh và đầu tiên chúng ta sẽ nói đến Pixel.

Pixel là gì?

Sử dụng ffmpeg trong nodejs

Pixel là gì? Hình ảnh là một khối màu đơn vị nhỏ nhất trong hình ảnh được biểu thị bằng một dãy số, được gọi là pixel (pixel / px). Kích thước hình ảnh mà chúng ta đang nói đến 1920*1080đề cập đến các pixel chiều dài và chiều rộng là 1920 và 1080 pixel, do đó 1920*1080, tổng số pixel trong một bức ảnh là: 1920*1080 = 2073600 pixel.

Làm thế nào để tính toán kích thước của hình ảnh?

Công thức tính một hình ảnh sẽ là Số lượng pixel * kích thước pixel = kích thước hình ảnh. Màu sắc RGB thực sự có thể được thể hiện 256×256×256= 16,777,216là những gì chúng ta thường thấy.

Về độ sâu của pixel thì RGB có mấy loại bit sau đây: 1bit, 4bit, 8bit, 16bit, 24bit, 32bit. Ví dụ người ta nói hình ảnh 8bit thì hiểu nôm na là (đề cập đến rgb mỗi màu chiếm 8 bit) do đó 1 px = 3 * 8bit = 24bit, nó thường được gọi là hình ảnh 24 bit. Bạn không cần hiểu sâu về những khái niệm này nhưng về cơ bản cũng phải hiểu và từng đó cũng đủ gây dựng cho bạn một sự hiểu biết nhất định về pixel.

Thông tin cơ bản về video

Video là hình ảnh của một sản phẩm được ghép lại với nhau, thậm chí FPS càng cao càng trông trôi chảy và mượt mà hơn, với tốc độ khung hình (số hình ảnh trên giây là FPS phát) để đo độ trôi chảy mượt mà của video.

Sau đó, kích thước video có thể được tính toán theo thuật toán của kích thước hình ảnh. Công thức tính kích thước của video:

Kích thước của video = thời lượng (giây) * tốc độ khung hình (FPS) * kích thước hình ảnh;

Chính vì vậy để hiểu video thì một số khái niệm bạn cần biết cơ bản là như thế này:

Khung: Ảnh tĩnh, đơn vị nhỏ nhất của video.Tốc độ khung hình (FPS): Số lượng hình ảnh được phát mỗi giây.Tốc độ bit: Luồng dữ liệu được tệp video sử dụng trong một đơn vị thời gian xác định chất lượng và kích thước của video và đơn vị là kb / s hoặc Mb / s.

Nói chung, ở cùng độ phân giải, dòng mã của tệp video càng lớn, tỷ lệ nén càng nhỏ và chất lượng hình ảnh càng cao. Luồng mã càng lớn thì tốc độ lấy mẫu trên một đơn vị thời gian càng lớn, luồng dữ liệu càng cao và độ chính xác càng cao và tập tin đã xử lý sẽ càng gần với tập tin gốc, càng tốt, chất lượng hình ảnh càng rõ nét và khả năng giải mã của thiết bị phát càng lớn.

Ba chế độ tốc độ bit phổ biến:

– CBR

– Tốc độ bit ổn định trong suốt

– Kích thước tệp có thể đoán trước

– Áp lực mã hóa thấp, thường được sử dụng trong phát sóng trực tiếp livestream

– VBR

– Tốc độ bit thay đổi

– Tỷ lệ mã thấp trong các cảnh đơn giản, tốc độ mã cao trong các cảnh phức tạp

– CRF

– Chế độ chất lượng cố định

– Giá trị CRF càng thấp, video trông càng cao

Định dạng đóng gói video

Các định dạng đóng gói phổ biến MP4, AVI, FLV, mov, RMVB, MKV, WMV, 3GP, ASF.

Định dạng mã hóa video

Mã hóa video là mô tả về việc sử dụng các thuật toán nén video để chuyển đổi một định dạng video này thành một định dạng video khác và mã hóa âm thanh cũng giống như vậy.

Xem thêm: Mách Nhỏ Bạn Những Bài Thuốc Dân Gian Chữa Bệnh Não Và Giải Pháp Từ Nattospes

Mã hóa video phổ biến AC-1 định dạng: MPEG2/H.262, VP8, MPEG4, VP9, H.261, H.263, H.264,H.265 …

Âm thanh phổ biến mã hóa WMA định dạng: MP3, AC-3, AAC, APE, FLAC,WAV …

Nguyên tắc nén video

Mục đích chính là nén dữ liệu pixel video (RGB, YUV, v.v.) thành luồng video, do đó giảm lượng dữ liệu video, tức là xử lý pixel.

YUV và RGB là một định dạng được mã hóa màu, so với RGB việc nén có lợi hơn. Trong số đó, “Y” đại diện cho độ sáng (Lumina hoặc Luma), là giá trị thang độ xám; và “U” và “V” đại diện cho sắc độ (Chrominance hoặc Chroma), được sử dụng để mô tả màu sắc và độ bão hòa của hình ảnh. Màu của pixel được chỉ định.

Ở đây chúng ta chỉ nói khái hiệm cơ bản còn bạn muốn hiểu sâu hơn về “Làm thế nào nén video và âm thanh” thì chúng ta có thể tìm đọc trên trang của bạn tôi đó là Mr. Google.

FFmpeg là gì?

FFmpeg là một tập hợp các thư viện và công cụ để xử lý nội dung đa phương tiện như âm thanh, video, phụ đề và siêu dữ liệu liên quan. Nói một cách đơn giản, nó là một chương trình xử lý video đa nền tảng.

Nguyên lý của FFmpeg

Về cơ bản có thể nói toàn bộ quá trình: phân kênh => giải mã => mã hóa => ghép kênh.

Hình gif sử dụng ffmpeg

Cài đặt FFmpeg

FFmpeg được chia thành 3 phiên bản: Static, Shared, Dev

Cài đặt MacBook:

brew install ffmpegCài đặt khác vui lòng tham khảo web chính thức của ffmpeg

Sử dụng FFmpeg

Nó có thể mã hóa từng thành phần của video riêng biệt và hỗ trợ các định dạng mã hóa âm thanh và video toàn diện hơn.

Xem thêm: Thủ Tục Nhập Khẩu Phần Mềm Hs Code, Airseaglobal

Ví dụ: chuyển đổi vùng chứa video, nén âm thanh và video, quay video, ảnh chụp màn hình, bộ lọc, trích xuất âm thanh … phải công nhận ffmpeg rất mạnh mẽ.

Cú pháp dòng lệnh ffmpeg

ffmpeg -i

Lấy thông tin video sử dụng ffmpeg

//thông tin videoffmpeg -i input.mp4Input #0, mov,mp4,m4a,3gp,3g2,mj2, from ‘input2.mp4’: Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2mp41 encoder : Lavf58.29.100 description : Packed by Bilibili XCoder v2.0.2 Duration: 00:08:24.45, start: 0.000000, bitrate: 2180 kb/s Stream #0:0(und): Video: hevc (Main) (hev1 / 0x31766568), yuv420p(tv), 1920×1080 , 2046 kb/s, 25 fps, 25 tbr, 16k tbn, 25 tbc (default) Metadata: handler_name : VideoHandler Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default) // Metadata: handler_name : SoundHandler

Chuyển đổi tốc độ bit sử dụng ffmpeg

ffmpeg -i input.mp4 -b:v 64k -bufsize 64k output.mp4

Chuyển đổi tỷ lệ khung hình với ffmpeg

ffmpeg -i input.mp4 -r 5 output.mp4

Chuyển đổi độ phân giải:

ffmpeg -i input.mp4 -vf scale=480:-1 output.mp4 // 1080p * 480p

Tốc độ video

ffmpeg -i test1 “setpts=PTS/5” test4.mp4 // Tốc độ chuyển đổi video gấp 5 lầnfmpeg -i input.mp4 -filter:a “atempo=2.0” 4s.mp4 // Phát lại tốc độ âm thanh gấp 2 lầnffmpeg -i input.mp4 -filter_complex “setpts=0.5*PTS;atempo=2.0” -map “” -map “” -vn 4s.mp4 //Tốc độ âm thanh và video cùng lúc gấp 2 lần

Trích xuất âm thanh và video

ffmpeg -i input.mp4 -an output.mp4 //videoffmpeg -i input.mp4 -vn output.mp3 //âm thanh

Chuyển đổi tỷ lệ video:

ffmpeg -i input.mp4 -aspect 21:9 output.mp4

Chuyển đổi vùng chứa video:

ffmpeg -i input.mp4 output.avi

Ảnh chụp màn hình video:

ffmpeg -ss 00:00:05 -i input.mp4 -vframes 1 -q:v 5 -f image2 pic-%03d.jpeg// -ss 00:00:05 Bắt đầu từ giây thứ năm -vframe 1 chỉ chụp 1 khung hình -q: v 5 chất lượng hình ảnh 1-5

Quay video:

ffmpeg -ss 00:00:02 -i input.mp4 -t 6.5 -c copy cut.mp4ffmpeg -ss 00:00:02 -i input.mp4 -to 00:00:10 -c copy cut.mp4

Hình ảnh hoặc video liên tục tạo ra hình ảnh gif sử dụng ffmpeg

ffmpeg -i output.mp4 -to 10 -r 30 -vf scale=100:-1 gg.gif //Chặn một phần của video để tạo gif 100: -1 với chiều rộng được chỉ định và chiều cao duy trì tỷ lệ ban đầuffmpeg -r 5 -i pic-%03d.jpeg 11.gif // tạo nhiều hình ảnh gif// Hình ảnh cũng có thể tạo videoffmpeg -r 20 -i pic-%03d.jpeg gif.mp4ffmpeg -f concat -i “concat:part1.mp4|part2.mp4|3.mp4|part4.mp4” -c copy output.mp4 // Ghép nhiều video thành một

Hình ảnh hoặc video cộng với bộ lọc filter:

// filter làm mờffmpeg -y -i pic-012.jpeg -vf boxblur=7 blur.jpeg// Đổi màuffmpeg -i pic-012.jpeg -vf colorbalance=rm=1 colorbalance1.jpg // Điều chỉnh trọng lượng của một kích thước nhất định của rgb để đạt được sự thay đổi màu sắc.ffmpeg -i pic-012.jpeg -vf colorchannelmixer=.3:.4:.3:0:.3:.4:.3:0:.3:.4:.3 colorchannelmixer1.jpg // Tính toán lại bốn kênh của rgba và đưa ra tỷ lệ trọng lượng tương ứng.ffmpeg -i pic-012.jpeg -vf hue=h=30:s=1 hue1.jpg // Thay đổi tông màu, tương đương với bảng màuffmpeg -i pic-012.jpeg -vf lutyuv=”y=negval:u=negval:v=negval” lutyuv1.jpg // lutyuv được sử dụng cho không gian màu yuvffmpeg -i pic-012.jpeg -vf negate=0 negate1.jpg // Đảo ngượcffmpeg -i pic-012.jpeg -vf swapuv swapuv1.jpg // UV Hoán đổiffmpeg -i pic-012.jpeg -vf crop=w=200:h=300:x=500:y=800 crop1.jpg // crop

Thêm hình mờ với ffmpeg

ffmpeg -i input.mp4 -i pic-012.jpeg -filter_complex “ scale=176:144 ;overlay=x=0:y=0″ out.mp4 //Thêm hình mờ hình ảnh vào videoffmpeg -i input.mp4 -vf “drawtext=fontsize=100:fontcolor=white:alpha=0.3:text=’%{localtime:%Y-%m-%d %H-%M-%S}’:y=h-line_h-100:x=(w-text_w)/2” output22.mp4// Thêm hình mờ văn bảnffmpeg -i input.mp4 -i pic-012.jpeg -filter_complex “ scale=176:144 ;overlay=x=0:y=0″ out.mp4ffmpeg -i input.mp4 -vf drawtext=”fontsize=100:text=’我是水印’:fontcolor=green:enable=lt(mod(t,3),1)” interval-sy.mp4

Thêm phụ đề:

ffpmeg -i input.ass input.srt// thêm phụ đề vào video. Có thể thêm nhiều phụ đềffmpeg -i input.mp4 -vf subtitles=input.ass output.mp4

Nén video:

ffmpeg -i input.mp3 -ab 128 output.mp3 // nén âm thanhffmpeg -i input.mp4 -vf scale=1280:-1 -c:v libx264 -preset veryslow -crf 24 output.mp4 // nén video

Phát trực tiếp video:

// Lưu video đã ghi cục bộffmpeg -f avfoundation -i “1” -vcodec libx264 -preset ultrafast -f h264 -r 30 ~/Downloads/test.h264// Đẩy các video đã được tải xuống vào thư mụcffmpeg -re -i ~/Downloads/xxx.mp4 -vcodec libx264 -acodec aac -strict -2 -f flv rtmp://localhost:1935/live// Ghi màn hìnhffmpeg -f avfoundation -i “1” -vcodec libx264 -preset ultrafast -acodec libfaac -f flv rtmp://localhost:1935/rtmplive/room// Ghi âm máy tính để bàn và micrôffmpeg -f avfoundation -i “1:0” -vcodec libx264 -preset ultrafast -acodec libmp3lame -ar 44100 -ac 1 -f flv rtmp://localhost:1935/live/room// Ghi âm máy tính để bàn và micrô và bật camera để quayffmpeg -f avfoundation -framerate 30 -i “1:0” -f avfoundation -framerate 30 -video_size 640×480

Cách sử dụng FFmpeg trong Node

Fluent-ffmpeg Fluent-ffmpeg là một module trừu tượng hóa các lệnh ffmpeg phức tạp thành NodeJS, miễn là FFmpeg được cài đặt trong hệ thống . Một số cách sử dụng đơn giản

// Thông tin videoffmpeg.ffprobe(input, function (err, metadata) { console.dir(metadata);});// Trích xuất âm thanhffmpeg(input) .audioCodec(“libmp3lame”) .on(“error”, function (err) { console.log(“Đã xảy ra lỗi: ” + err.message); }) .on(“end”, function () { console.log(“Trích xuất âm thanh hoàn tất