FFMPEG là một framework hàng đầu về đa phương tiện (xử lý audio, video). Nó có thể decode (giải mã), encode (mã hóa), transcode (chuyển mã), mux (ghép kênh), demux (phân kênh, tách kênh), stream (ví dụ như livestream trên youtube, facebook,..), filter (lọc) và play (chạy, phát video) rất nhiều thứ mà con người hay máy móc tạo ra. FFMPEG hỗ trợ hầu hết các định dạng. Và nó khá là linh hoạt, có thể compile, run và chạy trên nhiều nền tảng như Linux, Mac OS X, Microsoft Windows, BSD, Solaris,…và ở trên nhiều môi trường, kiến trúc khác nhauFFMPEG là một framework hàng đầu về đa phương tiện (xử lý audio, video). Nó có thể decode (giải mã), encode (mã hóa), transcode (chuyển mã), mux (ghép kênh), demux (phân kênh, tách kênh), stream (ví dụ như livestream trên youtube, facebook,..), filter (lọc) và play (chạy, phát video) rất nhiều thứ mà con người hay máy móc tạo ra.
Các bạn có thể tải về FFMPEG 64bit tại cuối bài viết nhé.
Nó chứa các thư viện libavcodec, libavutil, libavformat, libavfilter, libavdevice, libswscale và libswresample. Chúng có thể được sử dụng bởi ứng dụng. Cũng giống như ffmpeg, ffserver, ffplay và ffprobe được sử dụng để transcoding, streaming và playing. Rõ ràng, FFMPEG là một phần mềm xử lý audio, video đơn giản, miễn phí và hiệu quả. Dù bạn là lập trình viên hay là một người sử dụng bình thường thì đều có thể sử dụng được FFMPEG cho những mục đích của mình.
FFMPEG cung cấp sẵn cho người dùng những tiện ích là: ffmpeg, ffserver, ffplay và ffprobe.
ffmpeg: Tiện ích dựa trên command line giúp người sử dụng chuyển đổi định dạng tệp tin (hỗ trợ rất nhiều định dạng khác nhau).
ffserver: Server cho việc streaming
ffplay: Một chương trình đơn giản giúp chạy, phát video dựa trên thư viện SDL và ffmpeg
ffprobe: Một chương trình đơn giản giúp phân tích việc stream các tệp tin đa phương tiện.
Ví dụ 1 CODE mẫu:
ffmpeg -y -i "1.mp4" -i "2.mp4" -i "1.png" -filter_complex "[0:v]setpts=PTS/1.12, scale=4*iw:-1, crop=iw/4:ih/4, boxblur=5:1, scale=854:480[v1],[v1][2:v]overlay=0:0[vmain];[1:v] setpts=PTS/1.12, scale=854:480,pad=855:480:4:4:color=white, boxblur=1:0[vo];[vmain][vo] overlay=0:0, hue=s=1.5[vout];[0:a] atempo=1.1, aecho=0.8:0.9:5|5:0.3|0.5, aecho=0.4:0.66:2:0.2,aecho=0.8:0.88:60:0.4, equalizer = f = 1000: width_type = q: width = 1: g = 2,equalizer = f = 100: width_type = q: width = 2: g = -5 ,volume=10dB [aout]" -map "[vout]" -map "[aout]" -vcodec libx264 -pix_fmt yuv420p -r 30 -g 60 -b:v 680k -profile:v main -level 3.1 -acodec libmp3lame -b:a 128k -ar 44100 -threads 0 -preset superfast "out.mp4"
ffmpeg -y -i "1.mp4" -i "2.mp4" -i "1.png"-filter_complex "[0:v]setpts=PTS/1.12, scale=4*iw:-1, crop=iw/4:ih/4, boxblur=5:1, scale=854:480[v1],[v1][2:v]overlay=0:0[vmain];[1:v] setpts=PTS/1.12, scale=854:480,pad=855:480:4:4:color=white, boxblur=1:0[vo];[vmain][vo] overlay=0:0, hue=s=1.5[vout];[0:a] atempo=1.1, aecho=0.8:0.9:5|5:0.3|0.5, aecho=0.4:0.66:2:0.2,aecho=0.8:0.88:60:0.4, equalizer = f = 1000: width_type = q: width = 1: g = 2,equalizer = f = 100: width_type = q: width = 2: g = -5 ,volume=10dB [aout]" -map "[vout]" -map "[aout]" -vcodec libx264 -pix_fmt yuv420p -r 30 -g 60 -b:v 680k -profile:v main -level 3.1 -acodec libmp3lame -b:a 128k -ar 44100 -threads 0 -preset superfast "out.mp4"
Các lệnh cơ bản khi dùng FFMPEG:
- -i : định nghĩa input file
VD: ffmpeg -i movie1.mpeg -ab 8.85k -acodec libamr_wb -ac 1 -ar 16000 -vcodec h263 -s qcif movie2.3gp
- -s : kích thước của video output
VD: ffmpeg -i movie1.avi -s 500×500 movie1.flv
- -acodec : định dạng audio
VD: ffmpeg -i movie1.mpeg -ab 8.85k -acodec libamr_wb -ac 1 -ar 16000 -vcodec h263 -s qcif movie2.3gp
- -ac : audio chanel kênh phát sóng của audio 1 mono 2 stereo
VD: ffmpeg -i movie1.mpeg -ab 8.85k -acodec libamr_wb -ac 1 -ar 16000 -vcodec h263 -s qcif movie2.3gp
- -ar : audio bitrate số bit âm thanh trên 1 giây sample rate
VD: ffmpeg -i movie1.mpeg -ab 8.85k -acodec libamr_wb -ac 1 -ar 16000 -vcodec h263 -s qcif movie2.3gp
- -vcodec : định dạng video
VD: ffmpeg -i movie1.mpeg -ab 8.85k -acodec libamr_wb -ac 1 -ar 16000 -vcodec h263 -s qcif movie2.3gp
- Các quy ước kích thước video
QCIF 176 × 144 SCIF 256 x 192 SIF(525) 352 x 240 CIF/SIF(625) 352 × 288 4SIF(525) 704 x 480 4CIF/4SIF(625) 704 × 576 16CIF 1408 × 1152 DCIF 528 × 384
VD: ffmpeg -i movie1.mpeg -ab 8.85k -acodec libamr_wb -ac 1 -ar 16000 -vcodec h263 -s qcif movie2.3gp
- -an : bỏ tiếng video
VD: ffmpeg -i -vcodec ffv1 -an output.mov
- -f : định dạng format
- -vn : vô hiệu hóa việc mã hóa lại video trong quá trình chuyển đổi, để xác định rằng mình không sử dụng video ở output
- -ab : cài đặt audio bitrate
- -vf ; cài đặt bộ lọc video (video filter)
- -hide_banner : bỏ qua thông tin liên quan đến phiên bản, các thư viện mà FFmpeg sử dụng (Thường có trong code lấy thông tin file)
VD: ffmpeg -i test.mp4 -hide_banner
- Chuyển một loạt hình ảnh có sẵn thành video
VD: ffmpeg -f image2 -i image%d.jpg video.mpg
Trong đó: image%d.jpg thay thế cho một danh sách các hình ảnh cần chuyển đổi: image1.jpg, image2.jpg …Ngược lại chuyển 1 video thành ảnh: ffmpeg -i video.mpg image%d.jpg- Chuyển đoạn video thành ảnh động .gif
VD: ffmpeg -i video_origine.avi gif_anime.gif
lưu ý là ảnh này chưa nén nên cũng tương đối nặng- Gắn âm thanh vào đoạn video không tiếng
VD: ffmpeg -i son.wav -i video_origine.avi video_finale.mpg
Điểm quan trọng ở câu lệnh này là độ khớp hình với tiếng theo ý định của người chuyển.- Code FFmpeg tách âm thanh từ video và lưu lại thành file mp3
VD: ffmpeg -i video.mp4 -vn -ar 44100 -ac 2 -ab 192k -f mp3 sound.mp3
Trong đó: – File video đầu vào có tên: video.mp4 – Tần số lấy mẫu sample rate: 44100 Hz. – Audio bitrate: 192kb/s – Đầu ra: định dạng .mp3 – Tên file đầu ra là: sound.mp3- Code FFmpeg tăng – giảm tốc độ video
VD: ffmpeg -i video.mp4 -vf setpts=0.5*PTS highspeed.mp4
Trong đó: – video.mp4 là video đầu vào – setpts=0.5*PTS giúp tăng tốc video lên gấp 2 lần – File video đầu ra là: highspeed.mp4 Nếu muốn giảm tốc độ đi 2 lần thì chỉ cần thay đổi thành: ffmpeg -i video.mp4 -vf "setpts=2*PTS" highspeed.mp4 Còn muốn tốc độ khác thì bạn tự suy luận ra nhé.- Code FFmpeg thêm ảnh vào audio và xuất bản thành video
VD: ffmpeg -loop 1 -i image.png -i sound.mp3 -c:v libx264 -c:a aac -strict experimental -b:a 192k -shortest output.mp4
Trong đó: – File ảnh đầu vào là image.png – File âm thanh đầu vào là sound.mp3 – File video đầu ra là: output.mp4- Code FFmpeg cắt lấy một phần nhỏ của video
VD: ffmpeg -i video.mp4 -ss 00:00:50.0 -codec copy -t 20 output.mp4
Trong đó: – File đầu vào là video.mp4 – Option ss để chỉ ra thời điểm bắt đầu của video đầu ra. Tiếp theo sau là thời gian theo định dạng HH:MM:SS.ms – Option t để chỉ ra thời lượng của video đầu ra. Sau đó là thời gian tính theo giây.- Code FFmpeg chia video ra thành nhiều phần
VD: ffmpeg -i video.mp4 -t 00:00:50 -c copy small-1.mp4 -ss 00:00:50 -codec copy small-2.mp4
Trong đó: – File video đầu vào là video.mp4 – File sẽ được chia làm 2 phần: phần 1 có tên small-1.mp4 sẽ có thời lượng 50 giây tính từ đầu video, phần 2 sẽ có tên small-2.mp4 sẽ bắt đầu từ giây thứ 50 và kéo dài đến cuối video- Code FFmpeg nối video từ những video nhỏ
VD: ffmpeg -f concat -i file-list.txt -c copy output.mp4
Trong đó: – File đầu vào là file file-list.txt – chứa tên của các video cần ghép, ở cùng thư mục đang xét. Ví dụ nội dung file sẽ như sau: file 'small-1.mp4' file 'small-2.mp4' – File đầu ra là output.mp4- Code FFmpeg tắt âm thanh của video
VD: ffmpeg -i video.mp4 -an mute-video.mp4
Trong đó: – File đầu vào là video.mp4 – Option an là để tắt âm thanh video – File đầu ra là mute-video.mp4- Code FFmpeg hiển thị thông tin của file
VD: ffmpeg -i test.mp4
- Lấy thông tin video chi tiết
VD: ffprobe -v error -show_format -show_streams input.mp4
- -b:v Thay đổi bitrate của video
VD: ffmpeg -i abc.avi -b:v 64k def.avi
- -r Thay đổi frame-rate của video
VD: ffmpeg -i abc.avi -r 24 def.avi
- -y viết đè lên file đầu ra nếu tên bị trùng
- -n thoát lệnh cmd nếu đầu ra bị trùng tên
- -stream_loop number (input)Set number of times input stream shall be looped. Loop 0 means no loop, loop -1 means infinite loop.