कम से कम FFmpeg 2.8.x पर (लेकिन पुराना भी काम करना चाहिए) आप विकल्प के लिए एक तर्क के lavfi
रूप में इनपुट प्रारूप और जटिल फिल्टर ग्राफ का उपयोग movie
और setpts
फ़िल्टर के रूप में उपयोग कर सकते हैं -i
।
आपके लिए यह काम करने वाली अगली कमांड:
ffmpeg -re -f lavfi -i "movie=filename=input.mp4:loop=0, setpts=N/(FRAME_RATE*TB)" output.mp4
शून्य loop=
तर्कों का अर्थ है अनंत लूप। अधिक से अधिक शून्य सेटों की गणना दोहराई जाती है। setpts
पीटीएस के लिए दूसरे और बाद में दोहराए जाने के लिए आवश्यक फिल्टर, अन्यथा अधिकांश आउटपुट muxers गैर-मोनोटोनिक पीटीएस बढ़ने के साथ विफल हो जाएंगे: लूप पीटीएस की पुनरावृत्ति नहीं करता है।
ध्यान दें, यह मानकर कि डिकोडिंग / एन्कोडिंग के बिना फ्रेम को बायपास करना असंभव है: डिजाइन फिल्टर्स केवल डीकोड किए गए फ्रेम से संबंधित हैं।
FFmpeg 2.8.2 में नए इनपुट विकल्प को -stream_loop
सम्मिलित किया गया है। मैं पहली बार देखता हूं कि यह अधिक सरल है और ट्रांसकोडिंग के बिना कॉपी कंटेंट की अनुमति देता है:
ffmpeg -re -stream_loop -1 -i input.mp4 -c copy -y output.mp4
लेकिन यह PTS को पुनर्गणना नहीं करता है और आउटपुट फ़ाइल गलत है। यदि आप PTS को ठीक करने के लिए फ़िल्टर जोड़ते हैं (देखें setpts
) तो आपको -c copy
भी निकालना होगा । केवल बिटस्ट्रीम फ़िल्टर एन्कोड किए गए पैकेट से संबंधित हो सकते हैं, लेकिन PTS को ठीक करने के लिए कोई भी बिटस्ट्रीम फ़िल्टर नहीं है (देखें: https://ffmpeg.org/ffmpeg-bitstream-filters.html )
किसी भी मामले में दूसरे पास पर ffmpeg त्रुटि के साथ विफल रहता है:
input.mp4: Resource temporarily unavailable
मेरे लिए ज्ञात काम : PTS सीमा (स्ट्रीमिंग कंटेनर) के बिना इनपुट फ़ाइल के लिए कंटेनर का उपयोग करें। उनमें से एक, मुझे जाना जाता है, एमपीईजी-टीएस है। तो, आप अपनी MP4 फाइल को MPEG-TS में बदल सकते हैं:
ffmpeg -i input.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts input.ts
और इन्फिनिटी फ़ाइल बनाने के लिए अगले कमांड का उपयोग करें:
ffmpeg -re -stream_loop -1 -i input.ts -c copy -strict -2 -bsf:a aac_adtstoasc -y output.mp4
(बिटस्ट्रीम फिल्टर्स का उपयोग केवल तभी किया जाना चाहिए जब मेरे नमूनों पर यह आवश्यक हो)
इस मामले में FFmpeg> = 2.8.2 की आवश्यकता है।