बिना रीकोडिंग के किसी वीडियो के फ्रेमरेट को कैसे बदला जाए


14

मैं एक MP4 वीडियो के framerate को बदलने की कोशिश कर रहा हूं (यह एक 120fps GoPro वीडियो है, मैं इसे धीमी गति के प्रभाव के लिए 30fps पर वापस खेलना चाहता हूं)।

मैं इसके लिए avconv का उपयोग कर रहा हूं:

avconv -i SourceMovie.mp4 -vf setpts=4.0*PTS -r 30 DestMovie.mp4

यह तकनीकी रूप से काम करता है, लेकिन यह फिल्म को रीकोड करता है। धीमा होने के अलावा, यह स्पष्ट रूप से एक गुणवत्ता का मुद्दा है। तकनीकी रूप से वीडियो के हेडर में सिर्फ एफपीएस सेट करने का एक तरीका होना चाहिए, मैं इसे कैसे बदल सकता हूं? (एवोकन के अलावा कोई टूल भी काम करेगा।)

जवाबों:


15

MP4Box कर सकते हैं।

आदेश

MP4Box -add SourceMovie.mp4#video -raw 1 -new test

फ़ाइलें बनाता है testऔर test_track1.h264। अब आप एक mp4 फाइल बना सकते हैं, जिसमें से कोई भी समर्थित फ्रैमरेट आपको पसंद आएगा (इस उदाहरण में 30):

MP4Box -add test_track1.h264:fps=30 -new DestMovie.mp4

MP4Box gpacपैकेज का हिस्सा है , इसलिए सुनिश्चित करें कि यह स्थापित है।


6
यह वास्तव में सीधा नहीं है, लेकिन मुझे मिल गया - आपको इसे दो चरणों में करने की आवश्यकता है। पहले वीडियो स्ट्रीम को अलग से कच्चे ( MP4Box -add source.mp4#video -raw 1 -new test) के रूप में निकालें और फिर इसे फिर से MP4 ( MP4Box -add test_track1.h264:fps=30 -new dest.mp4) के रूप में सहेजें । आप वहां (#audio के माध्यम से) एक ऑडियो ट्रैक भी जोड़ सकते हैं।
EboMike 3

-singleपहले कमांड के लिए विकल्प का उपयोग करना बेहतर है । दो के बजाय MP4Box -single 1 -raw 1 SourceMovie.mp4केवल एक फ़ाइल बनाता है SourceMovie_track1.h264
डायवर्सनोक

6

वीडियो (हैडर) के हेडर में फ्रैमरेट बदलने से विडियोस्ट्रीम (या ऑडीओस्ट्रीम) पर कोई प्रभाव नहीं पड़ता है। रेनकोडिंग एकमात्र विकल्प है।

वीडियोस्ट्रीम में टाइमस्टैम्प होते हैं और अधिकांश वीडियो में फ़्रेम एक-दूसरे के लिए परस्पर निर्भरता के कारण परस्पर निर्भर होते हैं। कुछ खिलाड़ी वीडियो को गति दे सकते हैं और धीमा कर सकते हैं लेकिन एम्बेडेड कमांड या कुछ और के द्वारा नहीं। जब कोई कंटेनरकैम ऐसा करने के लिए कहता है तो कोई भी खिलाड़ी मक्खी पर फ्रैमरेट नहीं बदल सकता है। वीडिओफाइल विनिर्देश से बाहर हो जाएगा (अर्थात मानकों का पालन नहीं करना) और 99.9% खिलाड़ी इसका अनुपालन करने से इनकार कर देंगे। बिना पुनरावृत्ति के आप जो चाहते हैं वह करना काफी असंभव है। बेशक आप अपने संपादन में अंतिम चरण तक पुनरावृत्ति के साथ प्रतीक्षा कर सकते हैं।


1
धन्यवाद थॉम! बेवकूफ सवाल हालांकि - क्यों? क्या प्रत्येक फ्रेम में टाइमस्टैम्प है जो खिलाड़ी को एक निश्चित प्लेबैक गति को लागू करने के लिए मजबूर करता है? मुझे ठीक वही फ्रेम चाहिए, मैं चाहता हूं कि वे अलग रेट पर वापस खेले।
EboMike

2
हाय माइक, आपका कोई सवाल बेवकूफ़ नहीं है, खुलकर आपके सोचने का तरीका काफी चालाक है। मुझे आपका सोचने का तरीका पसंद है। मैंने अपने जवाब में अधिक जानकारी जोड़ी क्योंकि यह कमेंटबॉक्स में डालने के लिए बहुत लंबा था।
18

धन्यवाद! यह काफी जानकारीपूर्ण है। अब के रूप में recoding के लिए - क्या सबसे अच्छा तरीका है कि avconv की तरह कुछ के साथ? मैंने ऊपर कमांड लाइन का उपयोग किया था, लेकिन इससे भयानक गुणवत्ता पैदा हुई - मैं लगभग हर मैक्रोब्लॉक को देख सकता था।
EboMike

1
वीडियो स्ट्रीम में टाइमस्टैम्प कंटेनर में संग्रहीत किए जाते हैं, कच्ची एच .264 बिटस्ट्रीम ही नहीं, मुझे लगता है। जब तक आप सिर्फ टाइमिंग बदलना चाहते हैं, लेकिन ऑर्डर नहीं, जब फ्रेम प्रदर्शित होता है, तो आपको ट्रांसकोड करने की जरूरत नहीं है, बस रिमूव करना चाहिए। (और अगर आप xcode करते हैं, तो तेज हार्डवेयर के साथ-साथ आप SAME बिटरेट पर अधिक गुणवत्ता प्राप्त करने के लिए धीमी या veryslow का उपयोग करेंगे, बजाय समस्या को अधिक बिट्स फेंकने के। और उपयोग -crf 18 या कुछ और, ABR नहीं
पीटर कॉर्ड्स

1
मैं यह पता नहीं लगा सकता कि ffmpeg कैसे प्राप्त करने के लिए एक अलग फ्रैमरेट का उत्पादन किया जाए। ऐसा लगता है कि mkvmerge / mp4box आवश्यक है, जब तक कि आप कच्चे .264 बिटस्ट्रीम आउटपुट के लिए ffmpeg प्राप्त नहीं कर सकते हैं, और तब h.264 डेमूक्सर के लिए एफपीएस विकल्प का उपयोग कर सकते हैं (जो -यह पूर्ण दस्तावेज हैं, क्योंकि बिटस्ट्रीम का समय नहीं है। जानकारी, बस आदेश।)
पीटर कॉर्ड्स

3

इस घटना में कि आपका प्रमुख इरादा इसे धीमी गति से खेलना है, और फ़ाइल को MP4 के रूप में नहीं रखना है, आप इसे Matroska कंटेनर में रीमूक्स करने के लिए MKVmerge GUI टूल का उपयोग कर सकते हैं जो आसानी से फ्रैमरेट को बदल सकता है। रीमेकिंग की तुलना में रिमूक्सिंग बहुत बेहतर है, क्योंकि यह केवल मेटाडेटा को बदलता है, और स्वयं स्ट्रीम नहीं।

सबसे पहले आप पैकेज को स्थापित करें

sudo apt-get install mkvtoolnix-gui

फिर आप MKVmerge GUI शुरू करते हैं। आप इस तरह एक खिड़की के साथ सामना किया जाएगा

mkvmerge gui १

बस ऐड बटन दबाएं और अपनी फ़ाइल का चयन करें या यहां तक ​​कि फ़ाइल को "इनपुट फ़ाइलों" क्षेत्र में खींचें। इस बिंदु पर आपको अपने वीडियो में वीडियो स्ट्रीम का चयन करने में सक्षम होना चाहिए। आप अन्य स्ट्रीम भी हटा सकते हैं, क्योंकि वे किसी भी तरह से प्राप्त करेंगे।

आपके द्वारा चुने जाने के बाद आपको नीचे के टैब सक्रिय होते हुए दिखाई देने चाहिए:

यहां छवि विवरण दर्ज करें

"विशिष्ट कार्यों को प्रारूपित करें" में बदलें

यहां छवि विवरण दर्ज करें

आप देख सकते हैं कि एक फ़ील्ड "एफपीएस" है, जहां आप प्रति सेकंड फ़्रेम के मूल्य को इनपुट कर सकते हैं। ऐसा लग रहा था कि आप चार बार चीजों को धीमा करने की योजना बना रहे हैं, इसलिए प्रति सेकंड लगभग 7 फ्रेम आपका लक्ष्य होगा। आप "स्ट्रेच बाय" विकल्प का भी उपयोग कर सकते हैं।

उसके बाद आप बस आउटपुट फाइल का नाम बदल सकते हैं (यदि आप चाहते हैं) और "स्टार्ट मक्सिंग" दबाएं।

प्रोग्राम चलेगा और आपके पास आपकी फ़ाइल होनी चाहिए।


2

मैं अपनी 120 एफपीएस फिल्मों को 30 एफपीएस तक धीमा करना चाहता था। मैंने स्क्रिप्ट बनाई जो ध्वनि टेम्पो को बदलकर और सीधे एमपी 4 कंटेनर में एफपीएस को संशोधित करके करता है। निम्नलिखित उपकरण आवश्यक हैं:

  1. ऑडियो स्ट्रीम परिवर्तित करने के लिए avconv
  2. ऑडियो टेम्पो धीमा करने के लिए sondstretch
  3. Fp को बदलने के लिए MP4Box पाने के लिए gpac

रूपांतरण के लिए प्रयुक्त स्क्रिप्ट यहाँ है:

#!/bin/bash
#########################################
# Lossless slow down from 120 to 30 FPS #
#                                       #
# Use:                                  #
#                                       #
#   slow.bash <mp4_file>                #
#                                       #
#                           #-= OSi =-# #
#########################################


# Prepare basic variables
IN_FILE="$1"
NAME=$(echo "${IN_FILE}" | sed 's/\.[^.]*//')


# Clean up before start
rm -f "${NAME}.ac3" "${NAME}.wav" "${NAME}_.wav" "${NAME}" "${NAME}_track1.h264" "${NAME}_slow.mp4"


# Slow down sound
avconv -i "${IN_FILE}" -vn -acodec pcm_s16le "${NAME}_.wav"
soundstretch "${NAME}_.wav" "${NAME}.wav" -tempo=-75
avconv -i "${NAME}.wav" -vn -codec:a ac3_fixed -b:a 448k "${NAME}.ac3"


# Change video frame rate and multiplex with slowed sound
MP4Box -add "${IN_FILE}#video" -raw 1 -new "${NAME}"
MP4Box -add "${NAME}_track1.h264:fps=30" -add "${NAME}.ac3" -new "${NAME}_slow.mp4"


# Clean up when we are done
rm -f "${NAME}.ac3" "${NAME}.wav" "${NAME}_.wav" "${NAME}" "${NAME}_track1.h264"

यह स्क्रिप्ट MP4 की प्रतिलिपि _slow पोस्टफिक्स के साथ बनाता है।

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