Điểm:11

Làm cách nào để xóa 4 giây cuối của tệp MP3?

lá cờ cn

Tôi có một tập hợp các tệp MP3 mà tôi muốn xóa 4 giây cuối cùng. Tôi biết rằng nếu tôi biết thời lượng của mỗi tệp, tôi có thể làm:

ffmpeg -t ${1} -i inputfilename -acodec copy -vcodec copy outputfilename

Ở đâu $1 là thời lượng của tệp trừ đi 4 giây.

Tôi thực sự muốn thứ gì đó có thể cắt bỏ 4 giây cuối cùng bất kể độ dài của tệp. "Dừng 4 giây trước EOF".

Lưu ý: Tôi đã cố gắng tìm ra dòng lệnh này, nếu có phiên bản dễ dàng hơn, tôi rất thích xem nó.

andrew.46 avatar
lá cờ in
Nếu đây là các mp3 âm thanh đơn giản thì FFmpeg có thể quá mức cần thiết cho nhu cầu của bạn? Sox sẽ làm tốt công việc: `sox input.mp3 output.mp3 trim 0 -4`. Tôi có thể viết điều này nếu bạn quan tâm đến việc sử dụng Sox theo cách này...
LarryM avatar
lá cờ cn
Điều này có vẻ ổn, nhưng... Tôi đã thực hiện "sudo apt install sox" và khi chạy lệnh, tôi nhận được "sox FAIL format: no handler for file extension 'mp3'"?
LarryM avatar
lá cờ cn
Được rồi, đã làm: sudo apt-get install libsox-fmt-mp3 và bây giờ việc cắt bớt phần cuối hoạt động tốt - cảm ơn! Nhưng tôi cũng muốn cắt 2 giây kể từ khi bắt đầu odf một số tệp khác. Tôi đã thử: sox input.mp3 output.mp3 trim =2 (và các biến thể khác) nhưng dường như không được. Gợi ý?
Điểm:7
lá cờ in

Sometimes when dealing with audio files, rather than audio plus video, a more nuanced application than FFmpeg is SoX. Install a fully featured SoX on Ubuntu as follows:

sudo apt-get install sox libsox-fmt-all

And to trim 4 seconds from the end of your mp3 file the following very simple command is required:

sox input.mp3 output.mp3 trim 0 -4

In this example '0' is the starting position at the beginning of the file while '-4' establishes the end position of the required segment: 4 seconds from the end.

Multiple variations on this, with multiple positions and saved segments, are possible. For example, as you have mentioned in the comments, if you only wanted to remove 2 seconds at the beginning of your file the command line would be:

sox input.mp3 output.mp3 trim 2

In this example no end position is required. The SoX man pages contain many more examples of the trim command if you want more complex usage...

LarryM avatar
lá cờ cn
Hoàn hảo, cảm ơn bạn!
andrew.46 avatar
lá cờ in
@LarryM Tin vui là nó hiệu quả với bạn :). Bạn có thể 'Chấp nhận' câu trả lời bằng cách nhấp vào dấu kiểm hoặc dấu tích gần câu trả lời và bằng cách này, những người đọc câu hỏi này trong tương lai sẽ biết rằng đây là câu trả lời hay nhất. Và có một ngày tuyệt vời!
Điểm:5
lá cờ jp

chuyển thể từ Cắt video bằng ffmpeg:

ffmpeg -i input.mp3 -ss 4 -i input.mp3 -c copy -map 0:a -map 1:a -shortest -f nut - | ffmpeg -y -f nut -i - -c copy -map 0:0 output.mp3

Điều này làm là sử dụng cùng một đầu vào hai lần theo phương pháp đường vòng để cắt mà không cần biết thời lượng và không cần mã hóa lại.

  1. Đầu vào thứ hai có 4 giây bị cắt từ đầu.
  2. Các -ngắn nhất tùy chọn sử dụng thời lượng đầu vào ngắn nhất để xác định thời lượng của đầu ra. Điều này dẫn đến việc cắt 4 giây cuối cùng từ đầu vào đầu tiên để phù hợp với thời lượng của đầu vào thứ hai bị cắt ngắn.
  3. Bởi vì cả hai luồng đều cần thiết cho -ngắn nhất để hoạt động, chúng được chuyển sang một ffmpeg khác để xóa đầu vào thứ hai.
lá cờ in
Nó phải là `-map 0 -map -0:1` hoặc `-map 0:0`
LarryM avatar
lá cờ cn
Thao tác này đã cắt bốn giây đầu tiên khỏi tệp chứ không phải bốn giây cuối cùng.
llogan avatar
lá cờ jp
@LarryM Có một lỗi đánh máy như Gyan đã chỉ ra và lần này tôi thực sự đã kiểm tra đầu ra.
Điểm:2
lá cờ am

Bạn có thể dùng ffprobe điều đó nên đi kèm với ffmpeg để có được thời lượng.

dur=$(($(ffprobe -loglevel error -show_entries format=duration -of default=nk=1:nw=1 inputfilename | xargs printf %.0f)-4))
ffmpeg -t ${dur} -i tên tệp đầu vào -c sao chép tên tệp đầu ra

Dòng đầu tiên sử dụng ffprobe để có thời lượng trừ đi 4 giây, sau đó đặt nó vào một var có tên quá lâu.

tôi cũng đã sử dụng xargs làm tròn số vì đánh đập chỉ chấp nhận các số nguyên khi thực hiện các phép toán.

Bạn có thể dùng bc nếu bạn cần độ chính xác cao hơn.

dur=$(ffprobe -loglevel error -show_entries format=duration -of default=nk=1:nw=1 inputfilename)
dur=$(bc <<< ${dur}-4)
ffmpeg -t ${dur} -i tên tệp đầu vào -c sao chép tên tệp đầu ra
qwr avatar
lá cờ kr
qwr
cách giải quyết quá mức cần thiết
llogan avatar
lá cờ jp
Không cần `sed` vì thời lượng có thể được truy xuất trực tiếp chỉ với `ffprobe`. Xem [Làm cách nào để thêm hiệu ứng mờ dần 1 giây vào cuối video bằng ffmpeg?](https://askubuntu.com/a/1128909/) để biết cách tiếp cận tương tự. `-acodec copy -vcodec copy` có thể được rút ngắn thành `-c copy`.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.