Başlangıç ​​ve bitiş zamanlarını kullanarak ses dosyasını kırpın


34

Sesi kesmek için bir FFmpeg komutum var:

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

Bu komutta yaşadığım sorun, seçeneğin 01:43:46-t arasında bir süre (saniye olarak) gerektirmesidir . Başlatma / durdurma zamanlarını kullanarak sesi kısaltmak istiyorum, örneğin 01:43:46 ve 00: 01: 45.02 kesmek istiyorum .

Mümkün mü?


1
Yani, bir ses dosyasının bir bölümünü başlangıç ​​zamanı ve bir süre yerine başlangıç ​​ve bitiş zamanlarını kullanarak çıkarmak istiyorsunuz, doğru mu?

1
@ Nasha Bu doğru. Bunu daha net hale getirmek için gönderiyi düzenleyeceğim.
user8547

1
Sorunu buna göre düzelttim. Nitekim ffmpeg, bir başlama zamanından ve süresinden başka bir şey sağlamıyor gibi görünmektedir. Ve mplayerikisi de değil.

Yanıtlar:


45

ffmpeg yeni bir seçenek var gibi görünüyor Yapılır içinde belgeler :

-to pozisyonuna ( giriş / çıkış ) Çıkışı
yazmayı veya girişi pozisyonda okumayı bırakın . konum bir zaman süresi belirtimi olmalıdır , ffmpeg-utils (1) kılavuzundaki (ffmpeg-utils) Zaman süresi bölümüne bakın.

-to ve -t birbirini dışlayan ve önceliklidir.

İki zaman formatı ile örnek komut

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

Bu, 20 saniye işaretinden 40 saniye işaretine bir file.mkv dosyası (dosya-2.mkv) oluşturmalıdır.


2
Tx, bu güzel çalışıyor. copySes / videonun senkronize olmadığı kısmı çıkarmazsam, bunu kaldırıp eklerim -async 1ve bir cazibe işlevi görürüm. Elbette yeniden kodlama gerektiriyor, bu yüzden bir iyileştirme copy, senkronizasyon sorunları için ancak bunu gerektirmeyen bir komut olacaktır .
user8547

1
Birden fazla aralık olması mümkün mü ve bunlar bir araya getirilecek mi? yaniffmpeg -i file.mp3 -ss 10 -to 11 -ss 20 -to 21 -ss 30 -to 31 ....
Avner Barr

@AvnerBarr Bunun yalnızca FFmpeg ile mümkün olup olmadığını bilmiyorum, ancak Mencoder ile mümkün olduğunu biliyorum. Bu, -toseçeneği kullanarak çalışır :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

Eğer PHP kurmuşsa, bir script hazırlayın:

TimeDiff.php içeriği:

<?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;

?>

audiochop.sh içerikleri:

#!/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"

Kullanımı:

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

[Startchop] ve [stopchop] öğelerinin başlangıçtan itibaren mutlak zaman damgaları olduğu durumlarda.

Not: Script (ler) platform sürümüne bağlı olarak ince ayar gerekebilir ...


Öyleyse komut aşağıdaki örneğe benziyor mu? audiochop.sh input.mp3 00:01:30 00:01:50 output.mp3
user8547

Evet, aynen öyle.
Litch

Bu aslında tam komut: ./audiochop.sh input.mp3 00:01:30 00:01:50 output.mp3 Dönemi bırakmayı ve komutun önüne eğmeyi unuttum, bu yüzden bu değildi. Çalışma.
user8547

Bu arada, bu php / bash betiğinin mp4 videolarında da çalıştığını buldum, bu yüzden herhangi bir video formatıyla çalışacağını varsayıyorum.
user8547

1
Ffmpeg'in desteklediği formatta çalışması gerekir.
Litch
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.