FFmpeg를 사용하면 WMV에서 MP4 파일로 변환이 실패합니다.

FFmpeg를 사용하면 WMV에서 MP4 파일로 변환이 실패합니다.

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    

답변1

현재 컨테이너에서 코덱이 지원되지 않습니다.

그건 당신의 실수입니다.

와 같은 다른 오디오 코덱을 지정해 보십시오 -c:a aac. MP4는 Windows Media Audio를 컨테이너에 포함하지 않습니다. AAC와 같이 일치하는 오디오 코덱을 선택해야 합니다. 지금 당신이 하는 일은 비트스트림을 복사하는 것뿐인데 오류 메시지에 표시된 대로 실패합니다.

일치하지 않는 코덱의 동일한 문제는 다른 컨테이너에서도 발생합니다. 단, MKV는 MP4보다 다른 코덱에 훨씬 더 개방적이므로 MKV 컨테이너 내에서 거의 모든 코덱을 사용할 수 있습니다. 이것은~ 아니다MP4용으로 작동합니다.

그러나 일반적으로 호환성을 최대화하려면 가장 일반적인 컨테이너 형식을 따르십시오.

  • AVI: MPEG-4 비디오, MP3 오디오
  • WMV: Windows Media 비디오 및 오디오
  • MKV, MOV, MP4: h.264, AAC 오디오(MKV는 실제로 무엇이든 지원하지만 여기서는 재생 장치 측에 제한이 있습니다)

답변2

그냥 해보세요:

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

ffmpeg는 자동으로 가장 적합한 오디오 형식을 선택하고 비디오에 libx264를 사용해야 합니다. 2000k는 본질적으로 원본 비디오 파일과 동일한 비트 전송률로 인코딩하도록 지시합니다.

답변3

도커

.wma(오디오 파일)를 .mp4 변환(정적 이미지가 있는 비디오)으로 변환하고 결과를 YouTube에 업로드하는 데 비슷한 문제가 있습니다. 향후 읽기를 위해 작업 중인 Docker 솔루션을 남겨 두겠습니다.

version: '3.7'

services:
    convert:
        image: jrottenberg/ffmpeg
        volumes:
            - ./mp3:/data
        
        # for WMV
        command: ' -loop 1 -framerate 2 -i "/data/image.jpeg" -i "/data/myAudio.WMA" -c:v libx264 -preset medium -tune stillimage -crf 18 -c:a aac -b:a 128k -shortest -pix_fmt yuv420p "/data/myVideoForYT.mp4" -stats'

        # for .mp3
        #command: ' -loop 1 -framerate 2 -i "/data/image.jpeg" -i "/data/myAudio.mp3" -c:v libx264 -preset medium -tune stillimage -crf 18 -c:a copy -shortest -pix_fmt yuv420p "/data/myVideoForYT.mp4" -stats'

아래 코드를 파일 안에 저장하세요 . 디렉토리(myAudio.wma 파일 포함)가 동일한 디렉토리에 있다고 docker-composer.yml가정합니다 . mp3그리고 docker compose run convert.

관련 정보