Tìm hiểu các câu lệnh encode audio/video với FFMPEG

1. Vài câu lệnh encode với FFMPEG

Thường câu lệnh FFMPEG có định 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:

alt text

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.

2. 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 áp dụng cho bộ encode FFmpeg. Chất lượng của nó ngang bằng hoặc có thể tốt hơn libfdk_aac ở tốc độ bit mặc định là 128kbps. Bộ mã hoá này cũng cho thêm nhiều lựa chọn, bộ profile và bộ tự điển hơn các bộ mã hóa khác (chỉ với profile 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 tốt nhất hiện nay.

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.

alt text

3. 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

alt text

libx265

ffmpeg -i input -c:v libx265 -x265-params crf=26:psy-rd=1 output.mp4

alt text
-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 Profile

alt text

Libvpx (VP8)

libvpx cung cấp một chế độ bitrate thay đổi 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 thay đổi đơ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 output có thể không nén hiệu quả hoặc dẫn đến chất lượng thay đổi. Thay vào đó, hãy sử dụng mã hóa Two-Pass hoặc Constant Quality.

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Quang Nguyễn

3 bài viết.
8 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
11 4
FFmpeg là một tool dạng dòng lệnh được sử dụng để chuyển đổi các tập tin đa phương tiện giữa các định dạng khác nhau. Bài viết này trình bày cách s...
Quang Nguyễn viết 18 ngày trước
11 4
White
4 0
(Ảnh) File source : check.mp4 (gồm luồng audio và subtitle) ffprobe check.mp4 Stream 0:0(und): Video: hevc (Main 10) (hev1 / 0x31766568), yuv...
Quang Nguyễn viết 1 tháng trước
4 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
3 bài viết.
8 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!