Cách sử dụng lệnh FFmpeg để xử lý âm thanh và video trên Linux

Hầu như bất kỳ ai liên quan đến video có thể đã nghe nói về FFmpeg trước đây. Đối với những người không quen, FFmpeg là một chương trình mã nguồn mở và miễn phí có thể chuyển đổi bất kỳ định dạng video nào sang định dạng video khác và thay đổi codec của nó.

FFmpeg hỗ trợ gần như tất cả các codec âm thanh/video (H.264, H.265, VP8, VP9, AAC, OPUS, v.v...), các định dạng file (MP4, FLV, MKV, TS, WEBM, MP3, v.v...) và thậm chí các giao thức phát trực tuyến (HTTP, RTMP, RTSP, HLS, v.v...).

Đây là cách bạn có thể cài đặt và sử dụng FFmpeg để xử lý các file âm thanh và video trên Linux.

Cài đặt FFmpeg trên Linux

FFmpeg là một công cụ mã nguồn mở và miễn phí có sẵn trong kho lưu trữ mặc định của hầu hết mọi bản phân phối Linux lớn. Bạn cũng có thể lấy mã nguồn miễn phí nếu muốn tự biên dịch.

# Debian
sudo apt install ffmpeg

# Fedora
sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm
sudo dnf -y install ffmpeg

# RHEL/CentOS
yum install ffmpeg ffmpeg-devel

# Arch Linux
pacman -S ffmpeg

Nếu mọi thứ suôn sẻ trong quá trình cài đặt, bạn sẽ có thể thấy phiên bản FFmpeg khi sử dụng đối số -version.

ffmpeg -version

Phiên bản FFmpeg

Nhận thông tin video với FFmpeg

Có thể xem thông tin của video mà bạn muốn chỉnh sửa bằng FFmpeg bằng cách sử dụng flag -i:

ffmpeg -i example-video.mp4 -hide_banner

Ở đây, công việc của tham số -hide_banner là ẩn thông tin không cần thiết. Bạn có thể loại bỏ tham số này và xem sự khác biệt trong đầu ra.

Nhận thông tin video với FFmpeg

Như bạn thấy, có thể nhận được rất nhiều thông tin như loại codec video, ngày tạo, siêu dữ liệu và cấu trúc bộ mã hóa của video mẫu.

Chuyển đổi file video hoặc âm thanh sang định dạng khác

Một trong những tính năng hữu ích nhất của FFmpeg là nó có thể chuyển đổi video hoặc âm thanh sang định dạng khác. Bạn có thể làm điều này với một lệnh đơn giản.

Chuyển đổi MOV sang MP4 với FFmpeg

Bạn có thể chuyển đổi file video định dạng MOV sang MP4 bằng FFmpeg bằng lệnh dưới đây:

ffmpeg -i input-mov-video.mov output-video.mp4

Đầu tiên, sử dụng tham số -i, viết tắt của video đầu vào. Sau đó, nhập file bạn muốn chuyển đổi. Cuối cùng, nhập định dạng bạn muốn chuyển đổi sang. Bạn có thể đặt đầu ra của mình bất kỳ tên nào bạn muốn.

Trong khi FFmpeg đang chạy, lệnh sẽ hiển thị cho bạn những thay đổi mà nó đã thực hiện trên màn hình lệnh. File đầu ra của bạn sẽ được lưu trữ trong thư mục làm việc hiện tại.

Chuyển đổi WAV sang MP3 với FFmpeg

Tương tự với video, bạn có thể thực hiện các chuyển đổi tương tự cho những file âm thanh. Ví dụ, bạn có thể chuyển đổi file âm thanh WAV sang MP3 như sau:

ffmpeg -i example-wav.wav -vn -ar 48000 -ac 2 -b:a 256 output.mp3

Lệnh này có nhiều tham số hơn so với phương pháp chuyển đổi video, nhưng chúng không khó hiểu. Có thể giải thích những điều này như sau:

  • -vn: Đôi khi các file âm thanh bạn nghe có hình ảnh. Những hình ảnh này thường bắt nguồn từ video. Nếu bạn không muốn những hình ảnh như vậy trong đầu ra, bạn có thể sử dụng tham số này.
  • -ar: Tham số này cho phép bạn đặt tần số của file âm thanh bạn muốn chuyển đổi. Bạn có thể điều chỉnh chất lượng và tần số âm thanh với các giá trị như 8kHz, 44.1kHz hoặc 48kHz.
  • -ac: Bạn có thể đã nghe các thuật ngữ mono và stereo trước đây. Tham số này có thể giúp bạn thiết lập số lượng kênh âm thanh.
  • -b:a: Tham số này cho phép bạn đặt tốc độ bit âm thanh mỗi giây. Kilobit càng cao thì chất lượng âm thanh càng cao.

Hoạt động âm thanh với FFmpeg

FFmpeg cũng có thể tách âm thanh khỏi video. Đối với điều này, chỉ cần sử dụng tham số -vn:

ffmpeg -i example-video.mp4 -vn output.mp3

Nếu bạn muốn tách âm thanh khỏi video, thì bây giờ, bạn có thể thử xóa âm thanh khỏi video. Sự khác biệt ở đây là tham số -an. Bạn nên ghi nhớ thông số này nếu muốn tắt bất kỳ âm thanh nào trong video:

ffmpeg -i example-video.mp4 -an output-mute.mp4

Xử lý kích thước video với FFmpeg

Kích thước video đôi khi có thể khá khó chịu, đặc biệt là khi bạn muốn upload chúng lên một nơi nào đó. Bạn không cần phải tải xuống các chương trình để cắt chúng nữa vì FFmpeg có thể làm điều này cho bạn. Tuy nhiên, có một số thông số bạn cần biết về điều này:

  • -ss: Sử dụng tham số này để đặt thời gian bắt đầu của clip
  • -to: Cho phép bạn chỉ định thời gian kết thúc của clip
  • -c: Đặt codec cho clip của bạn bằng tham số này
  • -t: Sử dụng tham số này để đặt thời lượng của clip

Bạn có thể lấy ra nhiều ví dụ bằng cách sử dụng các tham số này. Ví dụ, nếu bạn muốn cắt video, bạn có thể sử dụng một cái gì đó như:

ffmpeg -i example-video.mp4 -ss 00:02:25 -to 00:03:50 -c copy output-trim.mp4

Cũng có thể chỉ cắt hình ảnh bên trong video chứ không phải toàn bộ video. Đối với điều này, bạn có thể sử dụng một cái gì đó như:

ffmpeg -i example-video.mp4 -filter:v "crop=w:h:x:y" output-crop.mp4

Dưới đây là các tham số được sử dụng trong lệnh nói trên:

  • -filter:v: Tham số này chỉ định quy trình lọc bạn sẽ áp dụng cho video
  • crop: Tham số này để chỉ định rằng một thao tác cắt sẽ được thực hiện
  • w:h:x:y: Như bạn có thể đã đoán, các biến w, h, x và y lần lượt biểu thị chiều rộng, chiều cao và vị trí của hộp cắt

Chỉnh sửa video trên Linux với FFmpeg

Việc chỉnh sửa video không chỉ dừng lại ở việc cắt. Đôi khi bạn cũng cần thay đổi tỷ lệ của video. Lệnh sau sẽ thay đổi kích thước video thành kích thước bạn muốn:

ffmpeg -i example-video.mp4 -vf scale=1920:1080 output-scale.mp4
  • -vf: Tham số này hoạt động giống như đối số -filter:v đã thấy ở trên
  • scale: Bạn có thể chỉ định các kích thước tỷ lệ bạn muốn trong đầu ra của mình bằng tham số này

FFmpeg cũng cho phép bạn kết hợp nhiều video. Hãy tưởng tượng bạn có nhiều clip được mã hóa bằng cùng một codec. Nhập danh sách video bạn muốn ghép thành file .txt. Sau đó, chạy lệnh sau:

ffmpeg -f concat -i my-video-list.txt -c copy sum-output.mp4

Tham số concat ở đây kết hợp các file của bạn. Cũng có thể xoay video bằng FFmpeg:

ffmpeg -i example-video.mp4 -vf "transpose=2" output-rotate.mp4
  • transpose=0: Lật theo chiều dọc (mặc định)
  • transpose=1: Xoay 90 độ theo chiều kim đồng hồ
  • transpose=2: Xoay 90 độ ngược chiều kim đồng hồ
  • transpose=3: Lật theo chiều dọc

Để xoay video 180 độ theo chiều kim đồng hồ, bạn cần chỉ định tham số transpose 2 lần:

ffmpeg -i example-video.mp4 -vf "transpose=2,transpose=2" output-rotate.mp4

Hoạt động FPS và GOP

Như bạn đã biết, FPS có nghĩa là khung hình trên giây. GOP (group of pictures) là khoảng cách giữa hai khung hình chính. FFmpeg cũng hữu ích để thay đổi một số tham số, bao gồm FPS và GOP. Nếu bạn sử dụng lệnh dưới đây, FFmpeg sẽ thay đổi FPS ban đầu thành giá trị bạn đặt:

ffmpeg -i example-video.mp4 -vf "fps=60" output-fps.mp4

Đối với GOP, bạn có thể sử dụng tham số -g và đặt giá trị của nó thành bất kỳ giá trị nào bạn muốn. Lưu ý rằng việc ép buộc quá nhiều khung hình chính có thể gây hại cho các thuật toán chuyển tiếp của một số bộ mã hóa.

ffmpeg -i example-video.mp4 -g 200 output-gop.mp4

Tạo GIF động với FFmpeg

FFmpeg cũng lý tưởng để chuyển đổi video thành GIF động. Bạn có thể sử dụng một lệnh chuyển đổi đơn giản để thực hiện việc này:

ffmpeg -i example-video.mp4 output-gif.gif

Nhưng đôi khi, bạn có thể muốn tùy chỉnh GIF. Bạn có thể sử dụng các tham số khác nhau được thảo luận ở trên để đạt được điều này:

ffmpeg -ss 00:01:15 -i example-video.mp4 -to 10 -r 10 -vf scale=250:-1 output-gif.gif

Tham số -r ở đây có nghĩa là tốc độ khung hình. Như bạn có thể thấy, nhiều tùy chỉnh khác nhau có thể thực hiện được trong một lệnh dòng.

Trích xuất khung hình từ video với FFmpeg

Ngoài việc chuyển đổi một hoặc nhiều hình ảnh thành video, bạn cũng có thể trích xuất khung hình từ video. Lệnh sau sẽ trích xuất một khung hình mỗi giây từ video đầu vào của bạn. Ngoài ra, những hình ảnh được trích xuất này sẽ có tên gồm hai chữ số như 01.jpeg, 02.jpeg, v.v... Nếu muốn, bạn cũng có thể thêm các thông số khác mà bạn đã học được.

ffmpeg -i example-video.mp4 -r 1 image-%02d.jpeg

Bạn cũng có thể sử dụng các định dạng khác như PNG và BMP cho các hình ảnh được trích xuất.

Thứ Sáu, 05/08/2022 11:30
523 👨 1.208
0 Bình luận
Sắp xếp theo
    ❖ Linux