thảo luận Tổng hợp, thảo luận về ffmpeg

eipi10

Senior Member
I. Giới thiệu về ffmpeg
ffmpeg là một công cụ, framework miễn phí và mã nguồn mở hàng đầu chuyên xử lý (encode, decode, edit...) multimedia như video, audio, ảnh... ffmpeg chạy trên cmd/terminal trên rất nhiều hệ điều hành: Windows, Linux, Mac...

Trang web chính thức: https://www.ffmpeg.org/

1. Cài đặt:
Các bạn có thể tham khảo cách cài đặt trên các hệ máy tại đây, viết khá dễ hiểu:
https://avpres.net/FFmpeg/#ch1
2. Vài lệnh cơ bản:
Để sử dụng ffmpeg, sau khi cài đặt, các bạn mở commander/terminal trên máy tương ứng. Cấu trúc lệnh cơ bản khi sử dụng ffmpeg là:​
Code:
ffmpeg -i input.mkv output.mp4
Trong đó -i là tham số ám chỉ file input của bạn. input.mkv và output.mp4 là đường dẫn đến các file video các bạn muốn làm việc. Ngoài ra bạn có thể sử dụng các tham số khác để chỉnh sửa video như bạn muốn. Một số lệnh cơ bản:​
2.1. Copy:
Cơ bản là để chuyển đổi định dạng video một cách nhanh nhất mà không làm giảm chất lượng video. Ví dụ các bạn muốn chuyển video định dạng ts sang mp4 thì sử dụng cấu trúc sau đây:​
Code:
ffmpeg -i input.ts -c copy output.mp4
-c ở đây có thể viết thành -codec, tức là định dạng video, trường hợp bạn ko muốn chỉnh sửa gì với video mà chỉ muốn đổi định dạng với chất lượng gốc thì nên sử dụng copy.
2.2. Cắt (trim) video:
Với lệnh copy ở trên, bạn cũng có thể cắt 1 đoạn video và vẫn giữ nguyên chất lượng ban đầu. Có 3 dạng copy cơ bản:​
  • Cắt từ phút 01:00 đến phút 03:00:
    Code:
    ffmpeg -ss 00:01:00 -i video.mp4 -to 00:02:00 -c copy cut.mp4
    Trong đây tham số -ss được đặt trước -i dùng để tìm kiếm nhanh đến vị trí keyframe gần nhất với phút 01:00, -to biểu thị cho video kéo dài 2 phút.

  • Cắt từ phút 01:00 đến phút 02:00:
    Code:
    ffmpeg -i video.mp4 -ss 00:01:00 -to 00:02:00 -c copy cut.mp4
    Khi -ss được đặt phía sau -i, ffmpeg sẽ tìm đến vị trí 01:00 chính xác hơn, nhưng cũng chậm hơn, -to biểu thị cho điểm kết thúc của video.

  • Cắt từ phút 01:00 đến phút 02:00:
    Code:
    ffmpeg -ss 00:01:00 -i video.mp4 -to 00:02:00 -c copy -copyts cut.mp4
    Nếu bạn muốn -to biểu thị cho điểm kết thúc video trong trường hợp đầu tiên thì có thể thêm tham số -copyts vào.
Tham khảo tại đây: https://trac.ffmpeg.org/wiki/Seeking
II. Các link tham khảo
Có 2 link mình thấy khá quan trọng để các bạn tham khảo bao gồm:
  1. Wiki: https://trac.ffmpeg.org/wiki
    Trong đây chứa toàn bộ các link và hướng dẫn chi tiết chính thức từ ffmpeg. Nó có khá nhiều nên sẽ hơi ngợp nhưng dùng để tìm kiếm mẫu và syntax khá tốt.

  2. ffmprovisr: https://amiaopensource.github.io/ffmprovisr/
    Nếu trang chính thức của ffmpeg hơi khó hiểu thì các bạn có thể vào link trên, cá nhân mình thấy trang này tóm tắt giải thích các lệnh cơ bản khá dễ hiểu, rất đáng để tham khảo.
III. Các tool tương tự
Một số tool khá hay dựa trên một phần/hoàn toàn ffmpeg để thực hiện các mục đích khác nhau:

--------------------------------------------------------------------
Edit 2: Đã update các phần cơ bản về ffmpeg. Rất hoan nghênh các thím vào đóng góp thêm :sexy_girl: Quan trọng hơn, ai có bất kì thắc mắc hoặc mẹo hay nào đều có thể vào chia sẻ để mọi người bàn bạc.
 
Last edited:
@Vitconsome Chắc chuyển topic sang đây, tình hình file thím vừa đưa mình chuyển qua ko thấy vấn đề gì, chắc là chưa tới đoạn bị lỗi :sweat: Thím chụp lại màn hình lúc thêm -fflags +discardcorrupts mình xem thử
 
@Vitconsome Chắc chuyển topic sang đây, tình hình file thím vừa đưa mình chuyển qua ko thấy vấn đề gì, chắc là chưa tới đoạn bị lỗi :sweat: Thím chụp lại màn hình lúc thêm -fflags +discardcorrupts mình xem thử
1617947317016.png

đây thím
 
e dùng ffmpeg để chuyển từ ts sang mp4. rồi vất vào avidemux để cắt vì e còn phải lựa đoạn hay e mới lấy .
Thông thường thì cắt video phải cẩn thận, do video có keyframe nên ko phải cắt chỗ nào cũng được, thay vì chuyển thành mp4 rồi bỏ vào avidemux thì thím thử bỏ file ts gốc vào avidemux rồi khi cắt thì chọn dạng mp4 xem sao
 
Thông thường thì cắt video phải cẩn thận, do video có keyframe nên ko phải cắt chỗ nào cũng được, thay vì chuyển thành mp4 rồi bỏ vào avidemux thì thím thử bỏ file ts gốc vào avidemux rồi khi cắt thì chọn dạng mp4 xem sao
e thử rồi thím , e cho file ts vào và xuất ra file mp4 , cắt được , xuất ra video khớp tiếng và hình . nhưng tốc độ video lại bị đẩy lên cao nên không hợp để e dùng
 
e thử rồi thím , e cho file ts vào và xuất ra file mp4 , cắt được , xuất ra video khớp tiếng và hình . nhưng tốc độ video lại bị đẩy lên cao nên không hợp để e dùng
Lạ nhỉ, sao nó lại chỉnh tốc độ được :sweat: Nếu vậy thì thay vì cắt bằng avidemux, thím để ý thím muốn cắt từ phút mấy đến phút mấy trong avidemux rồi copy 2 cái mốc thời gian đó (copy y chang, kể cả phần sau dấu chấm) chạy bằng ffmpeg bằng cách này xem sao, ví dụ thím muốn cắt từ phút 20 đến phút 100 (1h40m):
Code:
ffmpeg -i 1.ts -ss 00:20:00 -to 01:40:00 -c copy -copyts 1.mp4
 
Lạ nhỉ, sao nó lại chỉnh tốc độ được :sweat: Nếu vậy thì thay vì cắt bằng avidemux, thím để ý thím muốn cắt từ phút mấy đến phút mấy trong avidemux rồi copy 2 cái mốc thời gian đó (copy y chang, kể cả phần sau dấu chấm) chạy bằng ffmpeg bằng cách này xem sao, ví dụ thím muốn cắt từ phút 20 đến phút 100 (1h40m):
Code:
ffmpeg -i 1.ts -ss 00:20:00 -to 01:40:00 -c copy -copyts 1.mp4
được rồi thím ạ , đoạn đấy e xuất ra thì nó lại ngon .
 
chào thím, thím xem giúp e cái này đc ko. Đây là 1 clip e lấy trên pỏnhub:shame: e đã cắt đi hơn 3s đầu để bỏ đoạn giới thiệu về trang web, nhưng thế quái nào clip cắt xong vẫn còn một đoạn ở ngay đầu. Eđã thử cắt nhiều hơn 1 chút nhưng vẫn y hệt như thế:surrender:
đây thím
 
chào thím, thím xem giúp e cái này đc ko. Đây là 1 clip e lấy trên pỏnhub:shame: e đã cắt đi hơn 3s đầu để bỏ đoạn giới thiệu về trang web, nhưng thế quái nào clip cắt xong vẫn còn một đoạn ở ngay đầu. Eđã thử cắt nhiều hơn 1 chút nhưng vẫn y hệt như thế:surrender:
đây thím
Mình cắt nó ra bt mà nhỉ, thím dùng lệnh nào, có phải cái này ko
Code:
ffmpeg -i input.mp4 -ss 3 -c copy output.mp4
 
Mình cắt nó ra bt mà nhỉ, thím dùng lệnh nào, có phải cái này ko
Code:
ffmpeg -i input.mp4 -ss 3 -c copy output.mp4
cái này e cắt bằng avidemux, nhưng trước e cũng từng thử cắt bằng ffmpeg rồi và vẫn bị thế, cắt bằng camtasia cũng bị luôn:surrender: trước e dùng lệnh này
ffmpeg -i abc.mp4 -ss 00:40:00.00 -to 00:45:00.00 -c copy abc.mp4
 
e vừa cắt bằng ffmpeg thì nó bị thế này. gần đến s thứ 2 hình mới chạy, âm thanh thì chạy từ đầu.
1617959516076.png
 
cái này e cắt bằng avidemux, nhưng trước e cũng từng thử cắt bằng ffmpeg rồi và vẫn bị thế, cắt bằng camtasia cũng bị luôn:surrender: trước e dùng lệnh này
ffmpeg -i abc.mp4 -ss 00:40:00.00 -to 00:45:00.00 -c copy abc.mp4
À, như mình nói ở trên, mỗi video có các keyframe riêng, nếu thím cắt ngẫu nhiên mà ko re-encode lại (tức là dùng lệnh -c copy) thì chưa chắc đã cắt được đâu. Ví dụ video trên của thím các keyframe nó như thế này
1617959365809.png

Như vậy thì cắt từ 3s đầu trở đi thì ok.

Còn nếu ví dụ video có các keyframe như này
1617959431796.png


Thì ko có cách nào thím cắt 10s đầu trở đi, hoặc cắt đoạn từ 25-30s mà giữ nguyên chất lượng, ko re-encode lại cả (tức là -c copy)
 
Back
Top