DTS ที่ไม่ซ้ำซ้อนบน concat (ffmpeg)


17

หลังจากรันคำสั่งนี้ffmpeg -f concat -i mylist.txt -c copy output.mp4- ฉันได้รับoutput.mp4ไฟล์ที่เสียหายและข้อความนี้:

ffmpeg -f concat -i mylist.txt -c copy output.mp4
ffmpeg version 2.6.2 Copyright (c) 2000-2015 the FFmpeg developers
  built with Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/2.6.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libmp3lame --enable-libvo-aacenc --enable-libxvid --enable-vda
  libavutil      54. 20.100 / 54. 20.100
  libavcodec     56. 26.100 / 56. 26.100
  libavformat    56. 25.101 / 56. 25.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 11.102 /  5. 11.102
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, concat, from 'mylist.txt':
  Duration: N/A, start: 0.000000, bitrate: 829 kb/s
    Stream #0:0: Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1440x900, 701 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc
    Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s
Output #0, mp4, to 'output.mp4':
  Metadata:
    encoder         : Lavf56.25.101
    Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 1440x900, q=2-31, 701 kb/s, 30 fps, 30 tbr, 15360 tbn, 15360 tbc
    Stream #0:1: Audio: aac ([64][0][0][0] / 0x0040), 44100 Hz, stereo, 128 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
[mp4 @ 0x7f897a01bc00] Non-monotonous DTS in output stream 0:0; previous: 598061, current: 467644; changing to 598062. This may result in incorrect timestamps in the output file.
[mp4 @ 0x7f897a01bc00] Non-monotonous DTS in output stream 0:0; previous: 598062, current: 468044; changing to 598063. This may result in incorrect timestamps in the output file.
[mp4 @ 0x7f897a01bc00] Non-monotonous DTS in output stream 0:0; previous: 598063, current: 468444; changing to 598064. This may result in incorrect timestamps in the output file.
...
[mp4 @ 0x7f897a01bc00] Non-monotonous DTS in output stream 0:0; previous: 598362, current: 588044; changing to 598363. This may result in incorrect timestamps in the output file.
frame= 1472 fps=0.0 q=-1.0 Lsize=    5825kB time=00:00:49.04 bitrate= 973.0kbits/s
video:4903kB audio:877kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.776358%

เนื้อหาของ mylist.txt

file 'cut.mp4'
file 'cut2.mp4'

เอาต์พุต cut.mp4 จาก ffmpeg:

ffmpeg -i cut.mp4
ffmpeg version 2.6.2 Copyright (c) 2000-2015 the FFmpeg developers
  built with Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/2.6.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libmp3lame --enable-libvo-aacenc --enable-libxvid --enable-vda
  libavutil      54. 20.100 / 54. 20.100
  libavcodec     56. 26.100 / 56. 26.100
  libavformat    56. 25.101 / 56. 25.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 11.102 /  5. 11.102
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'cut.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf56.25.101
  Duration: 00:00:39.04, start: 0.036281, bitrate: 837 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1440x900, 701 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

เอาต์พุต cut2.mp4 จาก ffmpeg:

ffmpeg -i cut2.mp4
ffmpeg version 2.6.2 Copyright (c) 2000-2015 the FFmpeg developers
  built with Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/2.6.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libmp3lame --enable-libvo-aacenc --enable-libxvid --enable-vda
  libavutil      54. 20.100 / 54. 20.100
  libavcodec     56. 26.100 / 56. 26.100
  libavformat    56. 25.101 / 56. 25.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 11.102 /  5. 11.102
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'cut2.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf56.25.101
  Duration: 00:00:10.07, start: 0.000000, bitrate: 1498 kb/s
    Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1440x900, 1271 kb/s, 30 fps, 30 tbr, 12k tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 218 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

cut.mp4 ฉันได้รับคำสั่งนี้ ffmpeg -ss 00:00:11 -i myfile.mp4 -to 00:00:39 -vf 'drawbox= : x=0 : y=0 : color=invert' cut.mp4

cut2.mp4 ฉันได้รับคำสั่งนี้ ffmpeg -ss 00:00:00 -i myfile.mp4 -to 00:00:10 -c copy cut2.mp4

ฉันค้นหามาก - ไม่พบวิธีแก้ปัญหาใด ๆ อาจมีคนช่วยฉันด้วยอันนี้

output.mp4 เล่นได้ แต่ดูแปลก ๆ

ป้อนคำอธิบายรูปภาพที่นี่


1
คุณสามารถให้ไฟล์อินพุตทั้งสองเพื่อให้ฉันสามารถทำการทดสอบได้หรือไม่
llogan

@ LordNeckbeard ใช่ฉันส่งไปให้คุณขอบคุณมาก
whitesiroi

1
ฉันดูเหมือนจะไม่สามารถทำซ้ำปัญหาที่แน่นอน ฉันใช้มากที่สุดในการสร้างแบบคงที่เมื่อเร็ว ๆ นี้ที่มีอยู่จากtessus ไฟล์ตัวอย่างดูเหมือนจะแตกต่างจากภาพหน้าจอของคุณ แต่ดูเหมือนว่าจะทำงานได้ดีใน VLC และ QuickTime ยกเว้นการค้นหาดูเหมือนว่าเกิดความสับสน ฉันทดสอบกับเครื่อง OS X เพราะดูเหมือนว่าคุณใช้อยู่
llogan

@ LordNeckbeard ขอบคุณมากใช่ด้วย ffmpeg รุ่นนี้รุ่น N-71996-g372aa07-tessus มันใช้งานได้ดีมาก ขอขอบคุณ.
whitesiroi

TL; DR; ลบ-c copyเพื่ออนุญาตให้เข้ารหัสหรือใช้ใหม่-c:a copyเท่านั้น จากนั้นขั้นตอนการเชื่อมต่อยังคงสามารถใช้งานได้-c copyเนื่องจากวิดีโอทั้งหมดได้รับการเข้ารหัสซ้ำแล้ว โปรดทราบว่าวิดีโอบางรายการที่มีคำเตือนนี้ยังคงดูโอเคหลังจากที่มีการต่อกันและ-c copyก็ใช้ได้
林果皞

คำตอบ:


10

ใช้งานล่าสุด ffmpeg

ผู้ใช้ทั่วไปควรใช้ffmpegจากสาขาหลัก git ปัจจุบันเสมอ(มีรหัสล่าสุด):

  • เมื่อพบปัญหาสิ่งแรกที่ต้องทำคือตรวจสอบเพื่อดูว่าคุณใช้ build จาก git master หรือไม่
  • ถือว่ามีความเสถียร
  • มันจะมีการแก้ไขข้อบกพร่องและคุณสมบัติเพิ่มเติม
  • การพัฒนา FFmpeg มีการใช้งานมาก
  • หากคุณต้องการได้รับการสนับสนุนจากแหล่งข้อมูลความช่วยเหลืออย่างเป็นทางการคุณต้องใช้ git master
  • การเผยแพร่สำหรับผู้จัดจำหน่าย

ดูFFmpeg ดาวน์โหลดหน้าสำหรับตัวเลือกต่างๆหรืออ้างถึงFFmpeg วิกิพีเดีย: คู่มือการคอมไพล์

อย่างอื่น

  • ในคำสั่งของคุณด้วยdrawboxคุณสามารถคัดลอกเสียงด้วย-c:a copyแทนที่จะเข้ารหัสอีกครั้ง

  • เมื่อใช้-ss, -toใช้งานได้เฉพาะคาดว่าถ้า-ssจะใช้เป็นตัวเลือกเอาท์พุท


ขอบคุณมากมันทำงานได้ดีขึ้นและเร็วขึ้น คุณช่วยตรวจสอบวิดีโอนี้ได้ไหมvideo.stackexchange.com/questions/15477/… ฉันแค่อยากรู้ว่ามันจะทำให้ง่ายขึ้นได้ไหม
whitesiroi

@ สีขาวแน่นอน ตอบแล้วถึงแม้ว่าฉันจะแสดงความเห็นต่อคำถามนั้น แต่ก็ไม่พอใจ
llogan

ขอโทษสำหรับสิ่งนั้น.
whitesiroi

1

ตามhttps://trac.ffmpeg.org/wiki/Concatenate

ฉันมีปัญหาเดียวกันนี้ ฉันใช้ ffmpeg เวอร์ชั่น 2.6.3 บนเครื่องแมค ฉันแปลงซอร์สคลิปของฉันเป็นรูปแบบ. MTS ด้วยแท็กที่เพิ่มของ -q 0 อัพเดตส่วนขยายในไฟล์ข้อความและตั้งค่าไฟล์เอาต์พุตของฉันเป็น. MTS เมื่อฉันรันคำสั่ง concat ใน ffmpeg มันทำงานเหมือนจับใจ นี่คือขั้นตอนการทำงานของฉัน

ffmpeg -i clip-1.MOV -q 0 clip-1.MTS

ffmpeg -i clip-2.MOV -q 0 clip-2.MTS

อัปเดตไฟล์ข้อความ (mylist.txt) เพื่ออ่าน:

file clip-1.MTS
file clip-2.MTS

จากนั้นรันคำสั่ง concat ดังนี้:

ffmpeg -f concat -i mylist.txt -c copy output.MTS

ทำงานให้ฉัน! คุณสามารถแปลงเอาต์พุตสุดท้าย MTS เป็นรูปแบบที่คุณต้องการ


โปรโตคอลนี้ไม่มีการสูญเสียหรือไม่
becko

ไม่คำสั่งแรกแปลงเป็น MPEG-2 ซึ่งไม่มีโหมด lossless
Gyan

1

ฉันมีข้อผิดพลาดที่คล้ายกันและเสียงในวิดีโอที่ส่งออกของฉันบางครั้งก็ไม่ซิงค์และบางครั้งก็ขาดหายไป แต่ฉันก็ใช้mkvmergeจาก mkvtoolnix แทน

วิดีโออินพุตของฉันได้รับการเข้ารหัสด้วยการตั้งค่าที่แตกต่างกันและมีขนาดต่างกันดังนั้นฉันจึงปรับขนาดและเข้ารหัสใหม่โดยใช้ครั้งแรกffmpeg:

for f in *.mp4;do w=1280;h=720;ffmpeg -i $f -filter:v "scale=iw*min($w/iw\,$h/ih):ih*min($w/iw\,$h/ih),pad=$w:$h:($w-iw*min($w/iw\,$h/ih))/2:($h-ih*min($w/iw\,$h/ih))/2" -c:v libx264 -crf 22 -preset slow -pix_fmt yuv420p -c:a libfdk_aac -vbr 3 -ac 2 -ar 44100 ${f%mp4}mkv;done

วิดีโออินพุตบางรายการของฉันไม่มีช่องสัญญาณเสียงดังนั้นฉันจึงใช้คำสั่งเช่นนี้เพื่อเพิ่มช่องเสียงเงียบให้กับพวกเขา:

for f in *.mkv;do ffprobe $f|&grep -q '1: Audio'||ffmpeg -i $f -f lavfi -i anullsrc -c:a libfdk_aac -shortest -c:v copy temp-$f;mv {temp-,}$f;done

หลังจากนั้นฉันก็ต่อวีดีโอเข้าด้วยกัน:

mkvmerge -o /tmp/output.mkv $(printf %s\\n *.mkv|sed '1!s/^/+/')

หากไฟล์อินพุตของคุณมีขนาดเท่ากันจำนวนช่องสัญญาณเสียงเท่ากันอัตราตัวอย่างเสียงเดียวกันและอื่น ๆ คุณสามารถใช้mkvmergeเพื่อต่อไฟล์ที่ขาดหายไปได้ ไฟล์สำหรับการป้อนข้อมูลmkvmergeสามารถยังมีภาชนะ MP4 แต่ไฟล์ที่ส่งออกจะมีภาชนะ MKV .mp4แม้ว่านามสกุลไฟล์ของมันจะถูกระบุว่าเป็น คุณสามารถเรียกใช้ffmpeg -i output.mkv -c copy output.mp4เพื่อเปลี่ยนคอนเทนเนอร์

mkvmergeมีไวยากรณ์เช่นmkvmerge -o output.mkv file1.mkv + file2.mkv + file3.mkvที่ซึ่งmkvmerge -o output.mkv file1.mkv +file2.mkv +file3.mkvเป็นที่ยอมรับ


1

ตามคำตอบที่เป็นประโยชน์จริง ๆ ของดันแคน:

for f in ./*.mp4; do ffmpeg -i $f -q 0 "${f%.*}.mts"; done

จากนี้:

ffmpeg -f concat -safe 0 -i <(for f in ./*.mts; do echo "file '$PWD/$f'"; done) -c copy All.mts

0

เมื่อฉันใช้ ffmpeg เพื่อทำการรีมิกซ์วิดีโอที่บันทึกไว้บางส่วน (สามารถเป็น TS, MP4 หรือ MKV) และรับ dts ที่ไม่ซ้ำซากจำเจในเอาต์พุตสตรีม - ข้อผิดพลาดการประทับเวลา ฯลฯ ฯลฯ วิดีโอที่ได้นั้นอาจมีเพียงเสียงหรือเล่นอย่างกระตุก วิธีเดียวที่ฉันได้พบการจัดการกับสิ่งนี้ได้อย่างน่าเชื่อถือคือการใช้ AviDemux ด้วยการตั้งค่าการคัดลอกทั้งเสียงและวิดีโอและเลือก MP4V2 Muxer เป็นไปได้ ,, ภายใต้ตัวเลือก Configure เพื่อเลือก Optimize For Streaming ตอนนี้ไฟล์ MP4 ที่เป็นผลลัพธ์สามารถใช้ใน ffmpeg โดยไม่สร้างข้อความแสดงข้อผิดพลาด เชื่อว่านี่คือการใช้งาน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.