Tổng hợp 20 lệnh FFmpeg cơ bản cho người mới bắt đầu
Trong bài này chúng ta sẽ học 20 lệnh FFmpeg cơ bản dành cho người mới bắt đầu. FFmpeg là công cụ xử lý video rất mạnh, nó giúp lập trình viên có thể làm ra những video theo ý của mình.
Nếu bạn là một Youtuber thì chắc hẳn không còn xa lạ gì với công cụ FFmpeg nữa phải không nào? Nhất là những bạn chơi reup, cần xử lý video để lách bản quyền một cách nhanh chóng. Đương nhiên, bạn có thể sử dụng những phần mềm xử lý video chuyên dụng như Camtasia, Adobe Premier .. nhưng tốc độ xử lý sẽ rất chậm.
Và sau đây mình sẽ tổng hợp những lệnh FFmpeg cơ bản nhất, giúp bạn có thể tiếp cận công cụ này một cách nhanh chóng. Bản thân mình cũng đang tìm hiểu công cụ này nên nếu có gì sai sót thì rất mong các bạn thông cảm.
I. Cú pháp của một lệnh FFmpeg
Trước khi bắt đầu thì bạn phải biết rằng cú pháp chuẩn của một lệnh FFmpeg sẽ có dạng như sau:
Bài viết này được đăng tại [free tuts .net]
ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ...
Trong đó:
global_options
là những cấu hình toàn cụcinput_file_options
là cấu hình cho file nguồnoutput_file_options
là cấu hình cho file sẽ export
Bây giờ ta sẽ học cách sử dụng vài lệnh cơ bản nhé.
II. Tổng hợp 20 lệnh FFmpeg cơ bản nhất
Lưu ý: Tất cả những lệnh dưới đây đều tuân theo cú pháp mà mình đã nói ở trên.
1. Lấy thông tin của hình ảnh / video
Để hiển thị thông tin của một file hình hoặc video thì ta sử dụng lệnh sau.
ffmpeg -i video.mp4
Trong đó file video.mp4 chính là file cần xem.
Kết quả sẽ có dạng như sau:
ffmpeg version n4.1.3 Copyright (c) 2000-2019 the FFmpeg developers built with gcc 8.2.1 (GCC) 20181127 configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-nvdec --enable-nvenc --enable-omx --enable-shared --enable-version3 libavutil 56. 22.100 / 56. 22.100 libavcodec 58. 35.100 / 58. 35.100 libavformat 58. 20.100 / 58. 20.100 libavdevice 58. 5.100 / 58. 5.100 libavfilter 7. 40.101 / 7. 40.101 libswscale 5. 3.100 / 5. 3.100 libswresample 3. 3.100 / 3. 3.100 libpostproc 55. 3.100 / 55. 3.100 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video.mp4': Metadata: major_brand : isom minor_version : 512 ....
Như bạn thấy, kết quả trả về của nó là rất nhiều thông tin, nên nếu bạn muốn chỉ hiển thị những thông tin quan trọng như phiên bản, cấu hình, copyright... thì hãy thêm tùy chọn -hide_banner nhé.
ffmpeg -i video.mp4 -hide_banner
2. Chuyển đổi file sang một định dạng khác
FFmpeg cho phép bạn chuyển đổi định dạng của file media một cách đơn giản, nó cho phép bạn chuyển đổi một file thành nhiều định dạng khác nhau, đương nhiên định dạng đó phải liên quan đến kiểu dữ liệu media.
Ví dụ: Để đổi file từ mp4 sang avi thì ta sẽ viết lệnh như sau.
ffmpeg -i video.mp4 video.avi
Hoặc chuyển từ file flv sang mpeg thì ta chạy lệnh sau.
ffmpeg -i video.flv video.mpeg
Nếu bạn muốn giữ chất lượng của file sau khi chuyển đổi thì hãy thêm tùy chọn -qscale 0
nhé.
ffmpeg -i input.webm -qscale 0 output.mp4
Nếu muốn hiển thị những định dạng mà FFmpeg hỗ trợ thì hãy chạy lệnh sau.
ffmpeg -formats
3. Chuyển đổi video file thành audio file
Để chuyển đổi một file video sang file audio thì ta sử dụng tham số -vn
ở file đầu ra nhé.
ffmpeg -i input.mp4 -vn output.mp3
Ngoài ra, bạn cũng có thể sử dụng thêm các tùy chọn khác để chuyển mã âm thanh cho file đầu ra như sau.
ffmpeg -i input.mp4 -vn -ar 44100 -ac 2 -ab 320 -f mp3 output.mp3
Trong đó:
- -vn là khai báo tắt tính năng video
- -ar là đặt tần số âm thanh, giá trị thường dùng là 22050, 44100, 48000 Hz.
- -ac là đặt số kênh âm thanh
- -ab cho biết tốc độ bit của âm thanh.
- -f là định dạng của file output
Khi chạy lệnh trên sẽ hiển thị một cảnh báo như sau:
The above command will display a warning message like below
Điều này là do chúng ta đã cung cấp 320 bit / giây là tốc độ bit rất thấp. Điều này sẽ tạo ra một tệp đầu ra nhỏ hơn. Để có đầu ra chất lượng tốt nhất, hãy sử dụng giá trị tốc độ bit là 320k thay vì chỉ 320.
4. Thay đổi âm lượng của file
FFmpeg cho phép chúng ta thay đổi âm lượng của file bằng cách sử dụng tùy chọn "volume filter".
Ví dụ, lệnh dưới đây sẽ giảm âm lượng của video xuống còn 1/2.
ffmpeg -i input.mp3 -af 'volume=0.5' output.mp3
Hoặc tăng âm lượng của video lên 0.5 lần.
ffmpeg -i input.mp3 -af 'volume=1.5' output.mp3
5. Thay đổi độ phân giải của video
Độ phân giải càng cao sẽ giúp video càng rõ hơn. Có một số trường hợp bạn muốn giảm độ phân giải lại để tránh bản quyền khi đăng lên youtube thì có thể sử dụng tùy chọn -filter:v
.
ffmpeg -i input.mp4 -filter:v scale=1280:720 -c:a copy output.mp4
Hoặc lệnh sau:
ffmpeg -i input.mp4 -s 1280x720 -c:a copy output.mp4
Lệnh trên sẽ chuyển độ phân giải của video thành 1280x720.
6. Nén giảm dung lượng video
Bạn nên giảm dung lượng của file video để tiết kiệm dung lượng của ổ cứng, bằng cách chạy lệnh sau:
ffmpeg -i input.mp4 -vf scale=1280:-1 -c:v libx264 -preset veryslow -crf 24 output.mp4
7. Giảm dung lượng file audio
Cũng giống như việc nén video, bạn cũng có thê rnén file audio bằng cách sử dụng tùy chọn -ab
.
ffmpeg -i input.mp3 -ab 128 output.mp3
Dưới đây là danh sách bitrates thường dùng nhất:
- 96kbps
- 112kbps
- 128kbps
- 160kbps
- 192kbps
- 256kbps
- 320kbps
8. Xóa âm thanh ra khỏi file video
Nếu bạn muốn xóa âm thanh ra khỏi video thì chạy lệnh dưới đây.
$ ffmpeg -i input.mp4 -an output.mp4
Tham số -an cho biết là file xuất ra sẽ không có âm ghi âm. Lệnh này cũng sẽ hoàn tác tất cả những lệnh liên quan đến âm thanh trước đó ở file xuất.
9. Xóa luồng video ra khỏi video
Tức là bạn sẽ xóa hình ảnh video, chỉ giữ lại âm thanh, giống như việc chuyển file video thành file mp3.
ffmpeg -i input.mp4 -vn output.mp3
Thuộc tính -vn
các bạn đã học ở trên.
Bạn cũng có thể đổi tốc độ bitrate bằng cách sử dụng kết hợp với cờ -ab
.
ffmpeg -i input.mp4 -vn -ab 320 output.mp3
10. Trích xuất hình ảnh từ video
Một tính năng hữu ích khác của FFmpeg là chúng ta có thể dễ dàng trích xuất hình ảnh từ một tập tin video. Điều này có thể rất hữu ích, nếu bạn muốn tạo một album ảnh từ một tệp video.
Để trích xuất hình ảnh từ tệp video, hãy sử dụng lệnh sau:
ffmpeg -i input.mp4 -r 1 -f image2 image-%2d.png
Trong đó:
-r
Đặt tốc độ khung hình, tức là khung hình sẽ được chụp sau mỗi giây, mặc định là 25.-f
cho biết định dạng đầu ra, tức là định dạng của hình ảnh trong trường hợp này.image-% 2d.png
là tên của file đầu ra. Trong trường hợp này, các tên phải bắt đầu như image-01.png, image-02.png, image-03.png, v.v. Nếu bạn sử dụng% 3d, thì tên của hình ảnh sẽ bắt đầu như image-001.png, image-002.png, v.v.
11. Cắt video
FFMpeg cho phép cắt một file media, giống như kiểu bạn cần cắt một phân đoạn nào đó trong phim.
Cú pháp để cắt một đoạn phim được đưa ra như sau:
ffmpeg -i input.mp4 -filter:v "crop=w:h:x:y" output.mp4
Trong đó:
- input.mp4 - file video nguồn.
- -filter: v - khai báo bộ lọc video.
- crop - khai báo bộ lọc cắt xén.
- w - Chiều rộng của hình chữ nhật mà chúng ta muốn cắt từ video nguồn.
- h - Chiều cao của hình chữ nhật.
- x - Tọa độ x của hình chữ nhật mà chúng ta muốn cắt từ video nguồn.
- y - Tọa độ y của hình chữ nhật
Giả sử bạn muốn một video có chiều rộng 640 pixel và chiều cao là 480 pixel, từ vị trí (200,150), lệnh sẽ là:
$ ffmpeg -i input.mp4 -filter:v "crop=640:480:200:150" output.mp4
12. Chuyển đổi một phần của video thành định dạng khác
Đôi khi, bạn có thể chỉ muốn chuyển đổi một phần (thời lượng) cụ thể của file video sang định dạng khác.
Ví dụ: lệnh sau sẽ chuyển đổi 10 giây đầu tiên của tệp video.mp4 nhất định sang định dạng video.avi.
ffmpeg -i input.mp4 -t 10 output.avi
Ở đây, chúng ta chỉ định thời gian tính bằng giây. Ngoài ra, có thể chỉ định thời gian ở định dạng hh.mm.ss
.
13. Đặt tỉ lệ khung hình cho video
Bạn có thể đặt tỷ lệ khung hình cho video bằng cách sử dụng cờ -aspect
như bên dưới.
ffmpeg -i input.mp4 -aspect 16:9 output.mp4
Các tỷ lệ khung hình thường được sử dụng là:
- 16:9
- 4:3
- 16:10
- 5:4
- 2:21:1
- 2:35:1
- 2:39:1
14. Thêm hình ảnh poster vào file audio
Bạn có thể thêm hình ảnh poster vào file audio để hình ảnh sẽ được hiển thị trong khi phát tệp âm thanh. Điều này có thể hữu ích để lưu trữ các file âm thanh trong các trang web như Youtube.
ffmpeg -loop 1 -i inputimage.jpg -i inputaudio.mp3 -c:v libx264 -c:a aac -strict experimental -b:a 192k -shortest output.mp4
15. Chia file video / audio thành nhiều file nhỏ
Một số trang web sẽ chỉ cho phép bạn tải lên một kích thước cụ thể của video.
Ví dụ: Whatsapp sẽ chỉ cho phép đặt video dài 15 giây làm thông báo trạng thái cho người dùng ở Ấn Độ. Trong những trường hợp như vậy, bạn có thể chia các tệp video lớn thành nhiều phần nhỏ hơn như bên dưới
ffmpeg -i input.mp4 -t 00:00:30 -c copy part1.mp4 -ss 00:00:30 -codec copy part2.mp4
Trong đó, -t 00:00:30
cho biết một phần được tạo từ đầu video đến giây thứ 30 của video. -ss 00:00:30
hiển thị dấu thời gian bắt đầu cho phần tiếp theo của video. Có nghĩa là phần thứ 2 sẽ bắt đầu từ giây thứ 30 và kéo dài đến hết file video gốc.
16. Hợp nhất nhiều file video /audio thành một file
FFmpeg cũng sẽ nối nhiều file video và tạo thành một file video duy nhất.
Tạo file join.txt chứa đường dẫn của các file mà bạn muốn hợp nhất. Tất cả các file phải có cùng định dạng (cùng một codec). Tên đường dẫn của tất cả các file phải được đề cập từng cái một như dưới đây.
file /home/sk/myvideos/part1.mp4 file /home/sk/myvideos/part2.mp4 file /home/sk/myvideos/part3.mp4 file /home/sk/myvideos/part4.mp4
Bây giờ sẽ hợp nhất các file đó bằng lệnh sau:
$ ffmpeg -f concat -i join.txt -c copy output.mp4
Nếu bạn nhận được một lỗi như sau:
[concat @ 0x555fed174cc0] Unsafe file name '/path/to/mp4' join.txt: Operation not permitted
Thì hãy thêm cờ -safe 0
.
ffmpeg -f concat -safe 0 -i join.txt -c copy output.mp4
Lệnh trên sẽ nối các file part1.mp4, part2.mp4, part3.mp4 và part4.mp4 thành một file duy nhất có tên là "output.mp4".
Ngoài ra, bạn có thể sử dụng lệnh one-liner sau để nối tất cả các file trong một thư mục. Hãy đi tới thư mục chứa các file cần nói và chạy lệnh sau để nối các file có tên là audio1.mp3
, audio2.mp3
và audio3.mp3
vào output.mp3
.
ffmpeg -i "concat:audio1.mp3|audio2.mp3|audio3.mp3" -c copy output.mp3
17. Thêm subtitles vào video
Chúng ta cũng có thể thêm phụ đề vào file video bằng FFmpeg, bằng cách chạy lệnh sau:
fmpeg -i input.mp4 -i subtitle.srt -map 0 -map 1 -c copy -c:v libx264 -crf 23 -preset veryfast output.mp4
18. Xem trước hoặc kiểm tra các file video hoặc âm thanh
Bạn có thể muốn xem trước để xác minh hoặc kiểm tra xem file đầu ra đã được chuyển mã đúng cách hay chưa. Để làm như vậy, bạn có thể chạy nó từ Terminal của mình bằng lệnh:
ffplay video.mp4
Đương nhiên bạn phải khai báo file ffplay vào biến môi trường của Windows nhé.
19. Tăng hoặc giảm tốc độ phát video
FFmpeg cho phép bạn điều chỉnh tốc độ phát video.
Để tăng tốc độ phát video, hãy chạy lệnh sau:
ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" output.mp4
Lệnh trên sẽ tăng gấp đôi tốc độ của video.
Để làm chậm video của bạn, bạn cần sử dụng hệ số lớn hơn 1. Để giảm tốc độ phát thì hãy chạy lệnh sau:
ffmpeg -i input.mp4 -vf "setpts=4.0*PTS" output.mp4
20. Tăng hoặc giảm tốc độ của nhạc
Để tăng hoặc giảm tốc độ phát lại âm thanh, hãy sử dụng bộ lọc âm thanh "atempo".
Lệnh sau sẽ tăng gấp đôi tốc độ âm thanh:
ffmpeg -i input.mp4 -filter:a "atempo=2.0" -vn output.mp4
Trên là tổng hợp 20 lệnh FFmpeg cơ bản nhất giúp bạn xử lý và làm được những video đơn giản. Việc kết hợp nhiều lệnh cơ bản này sẽ giúp bạn tạo ra được những video phức tạp.