문제

문제

나는 ffmpeg를 사용하는 xmedia recode를 사용하여 mp4 컨테이너와 함께 비디오 "복사" 및 ac3 -> aac "변환"을 사용하여 이러한 비디오를 변환합니다. 대부분의 비디오에서 이것은 잘 작동하고 정말 빠릅니다. 그러나 일부는 "모션 JPEG"로 표시되며 변환할 때 오디오와 검은색 화면이 포함된 작은 파일이 제공됩니다. VLC에서는 코덱 정보 아래에 h264/ac3으로 표시됩니다.

ffmpeg로 Tencoder를 사용해 보았지만 동일한 결과를 얻었습니다. 하지만 텐코더의 인코더를 멘코더로 전환하면 영상이 잘 나옵니다. 문제는 각각 30분이 걸리는 반면 xmedia에서 ffmpeg 복사는 2분이 걸린다는 것입니다. 이러한 비디오에서 "모션 jpeg" 특성을 제거할 수 있는 방법이 있습니까?

로그는 다음과 같습니다.

Encoder 1 log
Encoder 1 command lines:
 -y  -itsoffset 0 -threads 8  -i "Z:\Downloads\3. Convert\test.mkv"     -c:v libx264  -crf 21   -level 41  -f mp4  -map 0:2 -map 0:1  -strict experimental -c:a aac -ab 320k  -af aresample=resampler=soxr -ar 44100 -ac 2    "Z:\Downloads\3. Convert\test.mp4"

Encoder 1 console outputs:
ffmpeg version N-71403-g415f1fa Copyright (c) 2000-2015 the FFmpeg developers
  built with gcc 4.9.2 (GCC)
  configuration: --disable-static --enable-shared --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libdcadec --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-lzma --enable-decklink --enable-zlib
  libavutil      54. 22.101 / 54. 22.101
  libavcodec     56. 34.100 / 56. 34.100
  libavformat    56. 30.100 / 56. 30.100
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 13.101 /  5. 13.101
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, matroska,webm, from 'Z:\Downloads\3. Convert\test.mkv':
  Metadata:
    encoder         : libebml v1.3.0 + libmatroska v1.4.1
    creation_time   : 2015-01-16 07:42:24
  Duration: 00:20:18.47, start: 0.083000, bitrate: 4818 kb/s
    Stream #0:0: Video: h264 (High), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 2k tbc (default)
    Stream #0:1: Audio: aac (LC), 48000 Hz, stereo, fltp (default)
    Stream #0:2: Video: mjpeg, yuvj444p(pc, bt470bg/unknown/unknown), 340x340 [SAR 300:300 DAR 1:1], 90k tbr, 90k tbn, 90k tbc
    Metadata:
      filename        : cover.jpeg
      mimetype        : image/jpeg
[mp4 @ 00000000027008e0] Frame rate very high for a muxer not efficiently supporting it.
Please consider specifying a lower framerate, a different muxer or -vsync 2
No pixel format specified, yuvj444p for H.264 encoding chosen.
Use -pix_fmt yuv420p for compatibility with outdated media players.
[libx264 @ 0000000003d4f020] using SAR=1/1
[libx264 @ 0000000003d4f020] MB rate (43560000) > level limit (245760)
[libx264 @ 0000000003d4f020] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX XOP FMA4 FMA3 LZCNT BMI1
[libx264 @ 0000000003d4f020] profile High 4:4:4 Predictive, level 4.1, 4:4:4 8-bit
[libx264 @ 0000000003d4f020] 264 - core 146 r2538 121396c - H.264/MPEG-4 AVC codec - Copyleft 2003-2015 - 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=4 threads=12 lookahead_threads=2 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=21.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'Z:\Downloads\3. Convert\test.mp4':
  Metadata:
    encoder         : Lavf56.30.100
    Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuvj444p(pc), 340x340 [SAR 300:300 DAR 1:1], q=-1--1, 90k fps, 90k tbn, 90k tbc
    Metadata:
      filename        : cover.jpeg
      mimetype        : image/jpeg
      encoder         : Lavc56.34.100 libx264
    Stream #0:1: Audio: aac ([64][0][0][0] / 0x0040), 44100 Hz, stereo, fltp, 320 kb/s (default)
    Metadata:
      encoder         : Lavc56.34.100 aac
Stream mapping:
  Stream #0:2 -> #0:0 (mjpeg (native) -> h264 (libx264))
  Stream #0:1 -> #0:1 (aac (native) -> aac (native))
Press [q] to stop, [?] for help
frame=    1 fps=0.0 q=31.0 Lsize=   47681kB time=00:20:18.40 bitrate= 320.6kbits/s    
video:10kB audio:47281kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.825254%
[libx264 @ 0000000003d4f020] frame I:1     Avg QP:31.31  size:  9546
[libx264 @ 0000000003d4f020] mb I  I16..4:  7.0% 77.1% 15.9%
[libx264 @ 0000000003d4f020] 8x8 transform intra:77.1%
[libx264 @ 0000000003d4f020] coded y,u,v intra: 48.1% 11.9% 10.3%
[libx264 @ 0000000003d4f020] i16 v,h,dc,p: 12% 21% 21% 47%
[libx264 @ 0000000003d4f020] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 32%  9% 32%  3%  4%  5%  4%  5%  6%
[libx264 @ 0000000003d4f020] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 23%  9% 21%  8%  7% 10%  6% 10%  6%
[libx264 @ 0000000003d4f020] kb/s:6873120.00

답변1

문제

문제는 -map. 당신은 ffmpeg스트림을 매핑 0:2하고 0:1이 입력에서 aac오디오 스트림과 mjpeg비디오 스트림에 해당하는 것을 말하고 있습니다.

솔루션

기본 스트림 선택 사용

-map옵션을 생략하고 기본값을 사용할 수 있습니다.스트림 선택행동:

기본적으로 ffmpeg입력 파일에 있는 각 유형(비디오, 오디오, 자막)의 스트림 하나만 포함하고 이를 각 출력 파일에 추가합니다. 다음 기준에 따라 각각의 "최고"를 선택합니다.

  • 비디오 – 해상도가 가장 높은 스트림
  • 오디오 – 채널이 가장 많은 스트림
  • 자막 – 첫 번째 자막 스트림

동일한 유형의 여러 스트림이 균등하게 전송되는 경우 인덱스가 가장 낮은 스트림이 선택됩니다.

적절한 매핑 사용

-map기본 스트림 선택이 허용되지 않는 경우 각 입력에 대해 올바른 옵션을 사용해야 합니다 .

인덱스 번호로 특정 스트림을 명시적으로 선택하는 것보다 더 나은 방법은 스트림 지정자를 추가하는 것입니다.

  1. 첫 번째(유일한) 입력에서 모든 비디오 스트림과 모든 오디오 스트림을 선택합니다.

    ffmpeg -i input0 -map 0:v -map 0:a … output
    
    • 참고로 ffmpeg0부터 계산됩니다.
  2. 두 번째 입력에서 첫 번째 비디오 스트림을 선택하고 첫 번째 입력에서 세 번째 오디오 스트림을 선택합니다.

    ffmpeg -i input0 -i input1 -map 1:v:0 -map 0:a:2 … output
    
  3. 자막 스트림을 제외한 입력 0의 모든 스트림을 선택하려면 네거티브 매핑을 사용합니다.

    ffmpeg -i input0 -map 0 -map -0:s … output
    

또한 참조하십시오

답변2

mkvmerge에서 mkv를 열고 첨부 파일이 있는지 확인하고 첨부 파일이 있으면 제거하고 mux하고 다시 변환해 보세요. 첨부 파일은 Xmedia 녹화에서 mkv가 "모션 jpeg"로 표시되는 유일한 원인입니다.

관련 정보