Cắt tập tin âm thanh bằng cách sử dụng thời gian bắt đầu và dừng


34

Tôi có một lệnh FFmpeg để cắt âm thanh:

ffmpeg -ss 01:43:46 -t 00:00:44.30 -i input.mp3 output.mp3

Vấn đề tôi gặp phải với lệnh này là tùy chọn đó -tyêu cầu thời lượng (tính bằng giây) từ 01:43:46 . Tôi muốn cắt bớt âm thanh bằng cách sử dụng thời gian bắt đầu / dừng, ví dụ: trong khoảng thời gian từ 01:43:46 đến 00: 01: 45.02 .

Điều này có thể không?


1
Vì vậy, bạn muốn trích xuất một phần của tệp âm thanh bằng cách sử dụng thời gian bắt đầu và dừng thay vì thời gian bắt đầu và thời lượng, điều đó có đúng không?

1
@Nasha Đúng vậy. Tôi sẽ chỉnh sửa bài viết để làm cho nó rõ ràng hơn.
dùng8547

1
Tôi đã chia sẻ lại câu hỏi của bạn cho phù hợp. Quả thực ffmpegdường như không cung cấp bất cứ điều gì khác ngoài thời gian bắt đầu và thời lượng. Và mplayercũng không.

Câu trả lời:


45

ffmpeg dường như có một tùy chọn mới - trong tài liệu :

-đến vị trí ( đầu vào / đầu ra )
Dừng ghi đầu ra hoặc đọc đầu vào tại vị trí . vị trí phải là một đặc tả thời lượng thời gian, xem (ffmpeg-utils) phần Thời lượng thời gian trong hướng dẫn ffmpeg-utils (1).

-to và -t là loại trừ lẫn nhau và -t được ưu tiên.

Lệnh mẫu với hai định dạng thời gian

ffmpeg -i file.mkv -ss 20 -to 40 -c copy file-2.mkv
ffmpeg -i file.mkv -ss 00:00:20 -to 00:00:40 -c copy file-2.mkv

Điều này sẽ tạo một bản sao (file-2.mkv) của file.mkv từ mốc 20 giây đến 40 giây.


2
Tx, hoạt động độc đáo. Tôi thấy rằng nếu tôi không xóa copyphần âm thanh / video không đồng bộ, vì vậy tôi xóa phần đó và thêm -async 1và nó hoạt động như một nét quyến rũ. Tất nhiên, nó đòi hỏi phải mã hóa lại, vì vậy một cải tiến sẽ là một lệnh cho phép copynhưng không có vấn đề đồng bộ hóa.
dùng8547

1
Có thể có nhiều khoảng thời gian và chúng sẽ được nối với nhau? tức làffmpeg -i file.mp3 -ss 10 -to 11 -ss 20 -to 21 -ss 30 -to 31 ....
Avner Barr

@AvnerBarr Tôi không biết nếu điều này chỉ có thể với FFmpeg, nhưng tôi biết điều đó là có thể với Mencoder. Điều này hoạt động, sử dụng -totùy chọn:ffmpeg -i mmm.mp4 -ss 00:04:04 -to 00:04:35 -c copy output1.mp4 && ffmpeg -i mmm.mp4 -ss 00:05:47 -to 00:06:05 -c copy output2.mp4 && mencoder -ovc copy -oac mp3lame -idx output1.mp4 output2.mp4 -o complete.mp4
user8547

1

Nếu bạn đã cài đặt PHP, hãy tạo tập lệnh:

Nội dung TimeDiff.php:

<?php
// Create datetime objcects
$dt1 = new DateTime($argv[1]);
$dt2 = new DateTime($argv[2]);

// Conver difference to seconds
$dt3 = $dt2->format('U') - $dt1->format('U');

// echo $dt3."\n";
$h = (int)($dt3 / 3600);
$dt3 %= 3600;
$m = (int)($dt3 / 60);
$dt3 %= 60;
$s = $dt3;

// Dump as H:M:S
echo $h . ":" . $m . ":" . $s;

?>

nội dung audiochop.sh:

#!/bin/bash
INFILE=$1
START=$2
STOP=$3
OUTFILE=$4

OFFSET=`php TimeDiff.php "$START" "$STOP"`

echo "Disecting $INFILE starting from $START to $STOP (duration $OFFSET)"
ffmpeg -ss "$START" -t "$OFFSET" -i "$INFILE" "$OUTFILE"

Sử dụng:

./audiochop.sh [input.mp3] [startchop] [stopchop] [output.mp3]

Trong đó [startchop] và [stopchop] đều là dấu thời gian tuyệt đối từ đầu bản nhạc.

NB: Tập lệnh có thể cần điều chỉnh tùy thuộc vào phiên bản nền tảng, v.v ...


Vì vậy, lệnh trông giống như ví dụ sau đây? audiochop.sh input.mp3 00:01:30 00:01:50 output.mp3
user8547

Vâng, chính xác đó.
Litch

Đây thực sự là lệnh đầy đủ: ./audiochop.sh input.mp3 00:01:30 00:01:50 output.mp3 Tôi đã quên đặt dấu chấm và gạch chéo trước lệnh, đó là lý do tại sao nó không phải là đang làm việc.
dùng8547

Tình cờ, tôi thấy rằng tập lệnh php / bash này cũng hoạt động trên các video mp4, vì vậy tôi cho rằng nó sẽ hoạt động với bất kỳ định dạng video nào.
dùng8547

1
Nó nên hoạt động với bất kỳ định dạng nào mà ffmpeg của bạn hỗ trợ.
Litch
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.