Cách xử lý code đổi âm thanh với ffmpeg
Trước khi có thể sử dụng dòng lệnh này, hãy đảm bảo bạn đã tải về thư viện FFfmpeg.exe. Show
Đặt thư viện này cùng hai file audio và video cần ghép vào chung một thư mục. Ví dụ: Mình có thư mục data trong ổ E đang chứa ba file nói trên thì câu lệnh di chuyển tới thư mục data sẽ là: cd /d E:\data Sau khi đã di chuyển tới thư mục chứa file cần ghép, hãy chạy dòng lệnh cmd dưới đây: Giải thích: video_input.mp4 là file video cần ghép Audio_input.mp3 là file audio để ghép vào video output.mp4 là file sau khi ghép xong Tên các file này bạn có thể đổi với điều kiện là không được chứa khoảng trắng và các ký tự đặc biệt, còn các thông số khác cứ giữ nguyên. Nếu dòng lệnh trên không hoạt động, bạn hãy thử dòng lệnh tương tự sau: Thông qua bài viết này, bạn đã học được cách sử dụng công cụ ffmpeg với mục đích chính là thêm một file âm thanh vào video của bạn. Hi vọng là bài viết này hữu ích đới với các bạn. Chúc vui! Nội dung bài viết 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. Để 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ì? 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,216 là 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ề videoVideo là hình ảnh của một sản phẩm được ghép lại với nhau, thậm chí 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:
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 videoCác định dạng đóng gói phổ biến Định dạng mã hóa videoMã 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. 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 ... 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.
Ở đâ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 FFmpegVề 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. Cài đặt FFmpegFFmpeg được chia thành 3 phiên bản: Static, Shared, Dev Cài đặt MacBook: brew install ffmpeg Cài đặt khác vui lòng tham khảo web chính thức của ffmpeg Sử dụng FFmpegNó 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. 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 ffmpegffmpeg [tham số toàn cục] [tham số tệp đầu vào] -i [tệp đầu vào] [thông số tệp đầu ra] [tệp đầu ra] Lấy thông tin video sử dụng ffmpeg//thông tin video ffmpeg -i input.mp4 Input #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), 1920x1080 [SAR 1:1 DAR 16:9], 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 ffmpegffmpeg -i input.mp4 -b:v 64k -bufsize 64k output.mp4 Chuyển đổi tỷ lệ khung hình với ffmpegffmpeg -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 độ videoffmpeg -i test1 "setpts=PTS/5" test4.mp4 // Tốc độ chuyển đổi video gấp 5 lần fmpeg -i input.mp4 -filter:a "atempo=2.0" 4s.mp4 // Phát lại tốc độ âm thanh gấp 2 lần ffmpeg -i input.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" -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à videoffmpeg -i input.mp4 -an output.mp4 //video ffmpeg -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.mp4 ffmpeg -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 ffmpegffmpeg -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 đầu ffmpeg -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 video ffmpeg -r 20 -i pic-%03d.jpeg gif.mp4 ffmpeg -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àu ffmpeg -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àu ffmpeg -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 yuv ffmpeg -i pic-012.jpeg -vf negate=0 negate1.jpg // Đảo ngược ffmpeg -i pic-012.jpeg -vf swapuv swapuv1.jpg // UV Hoán đổi ffmpeg -i pic-012.jpeg -vf crop=w=200:h=300:x=500:y=800 crop1.jpg // crop Thêm hình mờ với ffmpegffmpeg -i input.mp4 -i pic-012.jpeg -filter_complex "[1:v] scale=176:144 [logo];[0:v][logo]overlay=x=0:y=0" out.mp4 //Thêm hình mờ hình ảnh vào video ffmpeg -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ản ffmpeg -i input.mp4 -i pic-012.jpeg -filter_complex "[1:v] scale=176:144 [logo];[0:v][logo]overlay=x=0:y=0" out.mp4 ffmpeg -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 thanh ffmpeg -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ục ffmpeg -re -i ~/Downloads/xxx.mp4 -vcodec libx264 -acodec aac -strict -2 -f flv rtmp://localhost:1935/live // Ghi màn hình ffmpeg -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 để quay ffmpeg -f avfoundation -framerate 30 -i "1:0" \-f avfoundation -framerate 30 -video_size 640x480 Cách sử dụng FFmpeg trong NodeFluent-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 video ffmpeg.ffprobe(input, function (err, metadata) { console.dir(metadata); }); // Trích xuất âm thanh ffmpeg(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 🍻🍻!"); }) .save(resOut); // Trích xuất video ffmpeg(input) .noAudio() .on("error", function (err) { console.log("Đã xảy ra lỗi: " + err.message); }) .on("end", function () { console.log("Trích xuất video hoàn tất 🍻🍻!"); }) .save(resOut); Tóm lạiBài viết trên đây giới thiệu một số kỹ năng sử dụng ffmpeg để thao tác một số lệnh cơ bản. Và qua đó bạn cũng học được những khái niệm cơ bản về âm thanh và video, hình ảnh. ffmpeg thật sự quan trọng với xu thế hiện nay. Cho nên bạn cũng bắt đầu đi là vừa rồi đấy. Nếu giúp ích cho các bạn thì bạn vui long share giúp ra cộng đồng nhé. Bài viết có sử dụng một số tư liệu của internet. Nếu có khiếu nại về bản quyền vui lòng liên hệ . Trân trọng cảm ơn. |