ฉันจะแปลงไฟล์. MTS (AVCHD) เป็น. mp4 โดย ffmpeg โดยไม่ต้องเข้ารหัสสตรีมวิดีโอ H264 อีกครั้งได้อย่างไร


20

หมายเหตุ: ฉันโพสต์คำถามเดียวกันเพื่อstackoverflowช่วงเวลาสั้น ๆ ก่อนหน้านี้เมื่อฉันยังไม่พบชุมชนนี้ ฉันโพสต์ใหม่เนื่องจากคำถามนี้เหมาะสมกับชุมชนนี้มากกว่า

1. สิ่งที่ฉันพยายาม

ฉันมีบางพิษ (รูปแบบ AVCHD) ไฟล์ recoreded กับกล้อง สเปคของมันดังแสดงด้านล่าง:

$ ffprobe 140612_Canon-00000.MTS 
ffprobe version 2.2.1 Copyright (c) 2007-2014 the FFmpeg developers
(snip)
Input #0, mpegts, from '140612_Canon-00000.MTS':
  Duration: 00:48:58.40, start: 0.800300, bitrate: 5563 kb/s
  Program 1 
    Stream #0:0[0x1011]: Video: h264 (High) (HDMV / 0x564D4448), 
      yuv420p, 1440x1080 [SAR 4:3 DAR 16:9], 
      29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
    Stream #0:1[0x1100]: Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, 
      stereo, fltp, 256 kb/s

ให้ความสนใจกับส่วนของอัตราเฟรม / เวลา: 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc

ตอนนี้ผมอยากจะแปลงไฟล์นี้ไปยังแฟ้ม .mp4 โดยไม่ต้องสตรีมวิดีโอเข้ารหัส H264บนมืออื่น ๆ ที่มีการแปลงรหัสสตรีมเสียงเพื่อ AAC ดังนั้นฉันลองคำสั่งต่อไปนี้:

ffmpeg -i 140612_Canon-00000.MTS -t 60 -y -vcodec copy -acodec libfaac -ab 128k 140612_Canon-00001.MTS.mp4

2. ผลลัพธ์

และข้อกำหนดของไฟล์เอาต์พุตมีดังต่อไปนี้:

$ ffprobe 140612_Canon-00000.MTS.mp4
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '140612_Canon-00000.MTS.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf55.33.100

  Duration: 00:01:00.04, start: 0.021333, bitrate: 4590 kb/s

    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 
        1440x1080 [SAR 4:3 DAR 16:9], 4448 kb/s, 
        59.94 fps, 59.94 tbr, 90k tbn, 59.94 tbc (default)
    Metadata:
      handler_name    : VideoHandler

    Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 
        48000 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

ดูที่ส่วนหนึ่งของเฟรม / timebase นี้: 59.94 เฟรมต่อวินาที, 59.94 TBR, 90k TBN, 59.94 TBC แม้ว่า ffmpeg เพียงแค่คัดลอกสตรีมวิดีโอframerate และ timebase ได้รับการเปลี่ยนเป็นค่าสองครั้ง

ดังนั้นเมื่อฉันเปิดและเล่นไฟล์เอาต์พุตด้วย QuickTime Player หรือ VLC Player เสียงจะไม่มีปัญหาอย่างไรก็ตามสตรีมวิดีโอไม่เล่นอย่างถูกต้อง เล่นวิดีโอโดยให้เฟรมไปข้างหน้าและข้างหลังอย่างว่องไวซ้ำ ๆ

3. คำถาม

  1. ฉันจะแปลงไฟล์. MTS (AVCHD) เป็น. mp4 โดย ffmpeg โดยไม่ต้องเข้ารหัสสตรีมวิดีโอ H264 อีกครั้งอย่างถูกต้องได้อย่างไร
  2. ฉันจะเก็บค่า framerate / timebase ดั้งเดิม (fps / tbr / tbn / tbc) เดิมได้อย่างไรเมื่อฉันแปลงคอนเทนเนอร์ด้วยffmpegและ-vcodec copyสวิตช์
  3. ฉันจะตั้งค่า framerate / timebase (fps / tbr / tbn / tbc) โดยตัวเลือกบรรทัดคำสั่งของ ffmpeg ได้อย่างไรโดยไม่ต้องเข้ารหัสสตรีมวิดีโออีกครั้ง

ความคิดใด ๆ


4. การเพิ่ม-r 29.97ตัวเลือก

ศาสตราจารย์ Sparkles -r 29.97ให้คำแนะนำในการเพิ่ม ฉันลองแล้ว:

ffmpeg -i 140612_Canon-00001.MTS -t 60 -r 29.97 -y -vcodec copy -acodec libfaac -ab 128k 140612_Canon-00001.MTS.mp4

อย่างไรก็ตามไฟล์ที่ส่งออกยังคงมีอัตราเฟรม / เวลาไม่ถูกต้อง:

Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 
1440x1080 [SAR 4:3 DAR 16:9], 4448 kb/s, 
59.94 fps, 59.94 tbr, 11988 tbn, 59.94 tbc (default)

5. Remux ใช้ MP4Box

ฉันลอง demux และ remux โดยใช้ MP4Box ตามคำแนะนำของศาสตราจารย์ Sparkles

brew install mp4box

ffmpeg -i 140612_Canon-00000.MTS -t 60 -y \
  -vcodec copy -an 140612_Canon-00000.MTS.h264

ffmpeg -i 140612_Canon-00000.MTS -t 60 -y \
  -vn -acodec libfaac -ab 128k 140612_Canon-00000.MTS.aac

mp4box -add 140612_Canon-00000.MTS.h264:fps=29.97 \
  -add 140612_Canon-00000.MTS.aac \
  -new 140612_Canon-00000.MTS.mp4

และผลลัพธ์คือ:

$ ffprobe 140612_Canon-00000.MTS.mp4

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '140612_Canon-00000.MTS.mp4':
(snip)
  Duration: 00:02:00.22, start: 0.000000, bitrate: 2293 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), 
          yuv420p, 1440x1080 [SAR 4:3 DAR 16:9], 2228 kb/s, 
          29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
    Metadata:
      creation_time   : 2014-07-14 00:38:23
      handler_name    : 140612_Canon-00000.MTS.h264:fps=29.97
       - Imported with GPAC 0.5.0-rev4065

    Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 48000 Hz, 
          stereo, fltp, 125 kb/s (default)

มันดูค่อนข้างก้าวไปข้างหน้า ดูที่ส่วนหนึ่งของเฟรม / timebase นี้: 29.97 เฟรมต่อวินาที, 29.97 TBR, 30k TBN, 59.94 TBC สิ่งเหล่านั้นตรงกับกระแสดั้งเดิมยกเว้นtbn (ค่าฐานเวลาจากคอนเทนเนอร์)

แต่เมื่อฉันเล่นไฟล์ที่ส่งออกที่มี Quicktime Player หรือ VLC ที่วิดีโอจะเล่นกลับมาที่ความเร็วครึ่ง

แม้ว่าไฟล์ดั้งเดิมจะมี90k tbn(90000 เห็บต่อวินาที) และไฟล์เอาต์พุตใหม่จาก MP4Box มี30k tbnเพียงหนึ่งในสามของค่าดั้งเดิม แต่ไฟล์เอาต์พุตจะเล่นที่ความเร็วครึ่งหนึ่ง

ฉันไม่รู้เหตุผลว่าทำไม แต่ฉันคิดว่าปัญหาที่เหลือคือวิธีที่ฉันสามารถปรับtbnค่าได้


5-B รายงานของ MediaInfo เกี่ยวกับไฟล์เอาต์พุต

ฉันยังพยายามเครื่องมือ MediaInfoบนไฟล์ที่ส่งออกที่สร้างขึ้นโดย5. remux ใช้ mp4box ผลลัพธ์อยู่ที่นี่: https://gist.github.com/kaorukobo/c5ab9eaa413dff6cd26a


6. พยายามใช้ avconv

Volodya รายงานว่าavconvทำงานได้ดี ฉันยังเตรียมไฟล์ภาพยนตร์ตัวอย่างสั้น ๆ (Canon-00006.MTS) ที่บันทึกด้วยกล้องเดียวกัน โอเคลองทำกัน:

brew install avconv
avconv -i Canon-00006.MTS -c:a copy -c:v copy -y Canon-00006.MTS.mp4
ffprobe Canon-00006.MTS.mp4

ข้อมูล ffprobe ของไฟล์เอาต์พุตอยู่ที่นี่: https://gist.github.com/kaorukobo/5b53244ade2632ff1211 และข้อมูล framerate / timebase เป็นดังนี้: 59.94 fps, 59.94 tbr, 90.9 tbn, 59.94 tbc

ไฟล์เอาต์พุตนั้นเล่นได้ดีกับ VLC Playerตามที่ Volodya รายงาน อย่างไรก็ตามเมื่อเปิดด้วย Quicktime Player X วิดีโอจะเล่นที่ความเร็วปกติ แต่เมื่อเฟรมกลับด้านซ้ำ ๆ


7. ทำไมแอป "Free AVCHD to MOV" ถึงใช้งานได้?

ในฐานะที่ผมกล่าวถึงในความคิดเห็นก่อนหน้าของฉัน , ฟรี AVCHD เพื่อ MOVแอป"rewrap ไปเพื่อ MOV"คุณลักษณะที่ทำงานได้ดีแม้ว่ามันจะทำให้ไม่ MP4 แต่ MOV

ซอฟต์แวร์เรียกใช้โปรแกรม ffmpeg (หรือ avconv) ของตัวเองภายในและฉันเห็นตัวเลือกที่ถูกส่งผ่านไป มันดังแสดงด้านล่าง:

/Applications/Free AVCHD to Mov.app/Contents/Resources/bin/com.geranium-soft.convert \
  -i /path/to/140710_Canon-00003.MTS \
  -map 0:0 -map 0:1 -c:a libfaac -vol 256 -b:a 128k -c:v copy \
  -sn -movflags faststart -threads 0 -pix_fmt yuv420p -y \
  /path/to/140710_Canon-00003.mov

ฉันพยายามผ่านตัวเลือกเดียวกัน (แตกต่างกันเหมือนกันฉันตั้งประเภทคอนเทนเนอร์เอาท์พุทเป็น MOV และลบออกแม้กระทั่ง-t 60สวิทช์) เป็นโปรแกรม ffmpeg และทำการแปลง แต่ผลลัพธ์ก็เหมือนกันตามที่รายงานมา

แอปที่ยอดเยี่ยมยังแก้ไขปัญหาของฉันใน "ฉันจะแปลงไฟล์. MTS (AVCHD) เป็น. mp4 โดยไม่เข้ารหัสสตรีมวิดีโอ H264 อีกครั้งได้อย่างไร" ยกเว้นที่ "เป็น. mp4" และ "โดย ffmpeg" แต่ฉันก็ยังสนใจว่าทำไมแอปนั้นถึงทำได้ดี แต่ ffmpeg ไม่ได้


คุณหมายถึงอะไร "ถูกต้อง"? อาจลบออกจากชื่อ ฉันต้องการความช่วยเหลือ แต่ฉันไม่เคยใช้ ffmpeg ฉันเพิ่งใช้เครื่องมือเข้ารหัสสื่อ adobe
eLouai

@eLouai เอาล่ะฉันได้แก้ไขชื่อแล้ว
kaorukobo

คำตอบ:


8

เมื่อเห็นว่าในข้อความของคำถามของคุณคุณได้เริ่มพูดคุยเกี่ยวกับยูทิลิตี้อื่น ๆ แล้วฉันจะสมมติว่าคุณไม่สนใจที่จะใช้ ffmpeg แทน แต่เป็นการทำงานให้เสร็จ

จากประสบการณ์ของฉันกับ libav และ MTS ฉันไม่มีปัญหากับอัตราเฟรมไฟล์ที่ได้รับการปรับปรุงอย่างสมบูรณ์แบบ

ฉันเพิ่งลองต่อไปนี้ด้วยหนึ่งในไฟล์ของฉัน:

avconv -i 00174.MTS -c:a copy -c:v copy 00174.mp4

ไฟล์ MP4 ที่ได้รับการเล่นอย่างถูกต้องกับ VLC

ไฟล์ของฉันเป็นแบบก้าวหน้าเอ็มทีเอสฉันไม่มี interlaced วางอยู่รอบ ๆ แต่ถ้าจำเป็นฉันสามารถตรวจสอบได้มากกว่านี้

รายงานเกี่ยวกับการทดสอบไฟล์

ผู้เริ่มต้นหัวข้อสามารถให้ไฟล์ที่ถูก remuxed จาก MTS เป็น MP4 และไม่ได้เล่นบนเครื่องของบุคคลนั้นด้วย QuickTime Player (ไม่ทราบรุ่น) อย่างไรก็ตามมันเล่นกับผู้เล่น VLC ของแต่ละคน

ฉันไม่มีคอมพิวเตอร์ Mac OS แต่ฉันได้ลองกับ Ubuntu ฉันเล่นบน Ubuntu บน VLC (2.0.8) และวิดีโอ GNOME (เคยใช้ชื่อว่า Totem) (3.8.2); เล่นได้อย่างสมบูรณ์แบบ

ฉันถามเพื่อนของฉันคนหนึ่งที่อยู่บน Mac เล่น เขาใช้ Mavericks (10.9.4) และเล่นได้ดีกับ QuickTime Player 10.3 (727.4)

ในเวลานี้ดูเหมือนว่าจะมีปัญหากับเครื่องเล่นโดยเฉพาะหรือมีปัญหากับการตั้งค่าการกำหนดค่าบนคอมพิวเตอร์ และอาจเป็นการดีที่สุดที่จะพยายามอัปเดตเป็นรุ่นใหม่ล่าสุดของ QTP อาจเป็นไปได้ว่าจะลบเวอร์ชันปัจจุบันออกก่อนและเช็ดการกำหนดค่าเก่าทั้งหมด

ความเป็นไปได้อีกอย่างหนึ่ง

เมื่อฉันมีเครื่องเก่าฉันมีไฟล์บิตเรตสูงบางอย่างที่เล่นไม่ถูกต้องในผู้เล่นบางคนและมันเป็นคอนเทนเนอร์เฉพาะ ตัวอย่างเช่น VLC จะปฏิเสธที่จะเล่นไฟล์ MTS มันจะแสดงเฟรมแล้วแสดงไฟล์ถัดไปในเวลาเพียงเสี้ยววินาที วิดีโอของ GNOME เล่นได้ดี แต่เมื่อทำการ remuxing ไปยัง MKV ผู้เล่นทั้งสองก็เล่นได้ดีพอสมควร นี่อาจเป็นคำถามของสิ่งที่คล้ายกัน ผู้เล่นอาจกำลังอ่านคอนเทนเนอร์เฉพาะ (MP4 ในกรณีนี้) ในลักษณะที่ต้องใช้เวลาของ CPU ที่เพียงพอนั่นก็จะเริ่มทำให้หายใจไม่ออก ผลกระทบที่เกิดจากการกระตุกนั้นเกิดจากการประมวลผลของซีพียูอะไรก็ตามและผู้เล่นจะทิ้งเฟรมทั้งหมดที่ล้าหลังอย่างรวดเร็วหลังจากนั้นกระบวนการย่อยที่ไม่ดีจะเริ่มขึ้นอีกครั้งและวงจรยังคงดำเนินต่อไป

ในความเป็นไปได้นี้ตัวเลือกที่ดีที่สุดยังคงพยายามอัพเกรดซอฟต์แวร์ ด้วยตัวประมวลผลแบบมัลติคอร์ปัจจุบันมันยากที่จะทดสอบความต้องการอัพเกรดฮาร์ดแวร์โดยไม่ได้รับมัน แต่อาจเป็นไปได้ที่จะดูโหลด CPU ในระหว่างการใช้งาน QuickTime Player และเปรียบเทียบกับ VLC หากคุณเห็น 100% สำหรับคอร์ที่มี QTP นั่นอาจจะบ่งบอกถึงสิ่งนี้


มันค่อนข้างไม่น่าที่ avconv จะทำงานที่แตกต่างสำหรับเขา avconv เป็นทางแยกของ ffmpeg และ ffmpeg กำลังรวมกันหลายคอมมิชชันจากโครงการ avconv ไปสู่ ​​ffmpeg การแก้ไขข้อบกพร่องที่สำคัญเช่นนั้นน่าจะมีอยู่ใน ffmpeg
PTS

@ProfessorSparkles ฉันคิดว่าความจริงที่ว่ามันทำงานได้ที่นี่เพียงพอที่จะเชื่อเป็นอย่างอื่น ฉันจะรอดูว่า kaorukobo พูดว่าอะไร
v010dya

@Volodya ขอบคุณสำหรับข้อมูลของคุณ ฉันเพิ่มรายงานโดยพยายาม avconv กับคำถามของฉัน
kaorukobo

@kaorukobo คุณหมายถึงอะไรโดย "มีกรอบย้อนหลังซ้ำแล้วซ้ำอีก"? เอาท์พุทสั่นหรือไม่ในบางวิธีกระโดดไปข้างหน้าและถอยหลัง?
v010dya

@Volodya ฉันคิดว่าการแสดงออกของคุณถูกต้อง การเห็นคือการเชื่อ ฉันได้อัปโหลด Canon-00006.MTS.mp4 ไปที่filtropper.com/canon-00006mts หากคุณไม่สนใจโปรดลองเล่นไฟล์นั้นกับ QuickTime Player (หากคุณมี Mac ... ) ไม่ใช่ VLC
kaorukobo

5

ตามข้อผิดพลาด ffmpeg นี้

แพ็คเก็ต H.264 แบบอินเทอร์เลซจะแยกออกทำให้ MP4 STTS

เมื่อทำการ remuxing mpeg-ts ที่มี interlaced H.264 เป็น mp4 ทั้งสองฟิลด์ของแต่ละเฟรมวิดีโอจะถูกแบ่งออกเป็นแพ็กเก็ตแยกต่างหาก ซอฟต์แวร์เช่น Mediainfo ใช้ STTS เพื่อกำหนดอัตราเฟรม มันจะแสดงเป็น 50fps แทน 25fps

อัตราเฟรมไม่ตรงกันที่รายงานที่นี่น่าจะเป็นผลมาจากการ ffmpeg muxing ลำธาร MP4 interlaced ตามข้อกำหนดซึ่งแต่ละเขตจะถูกแยกออกเป็นหนึ่งแพ็คเก็ต และด้วยเหตุนี้

"ซอฟต์แวร์ที่ใช้จำนวนตัวอย่างในไฟล์ MP4 เพื่อกำหนดอัตราเฟรมนั้นผิดพลาด" ความคิดเห็นที่ 7

สิ่งนี้จะไม่ได้รับการแก้ไขเนื่องจากการผสานคู่ของเขตข้อมูลเข้ากับหน่วยการเข้าถึงเดียวเป็นการละเมิดข้อกำหนดของ MPEG-4 ดังนั้นจึงต้องทำการเข้ารหัสใด ๆ ที่ทำเช่นเดียวกัน

โปรดทราบว่าเอาต์พุต muxed เช่นหนึ่งด้านล่างเล่นได้ดีสำหรับฉันใน Potplayer และ VLC

    ffmpeg version N-76741-g8eadabf Copyright (c) 2000-2015 the FFmpeg developers
  built with gcc 5.2.0 (GCC)

Input #0, mpegts, from '00007.MTS':
  Duration: 00:00:07.01, start: 1.033367, bitrate: 15935 kb/s
  Program 1 
    Stream #0:0[0x1011]: Video: h264 (High) (HDMV / 0x564D4448), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
    Stream #0:1[0x1100]: Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, 5.1(side), fltp, 448 kb/s
    Stream #0:2[0x1200]: Subtitle: hdmv_pgs_subtitle ([144][0][0][0] / 0x0090), 1920x1080
[mp4 @ 054cf020] Codec for stream 0 does not use global headers but container format requires global headers
Output #0, mp4, to '00007.MTS.mp4':
  Metadata:
    encoder         : Lavf57.16.100
    Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 29.97 fps, 29.97 tbr, 90k tbn, 90k tbc
    Stream #0:1: Audio: aac ([64][0][0][0] / 0x0040), 48000 Hz, 5.1(side), fltp, 128 kb/s
    Metadata:
      encoder         : Lavc57.15.100 aac
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (ac3 (native) -> aac (native))
Press [q] to stop, [?] for help
[mp4 @ 054cf020] Timestamps are unset in a packet for stream 0. This is deprecated and will stop working in the future. Fix your code to set the timestamps properly
[mp4 @ 054cf020] pts has no value
    Last message repeated 209 times
frame=  420 fps=0.0 q=-1.0 Lsize=   12478kB time=00:00:07.01 bitrate=14564.2kbits/s    
video:12458kB audio:6kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.111239%
[aac @ 052fd480] Qavg: 64863.176

4

-r 29.97คุณอาจต้องการที่จะพยายามที่จะบังคับใช้อัตราเฟรมเดิมโดยใช้ FFmpeg อาจพยายามปรับอัตราเฟรมด้วยเหตุผลบางอย่าง ไวยากรณ์ของคุณไม่ถูกต้องและไม่ควรเกิดข้อผิดพลาดนั้น

เกี่ยวกับคำถามที่สามของคุณ เป็นไปไม่ได้ คุณสามารถละเว้นเฟรมเมื่อใช้ตัวแปลงสัญญาณที่เข้ารหัสเฟรมแยกต่างหาก แต่นั่นไม่ใช่กรณีที่มี h264 แต่ถึงแม้จะมีตัวแปลงสัญญาณดังกล่าวคุณยังคงปรับเปลี่ยนกระแสวิดีโอในบางวิธี เช่นเดียวกันสำหรับการเพิ่มอัตราเฟรมคุณต้องเพิ่มเฟรมจากการคำนวณหรือทำซ้ำเฟรมบางเฟรม

แก้ไข: เกี่ยวกับข้อมูลเพิ่มเติมจากความคิดเห็นด้านล่าง หากคุณต้องการเปลี่ยนข้อมูลที่เขียนในส่วนหัวของรูปแบบโดยไม่ต้องเขียนไฟล์ใหม่ทั้งหมดคุณอาจต้องการทำเช่นนั้นใน hex editor FFmpeg มีเพียงตัวเลือกในการแก้ไขข้อมูลเมตาซึ่งไม่รวมข้อมูลสตรีม วิธีและตำแหน่งที่จะทำการเปลี่ยนแปลงในไฟล์ขึ้นอยู่กับรูปแบบของคอนเทนเนอร์

อีกตัวเลือกหนึ่งคือ demux container และทำการสตรีมวิดีโอและออดิโอเข้าไปใน container ใหม่โดยระบุตัวเลือกของคุณ คุณสามารถระบุได้อีกเท่าใดขึ้นอยู่กับรูปแบบของคอนเทนเนอร์ เครื่องมือMP4Boxอาจช่วยได้ในกรณีนี้คุณสามารถระบุอัตราเฟรมเมื่อทำการ muxing วิดีโอสตรีมดิบเป็น mp4 ใหม่โดยใช้ไวยากรณ์ต่อไปนี้:

MP4Box -add input.h264:fps=29.97 -new output.mp4

ขอบคุณ เกี่ยวกับ-t 60สวิตช์มันเป็นตัวเลือกในการระบุไม่ใช่ framerate แต่ระยะเวลาการประมวลผล ( $ ffmpeg -h|grep -- -t-> -t duration record or transcode "duration" seconds of audio/video)
kaorukobo

โอ้ถูกต้องแล้วที่เป็นโปรแกรมเปลี่ยนรหัสใหม่ขออภัยในความผิดพลาดนั้น
PTS

ดูการแก้ไขคำตอบของฉัน
PTS

ขอบคุณอีกครั้ง. ฉันแก้ไขคำถามเพื่อเพิ่มผลลัพธ์โดยลองทำตามคำแนะนำของคุณ แต่น่าเสียดายที่ปัญหายังคงมี ..
kaorukobo

เกี่ยวกับการตอบคำถามที่สามของฉันมันเป็นสิ่งที่ดีสำหรับกรณีที่ฉันต้องการเปลี่ยนอัตราเฟรมของวิดีโอไม่ใช่เพียงแค่ "คุณค่า" เท่านั้น อย่างไรก็ตามในกรณีของฉัน"set framerate/timebase values"หมายถึงเพียงแค่เขียนค่าที่ใส่ไว้ในส่วนหัวของคอนเทนเนอร์ / ตัวแปลงสัญญาณ ทำไม? มีบางกรณีที่ต้องจัดการกับ: กรณีที่ตัวเข้ารหัสบางตัว (เช่นตัวแปลงสัญญาณ h264 ของ Apple Compressor) ส่งค่าระยะเวลาผิด (tbc) ไปยังสตรีมวิดีโอและกรณีเช่นคำถามนี้ที่ ffmpeg ใช้ค่า framerate / timebase ผิดซึ่งเป็น แตกต่างจากไฟล์วิดีโอต้นฉบับ
kaorukobo

2

ฉันรู้ว่านี่เป็นคำถามเก่า แต่เพิ่งโผล่ขึ้นมาอีกครั้งในฟีดดังนั้นจึงเป็นเรื่องใหม่สำหรับฉัน (-:

สิ่งหนึ่งที่ฉันไม่เห็นกล่าวถึงคือการสั่งซื้อภาคสนาม นี่เป็นไฟล์อินเทอร์เลซดังนั้นจึงเป็นข้อพิจารณา OP กล่าวถึงเฟรม "การสั่นไปมา" ซึ่งเป็นค่าสถานะสำหรับการเรียงลำดับฟิลด์ที่ไม่ถูกต้องเสมอ หากวิดีโอนั้นตกลงเป็นอย่างอื่นยกเว้น 'การสั่น' ให้ลองเพิ่มสิ่งที่ ffmpeg จำเป็นต้องบังคับให้ "ฟิลด์แรกสุด" แล้วตรงกันข้ามถ้ามันยังผิด ฉันไม่คุ้นเคยเพียงพอกับรายละเอียด ffmpeg เพื่อให้ค่าสถานะที่แน่นอนสำหรับสิ่งนั้น


ฉันต้องการลองใช้คำสั่ง ffmepg กับคำตอบของคุณ อย่างไรก็ตาม ffmpeg รุ่น 2.2.1 ของฉันดูเหมือนจะไม่มีตัวเลือกที่จัดการกับลำดับฟิลด์ ฉันพยายามffmpeg -h|egrep 'field|first'แต่มันไม่แสดงอะไรเลย ffmpeg รุ่นก่อนหน้า (0.8.6) มี-topตัวเลือกที่อาจจัดการได้
kaorukobo

@kaorukobo อินเทอร์เน็ตนำเสนอสิ่งนี้: -vf "fieldorder = bff"หรือ= tffโดยที่tและbอ้างถึงด้านบนและด้านล่างตามลำดับ ด้านบน = 1/0ตัวเลือกที่เห็นได้ชัดว่าใช้ในการเปลี่ยนการสั่งซื้อที่เขตข้อมูลที่อ่านไม่ได้เขียน อีกครั้งฉันใช้ ffmpeg / avconv เพียงอย่างเดียวดังนั้นจึงไม่มีการรับประกัน
จิมแม็ค
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.