Ffmpeg का उपयोग करके एक mp4 फ़ाइल के अंत से ऑफसेट कैसे सेट करें?


1

जब मेरे पास एक MP4 वीडियो फ़ाइल होती है जो 2 घंटे तक चलती है और शुरू से 30 सेकंड और अंत से 1 मिनट निकालना चाहती है, तो मैं उपयोग करता हूं ffmpeg इस तरह।

ffmpeg -ss 30 video.mp4 -c copy -t 1:58:30 output.mp4

यह बढ़िया काम करता है। लेकिन मुझे आउटपुट वीडियो की लंबाई की गणना करनी चाहिए। क्या वीडियो फ़ाइल के अंत से विशिष्ट समय काटने का विकल्प है?

मैं इस तरह लिखना चाहता हूं।

ffmpeg -ss 30 video.mp4 -c copy --offset-from-last 1:00 output.mp4

जवाबों:


2

Ffmpeg में ऐसा कोई विकल्प नहीं है।

आपको अवधि का उपयोग करके पार्स करना होगा ffprobe, फिर एक स्क्रिप्ट का उपयोग करके आवश्यक ऑफसेट की गणना करें। कुल अवधि पाने के लिए:

ffprobe -loglevel error input.mp4 \
-show_format -show_entries format=duration -of compact=p=0:nk=1

यह आउटपुट को दिखाता है s.msec। आप भी उपयोग कर सकते हैं -sexagesimal इसे प्रिंट करने का विकल्प HH:MM:SS.msec, लेकिन इससे आपके ऑफसेट की गणना थोड़ी कठिन हो जाती है।

ऐसा करने के लिए सरल बैश स्क्रिप्ट:

#!/bin/bash
input=/path/to/your/file.mp4
start="30"
offset="60"
duration="$(ffprobe -loglevel error "$input" -show_format -show_entries format=duration -of compact=p=0:nk=1)"
end=$(echo "$duration - $offset" | bc)
echo ffmpeg -ss "$start" -i "$input" -c copy -to "$end"

ध्यान दें कि आप चाहते हैं -to के बजाय -t। पूर्व निर्दिष्ट बिंदु तक धारा में कटौती करेगा, जबकि साथ -t, आप निर्दिष्ट की एक धारा के साथ समाप्त हो जाएगा लंबाई


0

कीफ्रेम के मुद्दे से अपव्यय हो सकता है और यह उपशीर्षक धाराओं के साथ काम नहीं करता है लेकिन यह अन्यथा मेरे लिए काम करता है।

ffmpeg -ss 30 -i in.mp4 -itsoffset -90 -i in.mp4 -c copy -map 1:a:0 -map 0 -shortest inter.mp4

और फिर

ffmpeg -i inter.mp4 -c copy -map 0 -map -0:0 final.mp4

-ss 30 शुरुआत ट्रिम है। -itsoffset -90 प्रारंभ + अंत ट्रिम है।

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