การแปลงจากไฟล์ WMV เป็น MP4 ล้มเหลวด้วย FFmpeg


6

เมื่อทำการแปลงไฟล์ WMV ไปเป็นไฟล์ MP4 มันจะบอกว่า

[mp4 @ 0x989c160] แทร็กที่ 1: ไม่พบแท็กตัวแปลงสัญญาณที่ไม่รองรับในคอนเทนเนอร์

และ

ไม่สามารถเขียนส่วนหัวสำหรับไฟล์เอาต์พุต # 0 (พารามิเตอร์ตัวแปลงสัญญาณไม่ถูกต้องหรือไม่): ไม่อนุญาตให้ใช้งาน

แต่การแปลงไฟล์ WMV เป็นไฟล์ MKV นั้นใช้ได้ สงสัยทำไม

ต่อไปนี้เป็นผลลัพธ์ของทั้งสองกรณี

การแปลงจากไฟล์ wmv เป็นไฟล์ mp4 ไม่ทำงาน

$ ffmpeg -i "1.wmv" -c:v libx264 -crf 23 -c:a copy  "1.mp4" 
ffmpeg version git-2012-06-03-169dae8 Copyright (c) 2000-2012 the FFmpeg developers
  built on Jun  3 2012 09:14:54 with gcc 4.6.3
  configuration: --enable-gpl --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-nonfree --enable-version3 --enable-x11grab
  libavutil      51. 56.100 / 51. 56.100
  libavcodec     54. 23.100 / 54. 23.100
  libavformat    54.  6.101 / 54.  6.101
  libavdevice    54.  0.100 / 54.  0.100
  libavfilter     2. 77.100 /  2. 77.100
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0. 15.100 /  0. 15.100
  libpostproc    52.  0.100 / 52.  0.100
Guessed Channel Layout for  Input Stream #0.0 : stereo
Input #0, asf, from '1.wmv':
  Metadata:
    WMFSDKVersion   : 9.00.00.3267
    WMFSDKNeeded    : 0.0.0.0000
    IsVBR           : 0
  Duration: 01:40:50.70, start: 0.000000, bitrate: 2100 kb/s
    Stream #0:0(eng): Audio: wmav2 (a[1][0][0] / 0x0161), 44100 Hz, stereo, s16, 128 kb/s
    Stream #0:1(eng): Video: wmv3 (Main) (WMV3 / 0x33564D57), yuv420p, 640x480, 1974 kb/s, 29.97 tbr, 1k tbn, 1k tbc
[buffer @ 0x98c28c0] w:640 h:480 pixfmt:yuv420p tb:1/1000 sar:0/1 sws_param:flags=2
[buffersink @ 0x9894320] No opaque field provided
[libx264 @ 0x98b0ec0] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.1 Cache64
[libx264 @ 0x98b0ec0] profile High, level 3.0
[libx264 @ 0x98b0ec0] 264 - core 125 r2200 999b753 - H.264/MPEG-4 AVC codec - Copyleft 2003-2012 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=3 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
[mp4 @ 0x989c160] track 1: could not find tag, codec not currently supported in container
Output #0, mp4, to '1.mp4':
  Metadata:
    WMFSDKVersion   : 9.00.00.3267
    WMFSDKNeeded    : 0.0.0.0000
    IsVBR           : 0
    encoder         : Lavf54.6.101
    Stream #0:0(eng): Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 640x480, q=-1--1, 30k tbn, 29.97 tbc
    Stream #0:1(eng): Audio: wmav2 (a[1][0][0] / 0x0161), 44100 Hz, stereo, 128 kb/s
Stream mapping:
  Stream #0:1 -> #0:0 (wmv3 -> libx264)
  Stream #0:0 -> #0:1 (copy)
Could not write header for output file #0 (incorrect codec parameters ?): Operation not permitted

การแปลงจากไฟล์ wmv เป็นไฟล์ mkv นั้นใช้ได้:

$ ffmpeg -i "1.wmv" -c:v libx264 -crf 23 -c:a copy  "1.mkv" 
ffmpeg version git-2012-06-03-169dae8 Copyright (c) 2000-2012 the FFmpeg developers
  built on Jun  3 2012 09:14:54 with gcc 4.6.3
  configuration: --enable-gpl --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-nonfree --enable-version3 --enable-x11grab
  libavutil      51. 56.100 / 51. 56.100
  libavcodec     54. 23.100 / 54. 23.100
  libavformat    54.  6.101 / 54.  6.101
  libavdevice    54.  0.100 / 54.  0.100
  libavfilter     2. 77.100 /  2. 77.100
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0. 15.100 /  0. 15.100
  libpostproc    52.  0.100 / 52.  0.100
Guessed Channel Layout for  Input Stream #0.0 : stereo
Input #0, asf, from '1.wmv':
  Metadata:
    WMFSDKVersion   : 9.00.00.3267
    WMFSDKNeeded    : 0.0.0.0000
    IsVBR           : 0
  Duration: 01:40:50.70, start: 0.000000, bitrate: 2100 kb/s
    Stream #0:0(eng): Audio: wmav2 (a[1][0][0] / 0x0161), 44100 Hz, stereo, s16, 128 kb/s
    Stream #0:1(eng): Video: wmv3 (Main) (WMV3 / 0x33564D57), yuv420p, 640x480, 1974 kb/s, 29.97 tbr, 1k tbn, 1k tbc
File '1.mkv' already exists. Overwrite ? [y/N] y
w:640 h:480 pixfmt:yuv420p tb:1/1000 sar:0/1 sws_param:flags=2
[buffersink @ 0xa0a2760] No opaque field provided
[libx264 @ 0xa0b6ec0] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.1 Cache64
[libx264 @ 0xa0b6ec0] profile High, level 3.0
[libx264 @ 0xa0b6ec0] 264 - core 125 r2200 999b753 - H.264/MPEG-4 AVC codec - Copyleft 2003-2012 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=3 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, matroska, to '1.mkv':
  Metadata:
    WMFSDKVersion   : 9.00.00.3267
    WMFSDKNeeded    : 0.0.0.0000
    IsVBR           : 0
    encoder         : Lavf54.6.101
    Stream #0:0(eng): Video: h264, yuv420p, 640x480, q=-1--1, 1k tbn, 29.97 tbc
    Stream #0:1(eng): Audio: wmav2 (a[1][0][0] / 0x0161), 44100 Hz, stereo, 128 kb/s
Stream mapping:
  Stream #0:1 -> #0:0 (wmv3 -> libx264)
  Stream #0:0 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame=  325 fps=106 q=29.0 size=     411kB time=00:00:09.20 bitrate= 366.0kbits/s    

คำตอบ:


7

ขณะนี้ตัวแปลงสัญญาณไม่รองรับในคอนเทนเนอร์

นั่นเป็นข้อผิดพลาดของคุณ

-c:a libfaacลองระบุตัวแปลงสัญญาณเสียงอื่นเช่นเดียวกับ MP4 ไม่ใช้ Windows Media Audio ในที่เก็บ คุณต้องเลือกตัวแปลงสัญญาณเสียงที่ตรงกันเช่น AAC ตอนนี้สิ่งที่คุณทำคือพยายามคัดลอกบิตสตรีมและที่ล้มเหลว - ตามที่ระบุโดยข้อความแสดงข้อผิดพลาด

ปัญหาเดียวกันของตัวแปลงสัญญาณที่ไม่ตรงกันไปสำหรับคอนเทนเนอร์อื่นแม้ว่า MKV จะเปิดทางให้ตัวแปลงสัญญาณอื่นมากกว่า MP4 ดังนั้นคุณสามารถใช้ตัวแปลงสัญญาณเกือบทุกตัวภายในคอนเทนเนอร์ MKV สิ่งนี้ใช้ไม่ได้กับ MP4

โดยทั่วไปแล้วแม้ว่าเพื่อความเข้ากันได้สูงสุดพยายามที่จะยึดรูปแบบที่พบบ่อยที่สุดสำหรับภาชนะบรรจุเช่น

  • AVI: วิดีโอ MPEG-4, เสียง MP3
  • WMV: Windows Media วิดีโอและเสียง
  • MKV, MOV, MP4: h.264, AAC ออดิโอ (แม้ว่า MKV จะทำทุกอย่างจริงๆนี่คือข้อ จำกัด ด้านอุปกรณ์เล่น)

ขอบคุณ! (1) คุณรู้หรือไม่ว่าตัวแปลงสัญญาณเสียงไม่ใช่ตัวแปลงสัญญาณวิดีโอ (2) ถ้าระบุ-c:a libfaacควรเลือกบิตเรตใดบ้าง
ทิม

สำหรับบิตเรตให้ใช้สิ่งที่คุณต้องการ ฉันแน่ใจว่า-b:a 192kควรจะเพียงพอ
slhck

@Tim: ใช่มันเป็นไฟล์เสียงที่ผิดสำหรับmp4-คอนเทนเนอร์: ดูที่นี่git.videolan.org/?p=ffmpeg.git;a=blob;f=libavformat/ …และ libavformat เริ่มนับที่ 0 สำหรับ แทร็กgit.videolan.org/?p=ffmpeg.git;a=blob;f=libavformat/…
Akira

@akira: ขอบคุณ! (1) คุณจะรู้ได้อย่างไรว่ามันไม่ใช่ตัวแปลงสัญญาณวิดีโอ (2) คุณหมายถึงให้ฉันเห็น.audio_codec = CODEC_ID_AAC,ในลิงค์แรกของคุณหรือไม่ มันจะพูดอะไรกับคำถามของฉัน
ทิม

1
@Tim: 1) เพราะลิงก์ทั้งสองอ้างถึงความจริง .. รหัสอาคา การตั้งค่าลิงค์แรกสิ่งที่ ffmpeg ยอมรับสำหรับตัวแปลงสัญญาณสำหรับ mp4-container: aac สำหรับเสียงและ libx264 หรือ ffmpeg-mpeg4 สำหรับวิดีโอ ลิงค์ที่สองแสดงตำแหน่งของรหัสที่สร้างข้อความแสดงข้อผิดพลาดที่คุณเห็นเลื่อนไปสองสามบรรทัดและคุณเห็นว่า ffmpeg เริ่มนับที่ 0 ได้อย่างไรเนื่องจากคุณใช้ libx264 เป็นตัวแปลงสัญญาณวิดีโอและเติมเต็มความต้องการ สำหรับตัวแปลงสัญญาณวิดีโอข้อสรุปเชิงตรรกะอย่างเดียวที่เหลือคือ: คุณกำลังใช้ตัวแปลงสัญญาณเสียงผิด (wma2 ในกรณีของคุณแทนที่จะเป็น aac)
akira

3

ลองทำ:

ffmpeg -y -i 1.wmv -b:v 2000k 1.mp4

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


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