App kiếm tiền | Link đăng ký | Thông tin |
---|---|---|
Ngân hàng MSB | Tải App nhận tiền | Nhập mã: TAPTAP4 Kiếm tiền: 54.000đ/đơn |
Ngân hàng Techcombank | Tải App nhận tiền | Kiếm tiền: 78.000đ/đơn |
Ngân hàng Sacombank | Tải App nhận tiền | Nhập mã: AT123456 Kiếm tiền: 54.000đ/đơn |
Ngân hàng LioBank | Tải App nhận tiền | Kiếm tiền: 325.000đ/đơn |
Ngân hàng LPBank | Tải App nhận tiền | Kiếm tiền: 66.000đ/đơn |
Với việc sử dụng ffmpeg để cắt video thì chúng ta đã quen với việc cắt đoạn đầu Video một khoảng thời gian rồi phải không. Mình tin chắc rất rất nhiều bạn đang lúng túng tìm cách cắt phần cuối của Video hàng loạt. Bài viết hôm nay sẽ giúp bạn giải quyết vấn đề tưởng chừng đơn giản này một cách hiệu quả nhất bằng ffmpeg chỉ trong vòng… 2 nốt nhạc.
Thực sự đối với 1 Video thì công việc này không có gì khó khăn. Chỉ cần tính toán thời gian của Video và trừ đi khoảng thời gian muốn cắt thì chúng ta có thể cắt được phần Video mong muốn qua câu lệnh:
ffmpeg -ss [start] -i in.mp4 -t [duration] -c copy out.mp4
Trong đó:
- start: là thời gian bắt đầu cắt Video, nếu muốn cắt tại giây thứ 10 thì start thay bằng 00:00:10 hoặc là 10
- duration: là khoảng thời gian cắt, nếu muốn cắt 20s sau giây thứ 10 thì thay duration bằng 00:00:20 hoặc là 20
- -c copy: là copy lại định dạng của Video gốc từ âm thanh đến hình ảnh, có nghĩa là không thay đổi thông số cũng như chất lượng Video.
Khi đó câu lệnh dùng trong ffmpeg sẽ là:
ffmpeg -ss 00:00:10 -i in.mp4 -t 00:00:20 -c copy out.mp4
hoặc là
ffmpeg -ss 10 -i in.mp4 -t 20 -c copy out.mp4
Để cắt phần đầu hàng loạt Video thì các bạn sử dụng câu lệnh bên dưới. Ở câu lệnh này chúng ta cắt toàn bộ 10s đầu Video có đuôi .MP4 trong thư mục bin và lưu nó vào thư mục out cũng nằm trong thư muc bin.
for %a in (“*.mp4”) do ffmpeg -ss 00:00:10 -i “%a” -c copy “out/%~na.mp4”
Việc cắt đầu Video thật đơn giản phải không nào. Bài này mình muốn hướng dẫn cho các bạn một cách cắt đuôi (cắt phần cuối của Video).
Vì ffmpeg không hỗ trợ lệnh để cắt từ cuối Video ngược lại mà nó chỉ thực hiện xuôi từ đầu Video tới cuối Video. Các bạn để ý thư mục bin của ffmpeg có 3 file chạy là ffmpeg.exe, ffprobe.exe và ffplay.exe. Chúng ta thường sử dụng tới ffmpeg thôi phải không còn hai cái kia hình như lãng quên. Thế nhưng bây giờ nó mới phát huy tác dụng thật sự đấy các bạn à.
Các bạn hình dung mình đã có thể cắt được phần đầu Video rồi. Với các Video có độ dài khác nhau mà chúng ta ngồi tính rồi ngồi trừ đi và thực hiện việc cắt từng Video một quả thật là rất mất công.
Vì băn khoăn điều này nên mình đã tìm tòi trên mạng và hôm nay giới thiệu cho các bạn bài này cũng vì mình đã mắc phải. Mình thấy nếu có được hướng dẫn này thì công việc nhẹ nhàng hơn nhiều. Có thể câu lệnh chưa được tối ưu nhưng nó đủ dùng và mình cảm nhận nó áp dụng vào việc cắt đuôi hàng loạt video rất hiệu quả.
Thôi nói thế đủ rồi đi thẳng vào vấn đề nào. Để cắt phần đuôi thì không những chỉ xác định cắt phần đuôi bao nhiêu mà còn phải xác định Video đó dài bao nhiêu. Xác định độ dài Video để làm gì, để lấy độ dài của Video – (trừ đi) phần đuôi muốn cắt để ra vị trí bắt đầu của việc cắt đuôi. Việc xác định vị trí bắt đầu cắt đuôi này để ffmpeg hiểu được vị trí bắt đầu cho việc cắt đuôi và nó sẽ thực hiện tại vị trí đó cho đến hết Video.
Đã là cắt hàng loạt rất nhiều Video thì mỗi Video có độ dài khác nhau nên việc xác định điều này rất cần thiết. Chúng ta không thể nào làm việc này thủ công và chính ffprobe sẽ giúp chúng ta thực hiện điều này một cách tự động dễ dàng, áp dụng vào bài này rất hiệu quả.
Để làm công việc này các bạn tạo 2 file là trim.bat và _trim2.bat
file trim.bat các bạn copy đoạn code này:
@echo off for %%i in (*.mp4) do ( call _trim2.bat %%i")
file _trim2.bat các bạn copy đoạn code này:
@echo off for /f "tokens=*" %%a in ('_ffprobe -show_format -i %1 ^| find "duration"') do set _duration=%%a set _duration=%_duration:~9% for /f "delims=. tokens=1*" %%b in ('echo %_duration%') do set /a "_durS=%%b" for /f "delims=. tokens=2*" %%c in ('echo %_duration%') do set "_durMS=%%c" rem following line is seconds to cut set /a "_durS-=5" set "_newduration=%_durS%.%_durMS%" set "_output=%~n1" md _fixed _ffmpeg -ss 0 -i %1 -t %_newduration% -c copy "_fixed\%_output%.mp4"
Các bạn có thể Download hai file này tại đây nhé: Download
Copy hai file này vào trong thư mục chứa các file Video muốn cắt (bài này mình để chung các file cùng nhau, nếu các bạn muốn tạo thư mục riêng chứa các File Video đầu vào thì chỉ việc thay đổi đường dẫn, nếu muốn biết đoạn nào thì cứ comment để hỗ trợ nhé, làm thế này thôi cho đơn giản).
Tiếp theo copy hai file trong thư mục bin của ffmpeg là ffmpeg.exe, ffprobe.exe bỏ vào thư mục chứa Video đầu vào cùng hai file .bat lúc nãy đã copy, đổi tên lại cho trùng với bài viết là _ffmpeg.exe, _ffprobe.exe (cái này vì code trên viết như vậy thì đổi tên lại cho nó phù hợp thôi chứ để nguyên cũng không sao, việc này chỉ để phân biệt file thôi).
Trong thư mục này các bạn tạo một Folder đặt tên là _fixed để chứa các file đầu ra sau khi cắt nhé.
Để thay đổi thời gian cắt đuôi Video các bạn chú ý dòng có chứa “_durS-=5” thì ở đây là cắt 5s đuôi của Video, để thay đổi thời gian thì các bạn thay đổi thông số này nhé.
Như vậy đã xong rồi đó các bạn. Các bạn hãy chạy file trim.bat và chờ đợi ít phút sau đó vào thư mục _fixed xem kết quả thế nào nhé.
Nếu cảm thấy khó khăn thì các bạn hãy theo dõi Video hướng dẫn cụ thể bên dưới nhé.
Trong hướng dẫn bên trên mình đổi tên file trim.bat thành cut_end.bat rồi nhé, hai file này thực ra là một. Nếu 2 file trên không hoạt động thì các bạn Download luôn file dưới đây về và copy Video cần cắt bỏ vào đó và chạy thôi, mình đã test ok trên tất cả các phiên bản Windows.
Trên đây mình đã hướng dẫn cho các bạn phương pháp cắt phần đuôi của Video hàng loạt nhanh chóng bằng việc kết hợp giữa ffmpeg và ffprobe. Hy vọng các bạn có thể thực hiện chính xác mà không mắc phải vấn đề gì.
Mình cũng sưu tầm một Mini Tool của Vien NV giúp bạn thực hiện việc cắt đầu đuôi Vieo một cách dễ dàng. Bạn có thể tải về và sử dụng Tool này ở đường dẫn bên dưới.
Chúc các bạn thành công.
bạn có video hướng dẫn phần cắt 5s cuối của video ko? mình đọc mà vẫn chưa làm dc
Bạn gặp lỗi ở đoạn nào, mình làm vẫn ok, bạn làm lại xem nhé. mình fix kỹ rồi đấy.
Ad có code cắt bỏ những đoạn dính bản quyền k ad ?
Ví dụ video dài hay có QC muốn cắt bỏ nó đi.
Không có đâu bạn à. Việc cắt những đoạn ở giữa thì riêng lẻ từng Video thì chúng ta sử dụng phần mềm biên tập Video đi.
Xin huong dan minh cat phan dau video hang loat, minh doc bai nay sua lai nhung khong thanh cong
Cắt phần đầu đơn giản mà bạn. Bạn sử dụng câu lệnh này nhé: ffmpeg -y -ss 00:00:03 -i “{input}.*” -codec copy “{output}_cut.*”. Câu lênh này là cắt 3s đầu của Video.
Code trên mình sử dụng trong phần mềm My Render Tool của bác Vinacapcha. Còn để sử dụng riêng với ffmpeg thì sử dụng code dưới.
for %a in (“*.mp4”) DO ffmpeg -ss 00:00:10 -i “%a” -c copy “out/%~na.mp4”
Nên nhớ các file Video sẽ có đuôi .MP4 và nằm trong thư mục bin của ffmpeg, trong thư mục bin tạo thêm thư mục out chứa các file Video đã được cắt nhé. Ví dụ trên là cắt 10s đầu của toàn bộ Video đó bạn.