web-dev-qa-db-fra.com

Découper un fichier audio en utilisant les heures de début et de fin

J'ai une commande FFmpeg pour couper l'audio:

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

Le problème que j'ai avec cette commande est que l'option -t nécessite une durée (en secondes) de 1:43:46. Je veux couper l'audio en utilisant les heures de début/fin, par ex. entre 1:43:46 et : 01: 45.02.

Est-ce possible?

38
user8547

ffmpeg semble avoir une nouvelle option - à dans la documentation :

- à position ( entrée/ sortie)
Arrêtez d'écrire la sortie ou de lire l'entrée à position. position doit être une spécification de durée, voir (ffmpeg-utils) la section Durée dans le manuel ffmpeg-utils (1).

-to et -t s'excluent mutuellement et -t est prioritaire.

Exemple de commande avec deux formats d'heure

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

Cela devrait créer une copie (fichier-2.mkv) de file.mkv de la marque de 20 secondes à la marque de 40 secondes.

57
Miati

Si vous avez PHP installé, faites-en un script:

Contenu de 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;

?>

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

Usage:

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

Où [startchop] et [stopchop] sont tous deux des horodatages absolus depuis le début de la piste.

NB: Les scripts peuvent nécessiter des ajustements en fonction de la version de la plate-forme, etc.

0
Litch