सारांश
H.264 वीडियो में वास्तव में उच्च फ्रेम दर है जो वीडियो की अवधि के लिए लागू करने के लिए स्केलिंग कारक की आवश्यकता होती है जिसे मैं निकालने की कोशिश कर रहा हूं (900x निचला)।
बॉडी
मैं एक फिल्म से क्लिप निकालने की कोशिश कर रहा हूं जो मेरे पास MP4 प्रारूप में है ( हैंडब्रेक का उपयोग करके बनाई गई )। Mencoder और VLC की कोशिश करने के बाद, मैंने FFmpeg को एक शॉट देने का फैसला किया क्योंकि यह कोडेक्स की नकल करने के बाद कम से कम परेशानी वाला था। यही कारण है कि, mencoder और VLC की तुलना में, परिणामस्वरूप फ़ाइल अभी भी QuickTime में खेलने योग्य थी (मैं पेरियन के बारे में जानता हूं, आदि, मैं बस यह जानने की कोशिश कर रहा हूं कि यह सब कैसे काम करता है)।
वैसे भी, मेरी आज्ञा इस प्रकार थी:
ffmpeg -ss 01:15:51 -t 00:05:59 -i outofsight.mp4 \
-acodec copy -vcodec copy clip.mp4
प्रतिलिपि के दौरान, निम्नलिखित आता है:
Seems stream 0 codec frame rate differs from container frame rate: 45000.00 (45000/1) -> 25.00 (25/1)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from outofsight.mp4':
Duration: 01:57:42.10, start: 0.000000, bitrate: 830 kb/s
Stream #0.0(und): Video: h264, yuv420p, 720x384, 25 tbr, 22500 tbn, 45k tbc
Stream #0.1(eng): Audio: aac, 48000 Hz, stereo, s16
Output #0, mp4, to 'out.mp4':
Stream #0.0(und): Video: libx264, yuv420p, 720x384, q=2-31, 90k tbn, 22500 tbc
Stream #0.1(eng): Audio: libfaac, 48000 Hz, stereo, s16
Stream mapping:
Stream #0.0 -> #0.0
Stream #0.1 -> #0.1
Press [q] to stop encoding
frame= 2591 fps=2349 q=-1.0 size= 8144kB time=101.60 bitrate= 656.7kbits/s
…
5:59 अवधि क्लिप के बजाय, मुझे फिल्म के बाकी हिस्से मिलते हैं। तो, यह परीक्षण करने के लिए, मैं ffmpeg कमांड के साथ भाग गया -t 00:00:01
। मुझे जो मिला वह ठीक 15:00 मिनट की क्लिप थी। इसलिए मैंने कुछ ब्लैक बॉक्स इंजीनियरिंग की और अपना -t
विकल्प देने का फैसला किया , जिसमें यह दर्ज करने के लिए क्या मूल्य दिया गया कि 1 सेकंड की व्याख्या 900 s के रूप में की गई। मेरी इच्छित 359 क्लिप के लिए, मैंने 0.399 s की गणना की और इसलिए मेरा ffmpeg कमांड बन गया:
ffmpeg -ss 01:15.51 -t 00:00:00.399 -i outofsight.mp4 \
-acodec copy -vcodec copy clip.mp4
यह काम करता है, लेकिन मुझे पता नहीं है कि अवधि को 900 से कम क्यों बढ़ाया गया है। आगे की जांच करते हुए, प्रत्येक ffmpeg रन में लाइन है:
Seems stream 0 codec frame rate differs from container frame rate: 45000.00 (45000/1) -> 25.00 (25/1)
45000/25 = 1800. कहीं न कहीं एक रिश्ता होना चाहिए। किसी भी तरह, अस्पष्ट रूप से उच्च फ्रेम दर समय के साथ समस्या पैदा कर रहा है। फ्रेम दर इतनी अधिक कैसे है? इसके बारे में सबसे अच्छी बात यह है कि परिणामी क्लिप .mp4 में ठीक वैसी ही विशेषता है (कॉपी किए गए वीडियो कोडेक के कारण), और इससे आगे की क्लिप लेने के लिए -t
अवधि विकल्प के लिए समान स्केलिंग की आवश्यकता होती है। इसलिए, मैंने इसे किसी भी व्यक्ति के लिए उपलब्ध कराया है जो इसे जांचना चाहता है।
परिशिष्ट
मेरे सिस्टम पर ffmpeg के लिए प्रस्तावना (MacPorts ffmpeg पोर्ट का उपयोग करके निर्मित):
FFmpeg version 0.5, Copyright (c) 2000-2009 Fabrice Bellard, et al.
configuration: --prefix=/opt/local --disable-vhook --enable-gpl --enable-postproc --enable-swscale --enable-avfilter --enable-avfilter-lavf --enable-libmp3lame --enable-libvorbis --enable-libtheora --enable-libdirac --enable-libschroedinger --enable-libfaac --enable-libfaad --enable-libxvid --enable-libx264 --mandir=/opt/local/share/man --enable-shared --enable-pthreads --cc=/usr/bin/gcc-4.2 --arch=x86_64
libavutil 49.15. 0 / 49.15. 0
libavcodec 52.20. 0 / 52.20. 0
libavformat 52.31. 0 / 52.31. 0
libavdevice 52. 1. 0 / 52. 1. 0
libavfilter 1. 4. 0 / 1. 4. 0
libswscale 1. 7. 1 / 1. 7. 1
libpostproc 51. 2. 0 / 51. 2. 0
built on Jan 4 2010 21:51:51, gcc: 4.2.1 (Apple Inc. build 5646) (dot 1)
EDIT
सुनिश्चित नहीं है कि यह एक बग था या नहीं, लेकिन यह अभी ffmpeg के मेरे वर्तमान संस्करण में तय किया गया प्रतीत होता है, कम से कम इस वीडियो के लिए (MacPorts से संस्करण 0.6.1)।