Aparar arquivo de áudio usando os horários de início e parada

12

Eu tenho um comando FFmpeg para cortar áudio:

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

O problema que tenho com este comando é que a opção -t requer uma duração (em segundos) de 01:43:46 . Quero cortar o áudio usando os horários de início / término, por exemplo, entre 01:43:46 e 00: 01: 45.02 .

Isso é possível?

    
por user8547 03.02.2015 / 08:21

2 respostas

22

O ffmpeg parece ter uma nova opção -to

       -to position (output)
       Stop writing the output at position.  position must be a time duration specification, see the Time
       duration section in the ffmpeg-utils(1) manual.

       -to and -t are mutually exclusive and -t has priority.

Exemplo de comando com dois formatos de hora

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

Isto deve criar uma cópia (arquivo-2.mkv) do arquivo.mkv da marca de 20 segundos para a marca de 40 segundos.

    
por 10.08.2016 / 07:59
1

Se você tem o PHP instalado, faça um script:

Conteúdo do 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;

?>

conteúdo do 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"

Uso:

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

Onde [startchop] e [stopchop] são registros de data e hora absolutos desde o início da faixa.

NB: Os scripts podem precisar de ajustes dependendo da versão da plataforma, etc ...

    
por 08.02.2015 / 03:17