ffmpeg-将具有1帧视频和4分钟音频的视频文件转换为HTML5视频

问题描述 投票:-1回答:1

具有此输入视频-它是带有音频的1帧视频(=图片):

    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf57.83.100
  Duration: 00:04:34.55, start: 0.000000, bitrate: 122 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc), 480x360 [SAR 1:1 DAR 4:3], 6375600 kb/s, 90k fps, 90k tbr, 90k tbn, 180k tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 120 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

我需要将其转换为具有HTML5音频长度的视频轨道的mp4,但是ffmpeg(4.2.3)说:

Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
  Stream #0:1 -> #0:1 (aac (native) -> aac (libfdk_aac))
Press [q] to stop, [?] for help
[libfdk_aac @ 0x55f35bf28100] Note, the VBR setting is unsupported and only works with some parameter combinations
Too many packets buffered for output stream 0:1.
[libfdk_aac @ 0x55f35bf28100] 2 frames left in the queue on closing
Conversion failed!

仅音频或视频转换成功。

使用-c:v复制转换成功,但这不是我所需要的。

添加-max_muxing_queue_size 9999没有帮助。

编辑:

完整命令:

ffmpeg -i input.mp4 -c:a libfdk_aac -vbr 2 -c:v libx264 -crf 28 -profile:v high -level 41 -vf format=yuv420p -sn -sample_fmt s16 -ac 1 -threads 0 -map_metadata -1 low.mp4

完整日志:

ffmpeg version 4.2.3 Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 9.3.0 (Gentoo 9.3.0 p2)
  configuration: --prefix=/usr --libdir=/usr/lib64 --shlibdir=/usr/lib64 --docdir=/usr/share/doc/ffmpeg-4.2.3/html --mandir=/usr/share/man --enable-shared --cc=x86_64-pc-linux-gnu-gcc --cxx=x86_64-pc-linux-gnu-g++ --ar=x86_64-pc-linux-gnu-ar --optflags='-O2 -pipe -march=haswell -mmmx -mno-3dnow -msse -msse2 -msse3 -mssse3 -mno-sse4a -mcx16 -msahf -mmovbe -maes -mno-sha -mpclmul -mpopcnt -mabm -mno-lwp -mfma -mno-fma4 -mno-xop -mbmi -mbmi2 -mno-tbm -mavx -mavx2 -msse4.2 -msse4.1 -mlzcnt -mno-rtm -mno-hle -mrdrnd -mf16c -mfsgsbase -mno-rdseed -mno-prfchw -mno-adx -mfxsr -mxsave -mxsaveopt -mno-avx512f -mno-avx512er -mno-avx512cd -mno-avx512pf -mno-prefetchwt1 -mno-clflushopt -mno-xsavec -mno-xsaves -mno-avx512dq -mno-avx512bw -mno-avx512vl -mno-avx512ifma -mno-avx512vbmi -mno-clwb -mno-mwaitx -mno-clzero -mno-pku -mtune=haswell' --disable-static --enable-avfilter --enable-avresample --disable-stripping --disable-optimizations --disable-libcelt --enable-version3 --enable-version3 --disable-indev=oss --disable-outdev=oss --enable-version3 --enable-nonfree --enable-bzlib --disable-runtime-cpudetect --disable-debug --disable-gcrypt --enable-gnutls --disable-gmp --enable-gpl --disable-hardcoded-tables --enable-iconv --disable-libtls --disable-libxml2 --enable-lzma --enable-network --disable-opencl --disable-openssl --enable-postproc --enable-libsmbclient --enable-ffplay --enable-sdl2 --enable-vaapi --disable-vdpau --enable-xlib --enable-libxcb --enable-libxcb-shm --enable-libxcb-xfixes --enable-zlib --disable-libcdio --disable-libiec61883 --disable-libdc1394 --disable-libcaca --disable-openal --enable-opengl --disable-libv4l2 --enable-libpulse --disable-libdrm --enable-libjack --enable-libopencore-amrwb --enable-libopencore-amrnb --disable-libcodec2 --enable-libdav1d --enable-libfdk-aac --enable-libopenjpeg --enable-libbluray --disable-libgme --disable-libgsm --disable-libaribb24 --disable-mmal --disable-libmodplug --enable-libopus --disable-libilbc --enable-librtmp --disable-libssh --enable-libspeex --enable-libsrt --enable-librsvg --disable-ffnvcodec --enable-libvorbis --enable-libvpx --disable-libzvbi --disable-appkit --disable-libbs2b --disable-chromaprint --disable-cuda-llvm --disable-libflite --enable-frei0r --disable-libfribidi --disable-fontconfig --enable-ladspa --disable-libass --disable-libtesseract --enable-lv2 --enable-libfreetype --enable-libvidstab --disable-librubberband --disable-libzmq --disable-libzimg --enable-libsoxr --enable-pthreads --enable-libvo-amrwbenc --enable-libmp3lame --disable-libkvazaar --enable-libaom --disable-libopenh264 --disable-libsnappy --enable-libtheora --disable-libtwolame --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --disable-armv5te --disable-armv6 --disable-armv6t2 --disable-neon --disable-vfp --disable-vfpv3 --disable-armv8 --disable-mipsdsp --disable-mipsdspr2 --disable-mipsfpu --disable-altivec --disable-amd3dnow --disable-amd3dnowext --disable-fma4 --disable-xop --cpu=haswell --disable-doc --disable-htmlpages --enable-manpages
  libavutil      56. 31.100 / 56. 31.100
  libavcodec     58. 54.100 / 58. 54.100
  libavformat    58. 29.100 / 58. 29.100
  libavdevice    58.  8.100 / 58.  8.100
  libavfilter     7. 57.100 /  7. 57.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  5.100 /  5.  5.100
  libswresample   3.  5.100 /  3.  5.100
  libpostproc    55.  5.100 / 55.  5.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf57.83.100
  Duration: 00:04:34.55, start: 0.000000, bitrate: 122 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc), 480x360 [SAR 1:1 DAR 4:3], 6375600 kb/s, 90k fps, 90k tbr, 90k tbn, 180k tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 120 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
  Stream #0:1 -> #0:1 (aac (native) -> aac (libfdk_aac))
Press [q] to stop, [?] for help
[libfdk_aac @ 0x55fb6c86b080] Note, the VBR setting is unsupported and only works with some parameter combinations
Too many packets buffered for output stream 0:1.
[libfdk_aac @ 0x55fb6c86b080] 2 frames left in the queue on closing
Conversion failed!

调试详细程度:

ffmpeg -v debug -i input.mp4 -c:a libfdk_aac -vbr 2 -c:v libx264 -crf 28 -profile:v high -level 41 -vf format=yuv420p -sn -sample_fmt s16 -ac 1 -threads 0 -map_metadata -1 low.mp4
ffmpeg version 4.2.3 Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 9.3.0 (Gentoo 9.3.0 p2)
  configuration: --prefix=/usr --libdir=/usr/lib64 --shlibdir=/usr/lib64 --docdir=/usr/share/doc/ffmpeg-4.2.3/html --mandir=/usr/share/man --enable-shared --cc=x86_64-pc-linux-gnu-gcc --cxx=x86_64-pc-linux-gnu-g++ --ar=x86_64-pc-linux-gnu-ar --optflags='-O2 -pipe -march=haswell -mmmx -mno-3dnow -msse -msse2 -msse3 -mssse3 -mno-sse4a -mcx16 -msahf -mmovbe -maes -mno-sha -mpclmul -mpopcnt -mabm -mno-lwp -mfma -mno-fma4 -mno-xop -mbmi -mbmi2 -mno-tbm -mavx -mavx2 -msse4.2 -msse4.1 -mlzcnt -mno-rtm -mno-hle -mrdrnd -mf16c -mfsgsbase -mno-rdseed -mno-prfchw -mno-adx -mfxsr -mxsave -mxsaveopt -mno-avx512f -mno-avx512er -mno-avx512cd -mno-avx512pf -mno-prefetchwt1 -mno-clflushopt -mno-xsavec -mno-xsaves -mno-avx512dq -mno-avx512bw -mno-avx512vl -mno-avx512ifma -mno-avx512vbmi -mno-clwb -mno-mwaitx -mno-clzero -mno-pku -mtune=haswell' --disable-static --enable-avfilter --enable-avresample --disable-stripping --disable-optimizations --disable-libcelt --enable-version3 --enable-version3 --disable-indev=oss --disable-outdev=oss --enable-version3 --enable-nonfree --enable-bzlib --disable-runtime-cpudetect --disable-debug --disable-gcrypt --enable-gnutls --disable-gmp --enable-gpl --disable-hardcoded-tables --enable-iconv --disable-libtls --disable-libxml2 --enable-lzma --enable-network --disable-opencl --disable-openssl --enable-postproc --enable-libsmbclient --enable-ffplay --enable-sdl2 --enable-vaapi --disable-vdpau --enable-xlib --enable-libxcb --enable-libxcb-shm --enable-libxcb-xfixes --enable-zlib --disable-libcdio --disable-libiec61883 --disable-libdc1394 --disable-libcaca --disable-openal --enable-opengl --disable-libv4l2 --enable-libpulse --disable-libdrm --enable-libjack --enable-libopencore-amrwb --enable-libopencore-amrnb --disable-libcodec2 --enable-libdav1d --enable-libfdk-aac --enable-libopenjpeg --enable-libbluray --disable-libgme --disable-libgsm --disable-libaribb24 --disable-mmal --disable-libmodplug --enable-libopus --disable-libilbc --enable-librtmp --disable-libssh --enable-libspeex --enable-libsrt --enable-librsvg --disable-ffnvcodec --enable-libvorbis --enable-libvpx --disable-libzvbi --disable-appkit --disable-libbs2b --disable-chromaprint --disable-cuda-llvm --disable-libflite --enable-frei0r --disable-libfribidi --disable-fontconfig --enable-ladspa --disable-libass --disable-libtesseract --enable-lv2 --enable-libfreetype --enable-libvidstab --disable-librubberband --disable-libzmq --disable-libzimg --enable-libsoxr --enable-pthreads --enable-libvo-amrwbenc --enable-libmp3lame --disable-libkvazaar --enable-libaom --disable-libopenh264 --disable-libsnappy --enable-libtheora --disable-libtwolame --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --disable-armv5te --disable-armv6 --disable-armv6t2 --disable-neon --disable-vfp --disable-vfpv3 --disable-armv8 --disable-mipsdsp --disable-mipsdspr2 --disable-mipsfpu --disable-altivec --disable-amd3dnow --disable-amd3dnowext --disable-fma4 --disable-xop --cpu=haswell --disable-doc --disable-htmlpages --enable-manpages
  libavutil      56. 31.100 / 56. 31.100
  libavcodec     58. 54.100 / 58. 54.100
  libavformat    58. 29.100 / 58. 29.100
  libavdevice    58.  8.100 / 58.  8.100
  libavfilter     7. 57.100 /  7. 57.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  5.100 /  5.  5.100
  libswresample   3.  5.100 /  3.  5.100
  libpostproc    55.  5.100 / 55.  5.100
Splitting the commandline.
Reading option '-v' ... matched as option 'v' (set logging level) with argument 'debug'.
Reading option '-i' ... matched as input url with argument 'input.mp4'.
Reading option '-c:a' ... matched as option 'c' (codec name) with argument 'libfdk_aac'.
Reading option '-vbr' ... matched as AVOption 'vbr' with argument '2'.
Reading option '-c:v' ... matched as option 'c' (codec name) with argument 'libx264'.
Reading option '-crf' ... matched as AVOption 'crf' with argument '28'.
Reading option '-profile:v' ... matched as option 'profile' (set profile) with argument 'high'.
Reading option '-level' ... matched as AVOption 'level' with argument '41'.
Reading option '-vf' ... matched as option 'vf' (set video filters) with argument 'format=yuv420p'.
Reading option '-sn' ... matched as option 'sn' (disable subtitle) with argument '1'.
Reading option '-sample_fmt' ... matched as option 'sample_fmt' (set sample format) with argument 's16'.
Reading option '-ac' ... matched as option 'ac' (set number of audio channels) with argument '1'.
Reading option '-threads' ... matched as AVOption 'threads' with argument '0'.
Reading option '-map_metadata' ... matched as option 'map_metadata' (set metadata information of outfile from infile) with argument '-1'.
Reading option 'low.mp4' ... matched as output url.
Finished splitting the commandline.
Parsing a group of options: global .
Applying option v (set logging level) with argument debug.
Successfully parsed a group of options.
Parsing a group of options: input url input.mp4.
Successfully parsed a group of options.
Opening an input file: input.mp4.
[NULL @ 0x559fb7ecda40] Opening 'input.mp4' for reading
[file @ 0x559fb7ece4c0] Setting default whitelist 'file,crypto'
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x559fb7ecda40] Format mov,mp4,m4a,3gp,3g2,mj2 probed with size=2048 and score=100
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x559fb7ecda40] ISO: File Type Major Brand: isom
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x559fb7ecda40] Unknown dref type 0x206c7275 size 12
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x559fb7ecda40] Processing st: 0, edit list 0 - media time: 0, duration: 90
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x559fb7ecda40] Unknown dref type 0x206c7275 size 12
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x559fb7ecda40] Processing st: 1, edit list 0 - media time: 1024, duration: 12106376
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x559fb7ecda40] drop a frame at curr_cts: 0 @ 0
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x559fb7ecda40] Before avformat_find_stream_info() pos: 48725 bytes read:65536 seeks:0 nb_streams:2
[h264 @ 0x559fb7ecf6c0] nal_unit_type: 7(SPS), nal_ref_idc: 3
[h264 @ 0x559fb7ecf6c0] nal_unit_type: 8(PPS), nal_ref_idc: 3
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x559fb7ecda40] demuxer injecting skip 1024 / discard 0
[aac @ 0x559fb7ed1180] skip 1024 / discard 0 samples due to side data
[h264 @ 0x559fb7ecf6c0] nal_unit_type: 6(SEI), nal_ref_idc: 0
[h264 @ 0x559fb7ecf6c0] nal_unit_type: 5(IDR), nal_ref_idc: 3
[h264 @ 0x559fb7ecf6c0] Format yuvj420p chosen by get_format().
[h264 @ 0x559fb7ecf6c0] Reinit context to 480x368, pix_fmt: yuvj420p
[h264 @ 0x559fb7ecf6c0] no picture 
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x559fb7ecda40] All info found
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x559fb7ecda40] After avformat_find_stream_info() pos: 4059034 bytes read:98304 seeks:1 frames:46
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf57.83.100
  Duration: 00:04:34.55, start: 0.000000, bitrate: 122 kb/s
    Stream #0:0(und), 1, 1/90000: Video: h264 (High), 1 reference frame (avc1 / 0x31637661), yuvj420p(pc, left), 480x360 (480x368) [SAR 1:1 DAR 4:3], 0/1, 6375600 kb/s, 90k fps, 90k tbr, 90k tbn, 180k tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und), 45, 1/44100: Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 120 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
Successfully opened the file.
Parsing a group of options: output url low.mp4.
Applying option c:a (codec name) with argument libfdk_aac.
Applying option c:v (codec name) with argument libx264.
Applying option profile:v (set profile) with argument high.
Applying option vf (set video filters) with argument format=yuv420p.
Applying option sn (disable subtitle) with argument 1.
Applying option sample_fmt (set sample format) with argument s16.
Applying option ac (set number of audio channels) with argument 1.
Applying option map_metadata (set metadata information of outfile from infile) with argument -1.
Successfully parsed a group of options.
Opening an output file: low.mp4.
File 'low.mp4' already exists. Overwrite ? [y/N] y
[file @ 0x559fb7ef6e40] Setting default whitelist 'file,crypto'
Successfully opened the file.
detected 8 logical cores
[h264 @ 0x559fb7f2ee40] nal_unit_type: 7(SPS), nal_ref_idc: 3
[h264 @ 0x559fb7f2ee40] nal_unit_type: 8(PPS), nal_ref_idc: 3
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
  Stream #0:1 -> #0:1 (aac (native) -> aac (libfdk_aac))
Press [q] to stop, [?] for help
cur_dts is invalid st:0 (0) [init:0 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream)
[aac @ 0x559fb7ed3980] skip 1024 / discard 0 samples due to side data
cur_dts is invalid st:0 (0) [init:0 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream)
[graph_1_in_0_1 @ 0x559fb7f431c0] Setting 'time_base' to value '1/44100'
[graph_1_in_0_1 @ 0x559fb7f431c0] Setting 'sample_rate' to value '44100'
[graph_1_in_0_1 @ 0x559fb7f431c0] Setting 'sample_fmt' to value 'fltp'
[graph_1_in_0_1 @ 0x559fb7f431c0] Setting 'channel_layout' to value '0x3'
[graph_1_in_0_1 @ 0x559fb7f431c0] tb:1/44100 samplefmt:fltp samplerate:44100 chlayout:0x3
[format_out_0_1 @ 0x559fb8109140] Setting 'sample_fmts' to value 's16'
[format_out_0_1 @ 0x559fb8109140] Setting 'sample_rates' to value '96000|88200|64000|48000|44100|32000|24000|22050|16000|12000|11025|8000'
[format_out_0_1 @ 0x559fb8109140] Setting 'channel_layouts' to value '0x4'
[format_out_0_1 @ 0x559fb8109140] auto-inserting filter 'auto_resampler_0' between the filter 'Parsed_anull_0' and the filter 'format_out_0_1'
[AVFilterGraph @ 0x559fb7f3eb80] query_formats: 4 queried, 6 merged, 3 already done, 0 delayed
[auto_resampler_0 @ 0x559fb810a000] [SWR @ 0x559fb810a380] Using fltp internally between filters
[auto_resampler_0 @ 0x559fb810a000] [SWR @ 0x559fb810a380] Matrix coefficients:
[auto_resampler_0 @ 0x559fb810a000] [SWR @ 0x559fb810a380] FC: FL:0.500000 FR:0.500000 
[auto_resampler_0 @ 0x559fb810a000] ch:2 chl:stereo fmt:fltp r:44100Hz -> ch:1 chl:mono fmt:s16 r:44100Hz
[libfdk_aac @ 0x559fb7ef7080] Note, the VBR setting is unsupported and only works with some parameter combinations
cur_dts is invalid st:0 (0) [init:0 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream)
    Last message repeated 44 times
[h264 @ 0x559fb7f2ee40] nal_unit_type: 6(SEI), nal_ref_idc: 0
[h264 @ 0x559fb7f2ee40] nal_unit_type: 5(IDR), nal_ref_idc: 3
[h264 @ 0x559fb7f2ee40] Format yuvj420p chosen by get_format().
[h264 @ 0x559fb7f2ee40] Reinit context to 480x368, pix_fmt: yuvj420p
cur_dts is invalid st:0 (0) [init:0 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream)
    Last message repeated 1 times
[h264 @ 0x559fb7f2ee40] no picture 
cur_dts is invalid st:0 (0) [init:0 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream)
    Last message repeated 81 times
Too many packets buffered for output stream 0:1.
[AVIOContext @ 0x559fb7ed3780] Statistics: 0 seeks, 0 writeouts
[libfdk_aac @ 0x559fb7ef7080] 2 frames left in the queue on closing
[AVIOContext @ 0x559fb7ed6880] Statistics: 131072 bytes read, 2 seeks
Conversion failed!

编辑2:

原始文件由也使用ffmpeg的在线工具转换。源文件是带有mpeg封面的.mp3。但是我无法模拟在线工具的行为=将封面转换为一帧视频。

video ffmpeg
1个回答
0
投票

sample.mp4不能被大多数玩家玩,原因有二:

  • 有1个视频帧
  • 像素格式(yuv444p)不兼容

因为在HTML5中使用图像+音频是不可接受的,所以可以从损坏的MP4文件制作视频。由于存在错误,分两个步骤最容易做到。

  1. 提取图像:

    ffmpeg -i input.mp4 -frames:v 1 image.png
    
  2. 编码:

    ffmpeg -loop 1 -framerate 1 -i image.png -i input.mp4 -map 0:v -map 1:a -c:v libx264 -vf "scale='iw-mod(iw,2)':'ih-mod(ih,2)',format=yuv420p" -r 10 -movflags +faststart -shortest output.mp4
    
© www.soinside.com 2019 - 2024. All rights reserved.