Potong file audio menggunakan waktu mulai dan berhenti


34

Saya punya perintah FFmpeg untuk memotong audio:

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

Masalah yang saya miliki dengan perintah ini adalah bahwa opsi -tmembutuhkan durasi (dalam detik) dari 01:43:46 . Saya ingin memotong audio menggunakan waktu mulai / berhenti, misalnya antara 01:43:46 dan 00: 01: 45.02 .

Apakah ini mungkin?


1
Jadi, Anda ingin mengekstrak bagian file audio menggunakan waktu mulai dan berhenti, bukan waktu mulai dan durasi, apakah itu benar?

1
@Nasha Itu benar. Saya akan mengedit posting untuk membuatnya lebih jelas.
user8547

1
Saya telah mengubah pertanyaan Anda sesuai dengan itu. Memang ffmpegsepertinya tidak memberikan apa pun selain waktu mulai dan durasi. Dan mplayerjuga tidak.

Jawaban:


45

ffmpeg tampaknya memiliki opsi baru -untuk dalam dokumentasi :

-untuk posisi ( input / output )
Berhenti menulis output atau membaca input pada posisi . Posisi harus merupakan spesifikasi durasi waktu, lihat (ffmpeg-utils) bagian Durasi waktu dalam manual ffmpeg-utils (1).

-untuk dan -t saling eksklusif dan -t memiliki prioritas.

Perintah sampel dengan dua format waktu

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

Ini harus membuat salinan (file-2.mkv) dari file.mkv dari 20 detik hingga 40 detik.


2
Tx, itu bekerja dengan baik. Saya menemukan bahwa jika saya tidak menghapus copybagian audio / video tidak sinkron, jadi saya menghapusnya dan menambahkan -async 1dan itu berfungsi seperti pesona. Tentu saja itu memerlukan pengodean ulang, jadi perbaikan akan menjadi perintah yang memungkinkan copytetapi tanpa masalah sinkronisasi.
user8547

1
Apakah mungkin untuk memiliki beberapa interval dan mereka akan digabungkan bersama? yaituffmpeg -i file.mp3 -ss 10 -to 11 -ss 20 -to 21 -ss 30 -to 31 ....
Avner Barr

@AvnerBarr Saya tidak tahu apakah ini hanya mungkin dengan FFmpeg, tapi saya tahu itu mungkin dengan Mencoder. Ini berfungsi, menggunakan -toopsi: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

Jika Anda menginstal PHP, buat skrip:

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

?>

konten 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"

Pemakaian:

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

Di mana [startchop] dan [stopchop] adalah cap waktu absolut dari awal trek.

NB: Script mungkin perlu diubah tergantung pada versi platform dll ...


Jadi apakah perintahnya terlihat seperti contoh berikut? audiochop.sh input.mp3 00:01:30 00:01:50 output.mp3
user8547

Ya persis seperti itu.
Litch

Ini sebenarnya adalah perintah lengkap: ./audiochop.sh input.mp3 00:01:30 00:01:50 output.mp3 Saya lupa meletakkan tanda titik dan memangkas di depan perintah, oleh karena itu bukan kerja.
user8547

Kebetulan, saya menemukan bahwa skrip php / bash ini juga berfungsi di video mp4, jadi saya menganggap itu akan berfungsi dengan format video apa pun.
user8547

1
Ini harus bekerja dengan format apa pun yang didukung ffmpeg Anda.
Litch
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.