प्रारंभ और स्टॉप समय का उपयोग करके ऑडियो फ़ाइल ट्रिम करें


34

मेरे पास ऑडियो ट्रिम करने के लिए एक FFmpeg कमांड है:

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

इस कमांड के साथ मुझे जो समस्या है वह यह है कि इस विकल्प के -tलिए 01:43:46 से एक अवधि (सेकंड में) की आवश्यकता है । मैं प्रारंभ / स्टॉप समय का उपयोग करके ऑडियो ट्रिम करना चाहता हूं, जैसे कि 01:43:46 और 00: 01: 45.02 के बीच

क्या यह संभव है?


1
तो आप प्रारंभ समय और अवधि के बजाय स्टार्ट और स्टॉप समय का उपयोग करके ऑडियो फ़ाइल का एक भाग निकालना चाहते हैं, क्या यह सही है?

1
@ नशा यही सही है। मैं पोस्ट को स्पष्ट करने के लिए संपादित करूँगा।
user8547

1
मैंने आपके प्रश्न को उसी के अनुसार प्रतिपादित किया है। वास्तव में ffmpegप्रारंभ समय और अवधि के अलावा कुछ और प्रदान नहीं करता है। और mplayerया तो नहीं है।

जवाबों:


45

ffmpeg एक नया विकल्प होता है करने लगता है -to में प्रलेखन :

-ऑटो पोजिशन ( इनपुट / आउटपुट ) आउटपुट
लिखना या इनपुट को पोजीशन में पढ़ना बंद करें । स्थिति एक समय अवधि विनिर्देश होनी चाहिए, (ffmpeg-utils) देखें ffmpeg-utils (1) मैनुअल में समय अवधि अनुभाग।

-t -t परस्पर अनन्य हैं और -t में प्राथमिकता है।

दो समय स्वरूपों के साथ नमूना आदेश

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

यह 20 सेकंड मार्क से 40 सेकंड मार्क तक file.mkv की एक कॉपी (फ़ाइल-2. एमकेवी) बनाना चाहिए।


2
टीएक्स, जो अच्छी तरह से काम करता है। मुझे लगता है कि यदि मैं copyऑडियो / वीडियो को सिंक से बाहर नहीं निकालता हूं, तो मैं -async 1इसे हटा देता हूं और जोड़ देता हूं और यह एक आकर्षण की तरह काम करता है। बेशक इसके लिए रीकोडिंग की आवश्यकता होती है, इसलिए एक सुधार एक ऐसा आदेश होगा copyजो सिंक मुद्दों के बिना, लेकिन इसके लिए अनुमति देगा ।
user8547

1
क्या कई अंतराल होना संभव है और वे एक साथ जुड़ जाएंगे? यानीffmpeg -i file.mp3 -ss 10 -to 11 -ss 20 -to 21 -ss 30 -to 31 ....
Avner बर्र

@AvnerBarr मुझे नहीं पता कि यह पूरी तरह से FFmpeg के साथ संभव है, लेकिन मुझे पता है कि यह Mencoder के साथ संभव है। यह -toविकल्प का उपयोग करके काम करता है :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

यदि आपके पास PHP स्थापित है, तो इसे एक स्क्रिप्ट बनाएं:

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;

?>

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"

उपयोग:

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

जहां [स्टार्टपॉप] और [स्टॉपचॉप] ट्रैक की शुरुआत से दोनों पूर्ण टाइमस्टैम्प हैं।

NB: स्क्रिप्ट (ओं) को प्लेटफ़ॉर्म संस्करण आदि के आधार पर ट्विकिंग की आवश्यकता हो सकती है ...


तो क्या कमांड निम्न उदाहरण की तरह दिखता है? Audiochop.sh input.mp3 00:01:30 00:01:50 output.mp3
user8547

हाँ, बिलकुल।
लीच

यह वास्तव में पूर्ण कमांड है: ./audiochop.sh input.mp3 00:01:30 00:01:50 output.mp3 मैं कमांड के सामने अवधि और स्लैश रखना भूल गया था, यही कारण है कि यह नहीं था काम कर रहे।
user8547

संयोग से, मैंने पाया कि यह php / bash स्क्रिप्ट mp4 वीडियो पर भी काम करता है, इसलिए मुझे लगता है कि यह किसी भी वीडियो प्रारूप के साथ काम करेगा।
user8547

1
यह आपके ffmpeg द्वारा जो भी प्रारूप का समर्थन करता है, उसके साथ काम करना चाहिए।
लीच
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.