केवल लिनक्स कमांड-लाइन टूल जो मैंने अभी तक पाया है, जो सटीक फ्रेम (या फ्रेम सटीकता के साथ) में कटौती कर सकता है, melt
( sudo apt-get install melt
) है।
मान inputvid.mp4
लीजिए कि आपके पास पहला है - इसकी एन्कोडिंग सेटिंग को चेक करें ffmpeg
(यहां, मैं कहता हूं कि मैं इसे फिर से एन्कोड करना चाहता हूं -f mp4
, लेकिन जैसे-जैसे फ़ाइल /dev/null
को आउटपुट खारिज कर दिया जाता है; मुझे स्ट्रीडर पुनर्निर्देशित होता है, इसलिए मैं इसके माध्यम से संक्षिप्त कर सकता हूं - बीच में ध्यान दें , कमांड संकेत देता है, और आपको y
ENTER के साथ उत्तर देना चाहिए , इसलिए प्रक्रिया उपयोगी हो जाती है और उपयोगी जानकारी को डंप कर देती है, यह Ubuntu 14 पर ffmpeg 3.3.3 के साथ है):
ffmpeg -i inputvid.mp4 -f mp4 /dev/null 2>&1 | grep 'Stream\|encoder'
Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p(tv, bt709), 640x360 [SAR 1:1 DAR 16:9], 389 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc (default)
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 95 kb/s (default)
y
File '/dev/null' already exists. Overwrite ? [y/N] Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
Stream #0:1 -> #0:1 (aac (native) -> aac (native))
encoder : Lavf57.71.100
Stream #0:0(und): Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p(progressive), 640x360 [SAR 1:1 DAR 16:9], q=-1--1, 23.98 fps, 24k tbn, 23.98 tbc (default)
encoder : Lavc57.89.100 libx264
Stream #0:1(und): Audio: aac (LC) ([64][0][0][0] / 0x0040), 44100 Hz, stereo, fltp, 128 kb/s (default)
encoder : Lavc57.89.100 aac
ठीक है, इसलिए हम इस वीडियो के लिए ffmpeg
चुनिंदा libx264
और aac
एनकोडर देख सकते हैं ; तब हम इसमें प्रवेश कर सकते हैं melt
:
melt inputvid.mp4 in=7235 out=7349 -consumer avformat:cut.mp4 acodec=aac vcodec=libx264
.... और melt
एक नई फ़ाइल में 7235 और 7349 फ्रेम के बीच के टुकड़े के साथ कट जाएगा cut.mp4
। फिर जांच करने के लिए कि क्या cut.mp4
सही ढंग से लूप है, melt
इसे दो बार वापस खेलने के लिए फिर से उपयोग करें - और इसे एसडीएल विंडो में खेलें:
melt cut.mp4 cut.mp4 -consumer sdl
... और यहाँ ffmpeg
इस फ़ाइल के लिए क्या देखता है:
ffmpeg -i cut.mp4 -f mp4 /dev/null 2>&1 | grep 'Stream\|encoder' encoder : Lavf54.20.4
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 640x360 [SAR 1:1 DAR 16:9], 526 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc (default)
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 182 kb/s (default)
y
File '/dev/null' already exists. Overwrite ? [y/N] Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
Stream #0:1 -> #0:1 (aac (native) -> aac (native))
encoder : Lavf57.71.100
Stream #0:0(und): Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 640x360 [SAR 1:1 DAR 16:9], q=-1--1, 23.98 fps, 24k tbn, 23.98 tbc (default)
encoder : Lavc57.89.100 libx264
Stream #0:1(und): Audio: aac (LC) ([64][0][0][0] / 0x0040), 48000 Hz, stereo, fltp, 128 kb/s (default)
encoder : Lavc57.89.100 aac
389 kb / s से 526 kb / s तक परिवर्तित वीडियो बिटरेट cut.mp4
को inputvid.mp4
छोड़कर वीडियो एन्कोडिंग सेटिंग्स समान प्रतीत होती हैं , और ऑडियो एन्कोडिंग सेटिंग्स भी लगभग समान हैं, सिवाय इसके कि नमूना दर 44100 से बदलकर 48000 Hz हो गई है; हालांकि इसके साथ विनियमित किया जा सकता है:
melt inputvid.mp4 in=7235 out=7349 -consumer avformat:cut.mp4 acodec=aac ar=44100 ab=95k vcodec=libx264 vb=389k
... हालाँकि, इसके साथ भी, मेरे लिए अंतिम वीडियो बिटरेट 337 kb / s तक समाप्त हो गया है। फिर भी, कटौती लूप ठीक है (और इसमें ऑडियो भी शामिल है) जब एक लूप में खेला जाता है, तो मुझे लगता है कि यह वास्तव में फ्रेम-सटीक है ...