मेरे पास कई 100 वीडियो हैं जिन्हें मुझे पहले 20 सेकंड और अंतिम 30 सेकंड निकालने की आवश्यकता है।
एक बार में ऐसा करने के लिए स्पष्ट रूप से व्यावहारिक नहीं है। क्या मैं इसे किसी भी तरह से स्वचालित कर सकता हूं, शायद ओएस एक्स ऑटोमेटर स्क्रिप्ट में?
मेरे पास कई 100 वीडियो हैं जिन्हें मुझे पहले 20 सेकंड और अंतिम 30 सेकंड निकालने की आवश्यकता है।
एक बार में ऐसा करने के लिए स्पष्ट रूप से व्यावहारिक नहीं है। क्या मैं इसे किसी भी तरह से स्वचालित कर सकता हूं, शायद ओएस एक्स ऑटोमेटर स्क्रिप्ट में?
जवाबों:
आप मानते हैं कि * निक्स और बैश चलाते हैं, एक ffmpeg स्थिर बिल्ड डाउनलोड करें आपके ऑपरेटिंग सिस्टम के लिए। फिर, ले लो ffmpeg
फ़ाइल और इसे कॉपी करें /usr/bin/ffmpeg
।
sudo cp ~/Downloads/ffmpeg/ffmpeg /usr/bin/ffmpeg
sudo chmod +x /usr/bin/ffmpeg
अब आप इस शेल स्क्रिप्ट को बैश में चला सकते हैं - इसे उस फ़ोल्डर में कॉपी-पेस्ट करने के लिए पर्याप्त होना चाहिए जहां वीडियो हैं।
for f in *.mp4; do
duration=$(ffmpeg -i "$f" 2>&1 | grep "Duration"| cut -d ' ' -f 4 | sed s/,//)
length=$(echo "$duration" | awk '{ split($1, A, ":"); print 3600*A[1] + 60*A[2] + A[3] }' )
trim_start=20
trim_end=$(echo "$length" - 30 - "$trim_start" | bc)
echo ffmpeg -ss "$trim_start" -i "$f" -c copy -map 0 -t "$trim_end" "${f%.mp4}-trimmed.mp4"
done
ध्यान दें: हटाए echo
बयान वास्तव में आदेशों को पूरा करने के लिए। सटीकता के लिए पहले उत्पन्न कमांड का परीक्षण करना अच्छा होगा। यह कुछ ऐसा उत्पन्न करेगा:
ffmpeg -ss 20 -i input.mp4 -c copy -map 0 -t 161.58 input-trimmed.mp4
स्क्रिप्ट क्या करेगी, इनपुट के कुल चलने के समय की गणना करें, प्रारंभ समय और उस समय को घटाएं जिसे आप अंत से हटाना चाहते हैं, और फिर ffmpeg को अपने निर्दिष्ट प्रारंभ समय से नई गणना के अंत तक एक स्ट्रीम-कॉपी करने के लिए कहें। पहर। यह वीडियो और ऑडियो गुणवत्ता को किसी भी तरह से नुकसान नहीं पहुंचाएगा। यह बड़ी फ़ाइलों के लिए कम से कम कुछ सेकंड के भीतर चलना चाहिए।
स्पष्टीकरण देना, -ss
प्रारंभ समय और सेट करता है -c copy -map 0
सभी वीडियो, ऑडियो और उपशीर्षक धाराओं को मूल से कट संस्करण में कॉपी करेगा। -t
अंत समय निर्धारित करता है। देख एफएफएमपी विकी पर यह लेख मांगने के बारे में अधिक जानकारी के लिए।
यदि आप कमांड लाइन के साथ सहज हैं, तो मैं सुझाऊंगा FFmpeg
ffmpeg -i file.mp4 -vcodec copy -acodec copy -ss 00:00:20.000 -t 00:00:30.000 output.mp4
एक अन्य विकल्प एक छोटा शेल स्क्रिप्ट है जो आपकी फ़ाइलों के माध्यम से लूप करता है और उनमें से प्रत्येक के लिए एक सिंगल-फाइल FFmpeg जॉब चलाता है। फिर मैंने कभी मैक शेल का इस्तेमाल नहीं किया :)
for f in *.mp4; do ffmpeg -i $f -vcodec copy -acodec copy -ss 00:00:20.000 -t 00:00:30.000 output/$f; done
उम्मीद है कि यह थोड़ा मदद करता है।
%d
केवल छवियों के लिए समर्थित है (अधिक विशेष रूप से image2 डिमॉक्सर )।