Flutter FFMPEG:设置配置文件基线时出错

Posted

技术标签:

【中文标题】Flutter FFMPEG:设置配置文件基线时出错【英文标题】:Flutter FFMPEG: Error setting profile baseline 【发布时间】:2021-07-02 22:23:21 【问题描述】:

Flutter-ffmpeg 无法设置配置文件参数。 (我需要使用配置文件,这样渲染的视频才能在 WhatsApp 上播放)。

我正在将.bmp 图像转换为 mp4 视频。其他我已经测试了其他参数并且效果很好,它只是 -profile:v 似乎有一些问题。

除非我使用-profile:v baseline,否则一切正常。

void _runFFmpeg() async 
    var dir = await getApplicationDocumentsDirectory();
    var output = await getExternalStorageDirectory();
    String videoSize = '$ImageWidthx$ImageSize';
    print("$ImageWidthx$ImageSize");
    var arguments = [
      "-y", // replace output file if it already exists
      "-framerate", "30", // framrate
      "-video_size", videoSize,
      "-pixel_format", "yuv420p",
      "-i", "$output.path/frame_%d.bmp",  
      "-profile:v", "baseline",
      "-level", "3.0",
      "$output.path/test.mp4"
    ];
    
    _flutterFFmpeg
        .executeWithArguments(arguments)
        .then((rc) => print("FFmpeg process exited with rc $rc"));
 

    print("Done Rendering");
  

日志

D/flutter-ffmpeg(26672): Running FFmpeg with arguments: [-y, -framerate, 30, -video_size, 720x600, -pixel_format, yuv420p, -i, /storage/emulated/0/android/data/com.example.test/files/frame_%d.bmp, -profile:v, baseline, -level, 3.0, /storage/emulated/0/Android/data/com.example.test/files/test.mp4].
I/mobile-ffmpeg(26672): ffmpeg version v4.4-dev-416
I/mobile-ffmpeg(26672):  Copyright (c) 2000-2020 the FFmpeg developers
I/mobile-ffmpeg(26672):
I/mobile-ffmpeg(26672):   built with Android (6454773 based on r365631c2) clang version 9.0.8 (https://android.googlesource.com/toolchain/llvm-project 98c855489587874b2a325e7a516b99d838599c6f) (based on LLVM 9.0.8svn)
I/mobile-ffmpeg(26672):   configuration: --cross-prefix=aarch64-linux-android- --sysroot=/files/android-sdk/ndk/21.3.6528147/toolchains/llvm/prebuilt/linux-x86_64/sysroot --prefix=/home/taner/Projects/mobile-ffmpeg/prebuilt/android-arm64/ffmpeg --pkg-config=/usr/bin/pkg-config --enable-version3 --arch=aarch64 --cpu=armv8-a --cc=aarch64-linux-android24-clang --cxx=aarch64-linux-android24-clang++ --extra-libs='-L/home/taner/Projects/mobile-ffmpeg/prebuilt/android-arm64/cpu-features/lib -lndk_compat' --target-os=android --enable-neon --enable-asm --enable-inline-asm --enable-cross-compile --enable-pic --enable-jni --enable-optimizations --enable-swscale --enable-shared --enable-v4l2-m2m --disable-outdev=fbdev --disable-indev=fbdev --enable-small --disable-openssl --disable-xmm-clobber-test --disable-debug --enable-lto --disable-neon-clobber-test --disable-programs --disable-postproc --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-static --disable-sndio --disable-schannel --disable-securetransport --disable-xlib --disable-cuda --disable-cuvid --disable-nvenc --disable-vaapi --disable-vdpau --disable-videotoolbox --disable-audiotoolbox --disable-appkit --disable-alsa --disable-cuda --disable-cuvid --disable-nvenc --disable-vaapi --disable-vdpau --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-gmp --enable-gnutls --enable-libmp3lame --enable-libass --enable-iconv --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libxml2 --enable-libopencore-amrnb --enable-libshine --enable-libspeex --enable-libwavpack --enable-libkvazaar --enable-libx264 --enable-gpl --enable-libxvid --enable-gpl --enable-libx265 --enable-gpl --enable-libvidstab --enable-gpl --enable-libilbc --enable-libopus --enable-libsnappy --enable-libsoxr --enable-libaom --enable-libtwolame --disable-sdl2 --enable-libvo-amrwbenc --enable-zlib --enable-mediacodec
I/mobile-ffmpeg(26672):   libavutil      56. 55.100 / 56. 55.100
I/mobile-ffmpeg(26672):   libavcodec     58. 96.100 / 58. 96.100
I/mobile-ffmpeg(26672):   libavformat    58. 48.100 / 58. 48.100
I/mobile-ffmpeg(26672):   libavdevice    58. 11.101 / 58. 11.101
I/mobile-ffmpeg(26672):   libavfilter     7. 87.100 /  7. 87.100
I/mobile-ffmpeg(26672):   libswscale      5.  8.100 /  5.  8.100
I/mobile-ffmpeg(26672):   libswresample   3.  8.100 /  3.  8.100
I/mobile-ffmpeg(26672): Input #0, image2, from '/storage/emulated/0/Android/data/com.example.test/files/frame_%d.bmp':
I/mobile-ffmpeg(26672):   Duration:
I/mobile-ffmpeg(26672): 00:00:06.03
I/mobile-ffmpeg(26672): , start:
I/mobile-ffmpeg(26672): 0.000000
I/mobile-ffmpeg(26672): , bitrate:
I/mobile-ffmpeg(26672): N/A
I/mobile-ffmpeg(26672):
I/mobile-ffmpeg(26672):     Stream #0:0
I/mobile-ffmpeg(26672): : Video: bmp, yuv420p, 720x600
I/mobile-ffmpeg(26672): ,
I/mobile-ffmpeg(26672): 30 fps,
I/mobile-ffmpeg(26672): 30 tbr,
I/mobile-ffmpeg(26672): 30 tbn,
I/mobile-ffmpeg(26672): 30 tbc
I/mobile-ffmpeg(26672):
I/mobile-ffmpeg(26672): Stream mapping:
I/mobile-ffmpeg(26672):   Stream #0:0 -> #0:0
I/mobile-ffmpeg(26672):  (bmp (native) -> h264 (libx264))
I/mobile-ffmpeg(26672):
I/mobile-ffmpeg(26672): Press [q] to stop, [?] for help
W/mobile-ffmpeg(26672): [graph 0 input from stream 0:0 @ 0x7280948480] sws_param option is deprecated and ignored
E/mobile-ffmpeg(26672): [libx264 @ 0x7291ba8100] Error setting profile baseline.
I/mobile-ffmpeg(26672): [libx264 @ 0x7291ba8100] Possible profiles:
I/mobile-ffmpeg(26672): [libx264 @ 0x7291ba8100]  baseline
I/mobile-ffmpeg(26672): [libx264 @ 0x7291ba8100]  main
I/mobile-ffmpeg(26672): [libx264 @ 0x7291ba8100]  high
I/mobile-ffmpeg(26672): [libx264 @ 0x7291ba8100]  high10
I/mobile-ffmpeg(26672): [libx264 @ 0x7291ba8100]  high422
I/mobile-ffmpeg(26672): [libx264 @ 0x7291ba8100]  high444
I/mobile-ffmpeg(26672): [libx264 @ 0x7291ba8100]
E/mobile-ffmpeg(26672): Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
I/mobile-ffmpeg(26672): Conversion failed!
D/flutter-ffmpeg(26672): FFmpeg exited with rc: 1
E/UIFirst (26672): failed to open /proc/26672/stuck_info, No such file or directory
I/chatty  (26672): uid=12724(com.example.test) identical 2 lines
3
E/UIFirst (26672): failed to open /proc/26672/stuck_info, No such file or directory
I/chatty  (26672): uid=12724(com.example.test) identical 1 line
E/UIFirst (26672): failed to open /proc/26672/stuck_info, No such file or directory

颤振医生-v

[√] Flutter (Channel stable, 2.0.1, on Microsoft Windows [Version 10.0.18362.836], locale en-US)
    • Flutter version 2.0.1 at C:\Users\Dell\flutter
    • Framework revision c5a4b4029c (5 weeks ago), 2021-03-04 09:47:48 -0800
    • Engine revision 40441def69
    • Dart version 2.12.0
[√] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
    • Android SDK at C:\Users\Dell\AppData\Local\Android\sdk
    • Platform android-30, build-tools 29.0.3
    • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
    • Java version OpenJDK Runtime Environment (build 1.8.0_212-release-1586-b04)
    • All Android licenses accepted.
[√] Chrome - develop for the web
    • Chrome at C:\Program Files (x86)\Google\Chrome\Application\chrome.exe
[√] Android Studio (version 3.6)
    • Android Studio at C:\Program Files\Android\Android Studio
    • Flutter plugin version 45.1.1
    • Dart plugin version 192.7761
    • Java version OpenJDK Runtime Environment (build 1.8.0_212-release-1586-b04)
[√] VS Code (version 1.55.0)
    • VS Code at C:\Users\Dell\AppData\Local\Programs\Microsoft VS Code
    • Flutter extension version 3.21.0
[√] Connected device (2 available)
    • RMX1801 (mobile) • 8843cc23 • android-arm64  • Android 10 (API 29)
    • Chrome (web)     • chrome   • web-javascript • Google Chrome 89.0.4389.114
• No issues found!

我也尝试过将包更改为 min-gpl、https-gpl 和视频,但没有任何变化。

【问题讨论】:

我也有类似的问题,但可能是格式问题,你能看看我的question吗? 【参考方案1】:

我只熟悉FFmpeg,不熟悉Flutter的插件,所以不能轻易测试。

但我怀疑您使用缩放作为输入选项。

要将缩放应用到输出,请将"-i", "$output.path/frame_%d.bmp", 移动到-y 之后。

如果您的日志仍然显示 [graph 0 input from stream 0:0 @ 0x7280948480] sws_param option is deprecated and ignored,请使用不同的缩放选项:

我会使用"-vf", "scale=720:600",,而不是"-video_size", videoSize,

如果这没有帮助,请尝试将-profile:v 替换为-vprofile-profile

【讨论】:

感谢您提供如此详尽的答案。我尝试了你建议的一切,但没有改变错误。但我可能会得到一个有用的结果。当我只使用 '-profile' 时,日志说使用 '-profile:a" 或 '-profile:v' 。由于 '-profile:v' 不起作用,我使用了 '-profile:a' 并且确实得到了输出没有任何错误,但问题与没有配置文件参数的问题相同。我得到一个视频,它在我的手机上运行,​​但在社交媒体上分享视频时出现灰屏。所以,'-profile:v' 给出错误,并且“profile:a”没有给出错误,但它没有让视频在 WhatsApp 上播放。知道为什么吗? 不客气!所以问题是[libx264 @ 0x7291ba8100] Error setting profile baseline.,这很奇怪,因为baseline 是一个有效的选项。但这可能是由于像here 这样的错误像素格式而发生的。但是您的像素格式似乎是正确的。使用 1) 不同的配置文件 mainhigh 测试您的代码。 2) 不同的源图像格式,如PNGJPG。 3) scale= 选项是否摆脱了sws_param option is deprecated and ignored 我已经使用了所有配置文件选项,但都不起作用。并且 no scale= 选项对 sws_param 没有帮助。得到同样的错误。我尝试了除个人资料之外的其他方法来使视频与 WhatsApp 兼容但不起作用。我也做的是首先渲染没有配置文件的视频,然后使用渲染视频的配置文件选项,它没有游戏任何错误,但视频仍然无法在 whatsapp 上运行。我认为 'sws_param 选项已被弃用并被忽略是真正的问题。但同样我对 ffmpeg 了解不多。 根据this,video_size 是“描述帧大小的字符串(而不是-s 之前的-i)”。所以这似乎是错误的选择。请再试一次"-s", "720x600",

以上是关于Flutter FFMPEG:设置配置文件基线时出错的主要内容,如果未能解决你的问题,请参考以下文章

为 android 配置 Flutter“sign_in_with_apple”时出现问题

Flutter音视频裁剪flutter_ffmpeg踩坑笔记

mysql安全基线设置

在配置 ffmpeg 时出现错误“未找到 x264”

flutter_ffmpeg 包名

将FFmpeg作为php中的进程运行时出现超时错误