गुणवत्ता खोने के बिना ffmpeg के साथ कॉनटैट दो mp4 फाइलें


16

मैं ffmpeg का उपयोग करके 2 वीडियो को बदलना चाहता हूं। मै इस्तेमाल कर रहा हूँ:

ffmpeg -i output1.mp4 -scodec copy -vbsf h264_mp4toannexb i0.ts

लेकिन मुझे जो mp4 file मिल रही है वो बहुत खराब लग रही है तो source file।

यहां दोनों फाइलों के बारे में जानकारी दी गई है

   Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'output1.mp4':
   Metadata:
   major_brand     : isom
   minor_version   : 1
   compatible_brands: isom
   creation_time   : 2013-06-13 15:40:36
   Duration: 00:00:15.72, start: 0.000000, bitrate: 2053 kb/s
   Stream #0.0(und): Video: h264 (High), yuv420p, 1280x720, 1931 kb/s, 25 fps, 25 tbr,   12800 tbn, 50 tbc
   Stream #0.1(und): Audio: aac, 44100 Hz, stereo, s16, 128 kb/s

  Input #0, mpegts, from 'i0.ts':
  Duration: 00:00:15.64, start: 1.400000, bitrate: 1382 kb/s
  Program 1 
  Metadata:
  service_name    : Service01
  service_provider: Libav
  Stream #0.0[0x100]: Video: mpeg2video (Main), yuv420p, 1280x720 [PAR 1:1 DAR 16:9], 104857 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc
  Stream #0.1[0x101](und): Audio: mp2, 44100 Hz, stereo, s16, 128 kb/s

इस समस्या का समाधान किस प्रकार से किया जा सकता है?


आप क्या करने की कोशिश कर रहे हैं, बिल्कुल? शब्द "कॉनैट" का अर्थ कई फाइलों में शामिल होना है, लेकिन आप केवल एक इनपुट output1.mp4, और एक आउटपुट का उल्लेख कर रहे हैं i0.ts। टीएस आउटपुट कंटेनर में एन्कोडिंग mpeg2videoडिफ़ॉल्ट रूप से एनकोडर का उपयोग करेगा (कम से कम आपके निर्माण के साथ), और पिछली बार जब मैंने इस एनकोडर के लिए डिफ़ॉल्ट बिटरेट या गुणवत्ता सेटिंग की जांच की, -b:v 200kजो अधिकांश मामलों के लिए बहुत कम है।
ललगन

माफ़ करना। तब मैं उन्हें ffmpeg -i "concat: i0.ts | i1.ts" output1111.mp4 के साथ सम्‍मिलित करता हूं। लेकिन समस्या यह है कि जब मैं ts-files बना रहा हूँ तो गुणवत्ता पहले से ही खराब है

आपको MPEG-2 वीडियो को फिर से एनकोड करने की आवश्यकता नहीं हो सकती है। क्या आपके सभी मूल इनपुट ( output1.mp4, आदि) में एक ही प्रारूप, फ्रेम दर और फ्रेम आकार है?
ललगन

हाँ बिल्कुल। सभी समान हैं

1
यह भी देखें stackoverflow.com/questions/7333232/...
rogerdpack

जवाबों:


36

concatडीमूक्सर का उपयोग करने पर विचार करें । इस तरह आप अस्थायी, नुकसानदेह इंटरमीडिएट फाइल बनाने से बच सकते हैं और पुनः एन्कोडिंग का एक अतिरिक्त चरण छोड़ सकते हैं।

नोट: सभी इनपुट में समान स्ट्रीम प्रकार (समान प्रारूप, समान समय आधार, आदि) होने चाहिए।

  1. एक टेक्स्ट फ़ाइल बनाएं और प्रत्येक फ़ाइल के पथों और नामों को सम्मिलित (या "जॉइन") करें। उदाहरण फ़ाइल input.txt:

    file '/home/jenia/input1.mp4'
    file '/home/jenia/input2.mp4'
    file '/home/jenia/input3.mp4'
    
  2. अब आप concatडिमूक्सर का उपयोग कर सकते हैं :

    ffmpeg -f concat -i input.txt -codec copy output.mp4
    

यदि आपके पास यह सुविधा नहीं है, तो या तो आपका ffmpeg बहुत पुराना है, या आप libav fork से "नकली" ffmpeg का उपयोग कर रहे हैं।

FFmpeg डाउनलोड पेज के माध्यम से लिनक्स, OS X, और Windows के लिए स्थिर बिल्ड का उपयोग करना आसान है , या आप ffmpeg को संकलित करने के लिए चरण-दर-चरण गाइड का पालन ​​कर सकते हैं ।

और देखें:


यह वही है जो मैं चाहता था और मुझे अपने iPhone से 2 .Mov फ़ाइलों को मर्ज करने में मदद की। 6. धन्यवाद।
रयान

7

सबसे तेज 1-लाइनर होगा:

ls Movie\ Part\ * | while read line; do echo file \'$line\'; done | ffmpeg -f concat -i - -c copy output.mp4

विंडोज कमांड लाइन के लिए ऐसे 1-ऑनलाइनर पाने का कोई मौका?
पीटरको

2
लिनक्स पर मैंने इस ऑनलाइनर का उपयोग किया: ffmpeg -safe 0 -f concat -i <(find . -type f -name '*' -printf "file '$PWD/%p'\n" | sort) -c copy output.mkv(mkv mp4 से अधिक कोडेक्स स्वीकार करता है, लेकिन आप इसे mp4 के साथ भी आज़मा सकते हैं)। -safe 0के बारे में शिकायत हाल ही में ffmpeg संस्करणों के लिए है असुरक्षित फ़ाइल नाम , और -type fकेवल वे फ़ाइलें सूचीबद्ध करने के लिए है। मैंने | sortवर्णानुक्रम में फ़ाइलों को क्रमबद्ध करने के लिए जोड़ा ; क्योंकि findउन्हें फाइल सिस्टम पर सहेजे जाने के क्रम में पढ़ा जाता है। व्हॉट्सएप के साथ फाइल के लिए भी काम करता है।
एरिक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.