FFmpeg là một công cụ có rất nhiều tiện ích cho việc xử lý video. Đây là một công cụ vừa gọn nhẹ vừa hiệu quả nên được rất nhiều chuyên gia trong "giới" encode video sử dụng và cộng đồng sử dụng ffmpeg ở Việt Nam lại càng phát triển.
Thường câu lệnh
FFMPEG có dạng
ffmpeg -i <đường dẫn tệp tin> <đường
dẫn output>
-i : input file
Chuyển đổi MPEG sang 3GP:
ffmpeg -i movie1.mpeg -ab 8.85k -acodec
libamr_wb -ac 1 -ar 16000 -vcodec h263 -s qcif movie2.3gp
-acodec : định dạng audio
libarm_wb : tên lib arm
-ac : audio chanel kênh phát sóng của
audio 1 mono 2 stereo
-ar : audio bitrate số bit âm thanh
trên 1 giây
-vcodec : định dạng video
h263,h264 : tên lib định dạng của
video
qcif:
Format
Video Resolution
SQCIF 128 ×
96
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
Chuyển đổi file video sang
audio :
ffmpeg -i input.mp4 -vn -ab 320 output.mp3
-vn : video none
-ab : audio bitrate
ffmpeg -i input.mp4 -vn -ar 44100 -ac 2 -ab 320 -f mp3 output.mp3
-vn – tắt video
record ở file đầu ra, chỉ còn lại âm thanh
-ar - Thiết lập tần số âm thanh của tập tin đầu ra. Các giá
trị comman được sử dụng là 22050, 44100, 48000 Hz.
-ac - Đặt số kênh âm thanh.
-ab - Chỉ ra bitrate âm thanh.
-f - định dạng tập tin đầu ra.
Chuyển đổi độ phân giải của
video
ffmpeg -i input.mp4 -filter:v scale=1280:720 -c:a copy output.mp4
ffmpeg -i input.mp4 -s 640x480 -c:a copy output.mp4
-s
: chuyển đổi kích thước video
Tắt âm thanh của video
ffmpeg -i video.mp4 -an mutevideo.mp4
-an : tắt âm thanh video
Copy clip
ffmpeg -i input.mp4 -ss 13:38 -t 02:00 -c copy output.mp4
-ss : skip đến phút thứ 13 giây 38
-t : duration, process input trong 2 phút
-c copy : codec. copy
Nén file video
ffmpeg -i input.mp4 -vf scale=1280:-1 -c:v libx264 -preset veryslow -crf 24 output.mp4
Xuất hình từ file video
ffmpeg -i input.mp4 -r 1 -f image2 image-%2d.png
-r – frame rate, mặc định là 25 fps.
-f - Cho biết định dạng đầu ra
image-%2d.png – xuất ra tên
Thêm subtitle vào file video
fmpeg -i input.mp4 -i subtitle.srt -map 0 -map 1
-c copy -c:v libx264 -crf 23 -preset veryfast output.mp4
1080 qua 720
ffmpeg -i input.mp4 -vf scale=-1:720 output.mp4
-vf : video, filter
Scale : scale filter, thay đổi kích thước
Thêm logo lên video
ffmpeg -i in.mp4 -framerate 25 -loop 1 -i logo.png -filter_complex "[1:v] fade=out:st=30:d=1:alpha=1 [ov]; [0:v][ov] overlay=10:10 [v]" -map "[v]" -map 0:a -c:v libx264 -c:a copy -shortest out.mp4
filter_complex
: hiệu ứng của video và audio, [1:v] lấy input logo.png (1 index của logo trong
câu lệnh, v: video vd [0:a] thì trong đó 0 là indext và a là audio tức audio của
video); fade=out:st=30:d=1:alpha=1 di chuyển trong 30px 1s có alpha di chuyển bằng
1, overlay vị trí hiển thị của logo.
Audio Encode
AAC
Bộ mã hóa mã hóa âm thanh tiên tiến (AAC).
Bộ mã hóa này là bộ mã hóa AAC mặc định, được thực hiện
thành FFmpeg. Chất lượng của nó ngang bằng hay tốt hơn libfdk_aac ở tốc độ bit
mặc định là 128kbps. Bộ mã hoá này cũng thực hiện thêm nhiều lựa chọn, hồ sơ và
bộ tự điển hơn các bộ mã hóa khác (chỉ với hồ sơ AAC-HE đang được triển khai)
nên bộ mã hóa này đã trở thành mặc định và là sự lựa chọn được đề nghị.
ffmpeg -i input.mp4 -c:a aac -b:a 128k -strict -2 output.mp3
libmp3lame
ffmpeg -i input.wav -codec:a libmp3lame -qscale:a 2 output.mp3
-qscale: a 2, có nghĩa là sử dụng tùy chọn -V2 của LAME, cho
một luồng âm thanh MP3 MP3 với bitrate stereo trung bình là 170-210 kBit / s.
LAME
Bitrate Overview |
|||
lame option |
Average
kbit/s |
Bitrate
range kbit/s |
ffmpeg option |
-b 320 |
320 |
320 CBR
(non VBR) example |
-b:a 320k (NB
this is 32KB/s, or its max) |
-V 0 |
245 |
220-260 |
-q:a 0 (NB
this is VBR from 22 to 26 KB/s) |
-V 1 |
225 |
190-250 |
-q:a 1 |
-V 2 |
190 |
170-210 |
-q:a 2 |
-V 3 |
175 |
150-195 |
-q:a 3 |
-V 4 |
165 |
140-185 |
-q:a 4 |
-V 5 |
130 |
120-150 |
-q:a 5 |
-V 6 |
115 |
100-130 |
-q:a 6 |
-V 7 |
100 |
80-120 |
-q:a 7 |
-V 8 |
85 |
70-105 |
-q:a 8 |
-V 9 |
65 |
45-85 |
-q:a 9 |
Video Encode
Libx264
ffmpeg -i foo.mpg -c:v libx264 -x264opts keyint=123:min-keyint=20 -an out.mkv
-x264opts : các tùy chọn (options) của bộ mã hóa H264
keyint :
min-keyint : kích thước GOP (group of pictures) tối thiểu
ffmpeg -i INPUT -c:v libx264 -x264-params level=30:bframes=0:weightp=0:\
cabac=0:ref=1:vbv-maxrate=768:vbv-bufsize=2000:analyse=all:me=umh:\
no-fast-pskip=1:subq=6:8x8dct=0:trellis=0 OUTPUT
libx265
ffmpeg -i input -c:v libx265 -x265-params crf=26:psy-rd=1 output.mp4
-x265-params : truyền vào các tham
số của bộ encode H265
GOP Size (Min/Max) - min-keyint,
keyint : Số lượng
Frames tối thiểu và tối đa trước đi 1 Key Frame được chèn vào bởi x264.
Ví dụ giá
trị min-keyint hay Min GOP Size thường được chọn bằng với giá trị fps. Fps là số
lượng Frame có trong 1 giây. Thông thường Fps=24 ==> Ít nhất sau 24 Frames mới
có 1 Key Frame được chèn vào. Việc chọn giá trị này sẽ đảm bảo không bao giờ có
2 Key Frames cùng xuất hiện trong vòng 1 giây (việc đó sẽ chỉ làm cho dung lượng
bản encode tăng cao mà chất lượng hầu như không khác biệt).
Tương tự,
Max GOP Size = X sẽ đảm bảo phải có 1 Key Frame xuất hiện cứ sau X Frame. 1
Video có quá ít Key Frame sẽ dẫn đến việc chất lượng giảm sút, và dễ gây hiện
tượng lag khi nhảy đến 1 thời điểm nhất định của video (do điểm đó không có Key
Frame, video sẽ phải tìm kiếm Key Frame tiếp theo xuất hiện).
Như đã nói,
giá trị Min GOP Size(min-keyint) thường được chọn bằng với giá trị fps. Còn Max
GOP Size(keyint) được khuyến cáo bằng 10 lần giá trị fps (đảm bảo rằng nếu hiện
tượng lag xuất hiện cũng sẽ chỉ kéo dài trong tối đa 10 giây). Giá trị lớn nhất
mà min-keyint có thể nhận là keyint/2+1
Scene Cut - scenecut: Cho x264 quyết định mức độ nhạy khi chuyển cảnh. x264 sẽ
tính toán giá trị cho mỗi frame để xem độ khác biệt giữa nó với các frame trước.
Từ giá trị này, nó sẽ quyết định khi nào video xuất hiện
việc chuyển cảnh và do đó sẽ cần phải chèn vào Key Frame. Giá trị này càng lớn,
x264 sẽ càng nhạy hơn với các phần chuyển cảnh. Ví dụ 1 video với các camera
chuyển động ít sẽ đòi hỏi giá trị này cao hơn.
Nếu bạn muốn video của mình có khả năng tương thích cao với các thiết bị cũ
(ví dụ: điện thoại Android thế hệ trước):
-profile:v baseline -level 3.0
Điều này làm mất đi một số
tính năng nâng cao nhưng lại tương thích tốt hơn. Thông thường, bạn không cần
cài đặt này (và do đó tránh sử dụng -profile: v và -level), nhưng nếu bạn sử dụng
cài đặt này, nó có thể tăng tốc độ bit so với những gì cần thiết để đạt được
cùng chất lượng trong các profile cao hơn.
iOS
iOS
Compatability (source) |
|||
Profile |
Level |
Devices |
Options |
Baseline |
3.0 |
All
devices |
-profile:v baseline
-level 3.0 |
Baseline |
3.1 |
iPhone
3G and later, iPod touch 2nd generation and later |
-profile:v baseline
-level 3.1 |
Main |
3.1 |
iPad
(all versions), Apple TV 2 and later, iPhone 4 and later |
-profile:v main -level
3.1 |
Main |
4.0 |
Apple
TV 3 and later, iPad 2 and later, iPhone 4s and later |
-profile:v main -level
4.0 |
High |
4.0 |
Apple
TV 3 and later, iPad 2 and later, iPhone 4s and later |
-profile:v high -level
4.0 |
High |
4.1 |
iPad 2
and later, iPhone 4s and later, iPhone 5c and later |
-profile:v high -level
4.1 |
High |
4.2 |
iPad
Air and later, iPhone 5s and later |
-profile:v high -level
4.2 |
Libvpx (VP8)
libvpx cung cấp một chế độ bitrate biến theo mặc định. Trong
chế độ này, nó chỉ đơn giản là cố gắng đạt đến tỷ lệ bit được xác định trung
bình, ví dụ: 1 MBit / s.
ffmpeg -i input.mp4 -c:v libvpx -b:v 1M -c:a libvorbis output.webm
VP9
ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 2M output.webm
libvpx-vp9 cung cấp một chế độ bitrate biến đơn giản (VBR)
theo mặc định. Trong chế độ này, nó chỉ đơn giản là cố gắng đạt đến tỷ lệ bit
được xác định trung bình, ví dụ: 2 MBit / s.
Thường không nên sử dụng chế độ này vì đầu ra có thể không
nén hiệu quả hoặc dẫn đến các biến thể chất lượng. Thay vào đó, hãy sử dụng mã
hóa Hai-Pass hoặc Constant Quality.
ffmpeg -i big_buck_bunny_720p_10mb.mp4 -i FPT_New_Logo.png
-c:a copy -filter_complex 'overlay=W-w-125:H-h-78'
big_buck_bunny_720p_10mb_logo.mp4
center: overlay=(W-w)/2:(H-h)/2
top_left:
overlay=5:5 5 pixcel
top_right:
overlay=W-w-5:5 5 pixcel
bottom_right:
overlay=W-w-5:H-h-5 5 pixcel
bottom_left:
overlay=5:H-h-5 5 pixcel
ffmpeg -i input -i logo1 -i logo2 -filter_complex
'overlay=x=10:y=H-h-10,overlay=x=W-w-10:y=H-h-10' output
ffmpeg -i big_buck_bunny_720p_10mb.mp4 -filter_complex
"drawtext=fontsize=30:fontfile=/usr/share/fonts/gnu-free/FreeSerif.ttf:text='Hello
World':x=(w-text_w)/2:y=(h-text_h)/2" -c:a copy
big_buck_bunny_720p_10mb_text1.mp4
Cố định bitrate cho luồng video trực tuyến
ffmpeg -re -i INPUT -vcodec libx264 -s 1280×720 -b:v
#{bandwidth}k -minrate:v #{bandwidth}k -maxrate:v #{bandwidth}k -muxrate
#{bandwidth}+128*1.05 -bufsize #{bandwidth/4}k -nal-hrd cbr -c:a aac -strict -2
-ar 48000 -b:a 192k -packetsize 188 -f flv
rtmp://IP_SERVER:1935/APP/stream_name
Main options
-f fmt (input/output)
Buộc định dạng input hoặc output file. Định dạng này thường
được tự động phát hiện cho các tập tin đầu vào và được đoán từ phần mở rộng của
tập tin cho các tệp xuất, do đó, trong hầu hết các trường hợp, tùy chọn này
không cần thiết.
-i url (input) : input file url
-y (global) : ghi đè output file mà không cần hỏi
-n (global) : Không ghi đè output file, và thoát ra ngay lập
tức nếu có một output file tồn tại
-stream_loop number (input)
Đặt số lần luồng đầu vào phải được lặp lại. Loop 0 có nghĩa
là không có vòng lặp, vòng lặp -1 có nghĩa là vòng lặp vô hạn.
-c [: stream_specifier] codec (input/output, per-stream)
-codec [: stream_specifier] codec (input/output, per-stream)
Chọn bộ mã hóa (khi được sử dụng trước tệp xuất) hoặc bộ giải
mã (khi được sử dụng trước tệp nhập) cho một hoặc nhiều luồng. codec là tên của
bộ giải mã / bộ mã hóa hoặc bản sao giá trị đặc biệt (chỉ xuất) để cho biết rằng
luồng không được mã hoá lại.
Sưu tầm và biên soạn bởi Nguyễn Quang (dangquangkdc)
Không có nhận xét nào: