FFmpeg và 20 câu lệnh cơ bản xử lý âm thanh, hình ảnh và video
This post hasn't been updated for 5 years
FFmpeg là gì?
FFmpeg là một dự án phần mềm miễn phí bao gồm một bộ phần mềm khổng lồ gồm các thư viện và chương trình để xử lý video, audio, multimedia files và streams. Cốt lõi của nó là chính chương trình FFmpeg, được thiết kế để xử lý các video và audio dựa trên command line và được sử dụng rộng rãi để chuyển đổi định dạng, chỉnh sửa cơ bản (cắt và ghép), chia tỷ lệ video, hiệu ứng hậu kỳ video. FFmpeg được xuất bản theo Giấy phép GNU Lesser General Public License 2.1+ hay GNU General Public License 2+ (dựa theo option nào được enabled).
Tên của dự án được lấy cảm hứng từ chuẩn video MPEG, "FF" viết tắt của "fast forward ". Logo sử dụng mô hình ngoằn ngoèo cho thấy cách các MPEG video codecs xử lý entropy encoding.
FFmpeg là được ứng dụng rất nhiều trong các phần mềm xử lý audio và video, thư viện của nó là thành phần core của ứng dụng media player như VLC , cũng là thành phần core trong quá trình xử lý video của YouTube và iTunes khi lưu trữ file.
Cài đặt FFmpeg
Cài đặt trên Ubuntu
sudo apt-get install ffmpeg
Cài đặt trên Mac sử dụng Homebrew
brew install ffmpeg
Cài đặt trên Windows
Trên windows, tải gói phần mềm ffmpeg tại đây: FFmpeg Downloads.
Sau khi tải, giải nén ra bạn sẽ có file ffmpeg.exe
.
Ở windows bạn có thể chạy ffmpeg thông qua command line sử dụng bash hoặc powershell, sử dụng các tham số giống với trên Ubuntu và Mac.
VD: Convert video file mp4 thành mp3
.\ffmpeg.exe -i video.mp4 audio.mp3
Input là file video.mp4, còn output là file audio.mp3
20 câu lệnh FFmpeg cơ bản xử lý âm thanh, hình ảnh và video
Cú pháp cơ bản của một câu lệnh FFmepg:
ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ...
Sau đây sẽ là một số câu lệnh FFmpeg quan trọng và hữu ích.
1. Xem thông tin file
ffmpeg -i video.mp4
Output
ffmpeg version N-93077-g075fd5ba45 Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 8.2.1 (GCC) 20181201
configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt
libavutil 56. 26.100 / 56. 26.100
libavcodec 58. 46.100 / 58. 46.100
libavformat 58. 26.100 / 58. 26.100
libavdevice 58. 6.101 / 58. 6.101
libavfilter 7. 48.100 / 7. 48.100
libswscale 5. 4.100 / 5. 4.100
libswresample 3. 4.100 / 3. 4.100
libpostproc 55. 4.100 / 55. 4.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'output.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.26.100
Duration: 00:00:29.96, start: 0.000000, bitrate: 545 kb/s
Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 590x394 [SAR 1:1 DAR 295:197], 218 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: mp3 (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 320 kb/s (default)
Metadata:
handler_name : SoundHandler
At least one output file must be specified
Nếu không muốn xem FFmpeg banner và thông tin khác, bạn thêm tham số -hide_banner
ffmpeg -i video.mp4 -hide_banner
Output
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'output.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.26.100
Duration: 00:00:29.96, start: 0.000000, bitrate: 545 kb/s
Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 590x394 [SAR 1:1 DAR 295:197], 218 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: mp3 (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 320 kb/s (default)
Metadata:
handler_name : SoundHandler
At least one output file must be specified
2. Convert sang định dạng khác
FFmpeg là trình convert audio và video mạnh mẽ, do đó, nó có thể convert các multimedia files thành các định dạng khác nhau .
Ví dụ, convert file mp4
thành avi
:
fmpeg -i video.mp4 video.avi
Tương tự, bạn có thể convert thành các định dạng khác.
Convert flv sang mpeg:
ffmpeg -i video.flv video.mpeg
Convert flv
sang mpeg
:
ffmpeg -i video.flv video.mpeg
Nếu bạn muốn giữ chất lượng của video, hãy sử dụng tham số -qscale 0
.
ffmpeg -i input.webm -qscale 0 output.mp4
Convert nhạc mp3
sang wma
:
ffmpeg -i audio.mp3 audio.wma
Convert ảnh png
sang jpg
:
ffmpeg -i image.png audio.jpg
....
Để kiểm tra danh sách các định dạng được hỗ trợ bởi FFmpeg, chạy:
ffmpeg -formats
FFmpeg hỗ trợ rất nhiều định dạng, vì vậy mình sẽ không show ouput ở đây.
3. Convert video sang audio
Để convert file video sang âm thanh, chỉ cần chỉ định định dạng output là .mp3 hoặc .ogg hoặc bất kỳ định dạng âm thanh nào khác.
Command dưới đây sẽ convert video mp4
sang file âm thanh mp3
ffmpeg -i video.mp4 -vn -ab 320 audio.mp3
Ngoài ra có một số tham số khác cũng thường được dùng như sau:
ffmpeg -i video.mp4 -vn -ar 44100 -ac 2 -ab 320 -f mp3 audio.mp3
- -vn - Disable chức nắc video recording trong output file.
- -ar - Tần số âm thanh của output. Các giá trị phổ biến được sử dụng là 22050, 44100, 48000 Hz.
- -ac - Audio channels. *- ab - Audio bitrate. *-f - Định dạng output. Trong trường hợp của chúng ta output là mp3.
4. Thay đổi độ phân giải video (kích thước video)
Nếu bạn muốn đặt độ phân giải cụ thể cho video, bạn có thể sử dụng command sau:
ffmpeg -i input.mp4 -filter:v scale=1280:720 -c:a copy output.mp4
Hay
ffmpeg -i input.mp4 -s 1280x720 -c:a copy output.mp4
Câu lệnh phía trên sẽ output ra video với đội phân giải 1280 × 720.
Tương tự, để convert video thành kích thước 640 × 480, chạy:
ffmpeg -i input.mp4 -filter:v scale=640:480 -c:a copy output.mp4
Hay
ffmpeg -i input.mp4 -s 640x480 -c:a copy output.mp4
5. Giảm dung lượng/chất lượng video
Bạn muốn giảm dung lượng video để lưu trữ cho đỡ tốn bộ nhớ, command dưới đây sẽ giảm dung lượng của file output
ffmpeg -i input.mp4 -vf scale=1280:-1 -c:v libx264 -preset veryslow -crf 24 output.mp4
Lưu ý rằng chất lượng video sẽ giảm theo, tham số -crf
càng cao thì chất lượng video càng thấp.
Bạn cũng có thể giảm một chút chất lượng của âm thanh video bằng cách thêm tham số
-ac 2 -c:a aac -strict -2 -b:a 128k
6. Giảm dung lượng/chất lượng audio
Bạn cũng có thể giảm dung lượng file nhạc bằng cách giảm audio bitrate xuống với tham số -ab
.
Ví dụ bạn đang có file nhạc 320k, bạn giảm xuống 128k:
ffmpeg -i input.mp3 -ab 128 output.mp3
Audio bitrate thông dụng:
- 96kbps
- 112kbps
- 128kbps
- 160kbps
- 192kbps
- 256kbps
- 320kbps
7. Xóa audio stream (xóa nhạc)
Bạn không muốn giữ lại nhạc của video, thêm tham số -an
ffmpeg -i input.mp4 -an output.mp4
8. Xóa video stream
Tương tự giống xóa audio stream, ta có -vn
dùng để xóa video stream
ffmpeg -i input.mp4 -vn output.mp3
9. Xuất ảnh từ video
Một tính năng khác rất hữu ích của FFmpeg là xuất ảnh từ video. Để xuất ảnh, chúng ta dùng command sau:
ffmpeg -i input.mp4 -r 1 -f image2 img-%3d.png
- -r – Frame rate. Số khung hình trên giây . Mặc định là 25.
- -f – Output format
- image-%2d.png – Tên file output. Trường hợp này các file output sẽ có tên: img-001.png, img-002.png, img-003.png,...
10. Thay đổi tỷ lệ khung hình
Thay đổi tỷ lệ khung hình sang 16:9
ffmpeg -i input.mp4 -aspect 16:9 output.mp4
Tỷ lệ khung hình thường dùng
- 16:9
- 4:3
- 16:10
- 5:4
- 2:21:1
- 2:35:1
- 2:39:1
11. Convert một phần cụ thể của video
Đôi khi, bạn có thể muốn convert chỉ một phần cụ thể của video sang định dạng khác. Ví dụ, lệnh sau sẽ convert 50 giây đầu tiên của file video.mp4 định dạng video.avi.
ffmpeg -i input.mp4 -t 50 output.avi
Tham số -t 50
có nghĩa là lấy 50 giây, bạn cũng có thể truyền vào thời gian với format hh.mm.ss
12. Tạo video với ảnh và file audio
Trường hợp bạn muốn tạo video với 1 ảnh lặp đi lặp lại, và audio nền, command sẽ đơn giản như sau:
ffmpeg -loop 1 -i inputimage.jpg -i inputaudio.mp3 -c:v libx264 -c:a aac -strict experimental -b:a 192k -shortest output.mp4
13. Trim video/audio
Bạn muốn trim video với thời gian bắt đầu là phút thứ 1, thời lượng là 60 giây
ffmpeg -i input.mp4 -ss 00:01:00 -codec copy -t 60 output.mp4
- –s – Thời gian bắt đầu
- -t – Thời lượng
Tương tự với file audio
ffmpeg -i audio.mp3 -ss 00:01:54 -to 00:06:53 -c copy output.mp3
14. Chia video thành nhiều phần
Một số website chỉ cho phép upload video với thời lượng nhất định, bạn có thể chia nó thành nhiều phần như sau:
ffmpeg -i input.mp4 -t 00:00:30 -c copy part1.mp4 -ss 00:00:30 -codec copy part2.mp4
Ở đây, -t 00:00:30
nghĩa là part 1 của video sẽ kéo dài 30 giây. -ss 00:00:30
là thời gian bwats đầu cho phần tiếp theo. Điều đó có nghĩa là part 2 sẽ bắt đầu từ giây thứ 30 và sẽ tiếp tục cho đến hết video.
15. Nối nhiều video thành một
FFmpeg cũng có thể nối nhiều video thành một.
Đầu tiên, chúng ta sẽ tạo file video.txt
với nội dung:
file 'part1.mp4'
file 'part2.mp4'
Trong đó part1.mp4
và part2.mp4
là đường dẫn tới file muốn nối. Sau đó nối video bằng command:
ffmpeg -f concat -i video.txt -c copy output.mp4
Tương tự ta cũng có thể làm với audio.
16. Thêm subtitle cho video
Chúng ta có file sub với nội dung như sau, tên file subtitle.srt
:
1
00:00:00,498 --> 00:00:02,827
- Here's what I love most
about food and diet.
2
00:00:02,827 --> 00:00:06,383
We all eat several times a day,
and we're totally in charge
3
00:00:06,383 --> 00:00:09,427
of what goes on our plate
and what stays off.
Sử dụng command sau để thêm sub cho video:
fmpeg -vf subtitles=subtitle.srt output.mp4
17. Xem, test file video và audio
Xem video
ffplay video.mp4
https://images.viblo.asia/fda0d503-e157-4df4-b43a-2598d8daea10.PNG
Xem file audio
ffplay audio.mp3
https://images.viblo.asia/b677f340-504b-4e80-bb28-b58c263460e7.PNG
18. Tăng giảm tốc độ phát video
FFmpeg cho phép bạn thay đổi tốc độ phát video, ví dụ để tăng tốc độ phát:
ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" output.mp4
Giảm tốc độ phát
ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" output.mp4
19. Live stream video
Bạn có thể live stream một video, ví dụ mình live stream trên youtube
ffmpeg -re -i output.mp4 -f flv rtmp://a.rtmp.youtube.com/live2/{stream_key}
- -f - Định dạng output. Dùng để live stream trên youtube hay để flv
- rtmp://a.rtmp.youtube.com/live2/{stream_key} - Stream url
20. Xem thông tin về phiên bản FFmpeg, hướng dẫn về các tham số
ffmpeg.exe -h
All Rights Reserved