通过ffmpeg制作动画出错(python3.9)

问题描述 投票:0回答:2

当我尝试通过 ffmpeg 制作用于奶牛跟踪的 2D 动画图(匹配 2 个摄像机视图)时,出现以下错误。


raise subprocess.CalledProcessError(subprocess.CalledProcessError: Command '['ffmpeg', '-f', 'rawvideo', '-vcodec', 'rawvideo', '-s', '4000x4000', '-pix_fmt', 'rgba', '-r', '5', '-loglevel', 'error', '-i', 'pipe:', '-vcodec', 'h264', '-pix_fmt', 'yuv420p', '-metadata', 'artist=Me', '-y', '../out_detect/run7/TRACKS_ANIMATION_fused.mp4']' returned non-zero exit status 1.

以下是完整错误:


Plotting the last 1800.9391813674797 frames.
INFO:Animation.save using <class 'matplotlib.animation.FFMpegWriter'>
INFO:MovieWriter._run: running command: ffmpeg -f rawvideo -vcodec rawvideo -s 4000x4000 -pix_fmt rgba -r 5 -loglevel error -i pipe: -vcodec h264 -pix_fmt yuv420p -metadata artist=Me -y ../out_detect/run7/TRACKS_ANIMATION_fused.mp4
WARNING:MovieWriter stderr:
[libopenh264 @ 0x55b93df81fc0] [OpenH264] this = 0x0x55b93df8ef10, Error:ParamValidationExt(), width > 0, height > 0, width * height <= 9437184, invalid 4000 x 4000 in dependency layer settings!
[libopenh264 @ 0x55b93df81fc0] [OpenH264] this = 0x0x55b93df8ef10, Error:WelsInitEncoderExt(), ParamValidationExt failed return 2.
[libopenh264 @ 0x55b93df81fc0] [OpenH264] this = 0x0x55b93df8ef10, Error:CWelsH264SVCEncoder::Initialize(), WelsInitEncoderExt failed.
[libopenh264 @ 0x55b93df81fc0] Initialize failed
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
   

 Traceback (most recent call last):
      File "/home/rom/anaconda3/envs/cow_tracking_env/lib/python3.9/site-packages/matplotlib/animation.py", line 236, in saving
        yield self
      File "/home/rom/anaconda3/envs/cow_tracking_env/lib/python3.9/site-packages/matplotlib/animation.py", line 1095, in save
        writer.grab_frame(**savefig_kwargs)
      File "/home/rom/anaconda3/envs/cow_tracking_env/lib/python3.9/site-packages/matplotlib/animation.py", line 353, in grab_frame
        self.fig.savefig(self._proc.stdin, format=self.frame_format,
      File "/home/rom/anaconda3/envs/cow_tracking_env/lib/python3.9/site-packages/matplotlib/figure.py", line 3012, in savefig
        self.canvas.print_figure(fname, **kwargs)
      File "/home/rom/anaconda3/envs/cow_tracking_env/lib/python3.9/site-packages/matplotlib/backend_bases.py", line 2314, in print_figure
        result = print_method(
      File "/home/rom/anaconda3/envs/cow_tracking_env/lib/python3.9/site-packages/matplotlib/backend_bases.py", line 1643, in wrapper
        return func(*args, **kwargs)
      File "/home/rom/anaconda3/envs/cow_tracking_env/lib/python3.9/site-packages/matplotlib/_api/deprecation.py", line 412, in wrapper
        return func(*inner_args, **inner_kwargs)
      File "/home/rom/anaconda3/envs/cow_tracking_env/lib/python3.9/site-packages/matplotlib/backends/backend_agg.py", line 486, in print_raw
        fh.write(renderer.buffer_rgba())
    BrokenPipeError: [Errno 32] Broken pipe
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/home/rom/PycharmProjects/cow_tracking_package/tracking-cows/main.py", line 330, in <module>
    inference_tracking_video(opt=args, device=dev, detector=detector, keypoint_tfm=keypoint_tfm,
  File "/home/rom/PycharmProjects/cow_tracking_package/tracking-cows/tracking.py", line 325, in inference_tracking_video
    postprocess_tracking_results(track_args=track_args, cfg_postprocess=cfg_matching_parameters.POSTPROCESS,
  File "/home/rom/PycharmProjects/cow_tracking_package/tracking-cows/postprocessing/postprocess_results.py", line 90, in postprocess_tracking_results
    postprocess_trajectories(track_args=track_args, analysis_matching_cfg=cfg_analysis)
  File "/home/rom/PycharmProjects/cow_tracking_package/tracking-cows/postprocessing/postprocess_results.py", line 58, in postprocess_trajectories
    analyse_trajectories(analysis_arguments, full_width, full_height, video_fps, frame_rate_animation)
  File "/home/rom/PycharmProjects/cow_tracking_package/tracking-cows/postprocessing/trajectory_postprocess.py", line 115, in analyse_trajectories
    create_virtual_map_animation_final(opt.save_dir, final_matching_both_cams, color_dict3, full_width,
  File "/home/rom/PycharmProjects/cow_tracking_package/tracking-cows/output/output_plot_fused_trajectory_animation.py", line 236, in create_virtual_map_animation_final
    virtual_map_animation.save(traj_file_path, writer=writer)
  File "/home/rom/anaconda3/envs/cow_tracking_env/lib/python3.9/site-packages/matplotlib/animation.py", line 1095, in save
    writer.grab_frame(**savefig_kwargs)
  File "/home/rom/anaconda3/envs/cow_tracking_env/lib/python3.9/contextlib.py", line 137, in __exit__
    self.gen.throw(typ, value, traceback)
  File "/home/rom/anaconda3/envs/cow_tracking_env/lib/python3.9/site-packages/matplotlib/animation.py", line 238, in saving
    self.finish()
  File "/home/rom/anaconda3/envs/cow_tracking_env/lib/python3.9/site-packages/matplotlib/animation.py", line 344, in finish
    self._cleanup()  # Inline _cleanup() once cleanup() is removed.
  File "/home/rom/anaconda3/envs/cow_tracking_env/lib/python3.9/site-packages/matplotlib/animation.py", line 375, in _cleanup
    raise subprocess.CalledProcessError(
subprocess.CalledProcessError: Command '['ffmpeg', '-f', 'rawvideo', '-vcodec', 'rawvideo', '-s', '4000x4000', '-pix_fmt', 'rgba', '-r', '5', '-loglevel', 'error', '-i', 'pipe:', '-vcodec', 'h264', '-pix_fmt', 'yuv420p', '-metadata', 'artist=Me', '-y', '../out_detect/run7/TRACKS_ANIMATION_fused.mp4']' returned non-zero exit status 1.

ffmpeg 版本是 4.3,使用 gcc 7.3.0 构建。操作系统是 Ubuntu 20.04 我的 conda 环境如下。

channels:
  - pytorch
  - defaults
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=4.5=1_gnu
  - blas=1.0=mkl
  - bzip2=1.0.8=h7b6447c_0
  - ca-certificates=2021.10.26=h06a4308_2
  - certifi=2021.10.8=py39h06a4308_2
  - cudatoolkit=11.3.1=h2bc3f7f_2
  - ffmpeg=4.3=hf484d3e_0
  - freetype=2.11.0=h70c0345_0
  - giflib=5.2.1=h7b6447c_0
  - gmp=6.2.1=h2531618_2
  - gnutls=3.6.15=he1e5248_0
  - intel-openmp=2021.4.0=h06a4308_3561
  - jpeg=9d=h7f8727e_0
  - lame=3.100=h7b6447c_0
  - lcms2=2.12=h3be6417_0
  - ld_impl_linux-64=2.35.1=h7274673_9
  - libffi=3.3=he6710b0_2
  - libgcc-ng=9.3.0=h5101ec6_17
  - libgomp=9.3.0=h5101ec6_17
  - libiconv=1.15=h63c8f33_5
  - libidn2=2.3.2=h7f8727e_0
  - libpng=1.6.37=hbc83047_0
  - libstdcxx-ng=9.3.0=hd4cf53a_17
  - libtasn1=4.16.0=h27cfd23_0
  - libtiff=4.2.0=h85742a9_0
  - libunistring=0.9.10=h27cfd23_0
  - libuv=1.40.0=h7b6447c_0
  - libwebp=1.2.0=h89dd481_0
  - libwebp-base=1.2.0=h27cfd23_0
  - lz4-c=1.9.3=h295c915_1
  - mkl=2021.4.0=h06a4308_640
  - mkl-service=2.4.0=py39h7f8727e_0
  - mkl_fft=1.3.1=py39hd3c417c_0
  - mkl_random=1.2.2=py39h51133e4_0
  - ncurses=6.3=h7f8727e_2
  - nettle=3.7.3=hbbd107a_1
  - numpy=1.21.2=py39h20f2e39_0
  - numpy-base=1.21.2=py39h79a1101_0
  - olefile=0.46=pyhd3eb1b0_0
  - openh264=2.1.0=hd408876_0
  - openssl=1.1.1m=h7f8727e_0
  - pillow=8.4.0=py39h5aabda8_0
  - pip=21.2.4=py39h06a4308_0
  - python=3.9.7=h12debd9_1
  - pytorch=1.10.0=py3.9_cuda11.3_cudnn8.2.0_0
  - pytorch-mutex=1.0=cuda
  - readline=8.1=h27cfd23_0
  - setuptools=58.0.4=py39h06a4308_0
  - six=1.16.0=pyhd3eb1b0_0
  - sqlite=3.36.0=hc218d9a_0
  - tk=8.6.11=h1ccaba5_0
  - torchaudio=0.10.0=py39_cu113
  - torchvision=0.11.1=py39_cu113
  - typing_extensions=3.10.0.2=pyh06a4308_0
  - wheel=0.37.0=pyhd3eb1b0_1
  - xz=5.2.5=h7b6447c_0
  - zlib=1.2.11=h7b6447c_3
  - zstd=1.4.9=haebb681_0
  - pip:
    - absl-py==1.0.0
    - addict==2.4.0
    - cachetools==4.2.4
    - charset-normalizer==2.0.8
    - cloudpickle==2.0.0
    - cycler==0.11.0
    - cython==0.29.24
    - docutils==0.18.1
    - easydict==1.9
    - filterpy==1.4.5
    - fonttools==4.28.2
    - geohash2==1.1
    - google-auth==2.3.3
    - google-auth-oauthlib==0.4.6
    - grpcio==1.42.0
    - idna==3.3
    - imageio==2.13.5
    - importlib-metadata==4.8.2
    - joblib==1.1.0
    - kiwisolver==1.3.2
    - loguru==0.6.0
    - markdown==3.3.6
    - matplotlib==3.5.0
    - natsort==8.0.2
    - networkx==2.6.3
    - oauthlib==3.1.1
    - opencv-python==4.5.4.60
    - packaging==21.3
    - pandas==1.3.4
    - protobuf==3.19.1
    - pyasn1==0.4.8
    - pyasn1-modules==0.2.8
    - pycocotools==2.0.4
    - pyparsing==3.0.6
    - pyqt5==5.15.6
    - pyqt5-qt5==5.15.2
    - pyqt5-sip==12.9.0
    - python-dateutil==2.8.2
    - pytz==2021.3
    - pytz-deprecation-shim==0.1.0.post0
    - pywavelets==1.2.0
    - pyyaml==6.0
    - requests==2.26.0
    - requests-oauthlib==1.3.0
    - rsa==4.8
    - scikit-image==0.19.1
    - scikit-learn==1.0.2
    - scipy==1.7.3
    - seaborn==0.11.2
    - setuptools-scm==6.3.2
    - shapely==1.8.0
    - sklearn==0.0
    - split-folders==0.4.3
    - tabulate==0.8.9
    - tensorboard==2.7.0
    - tensorboard-data-server==0.6.1
    - tensorboard-plugin-wit==1.8.0
    - terminaltables==3.1.10
    - thop==0.0.31-2005241907
    - threadpoolctl==3.1.0
    - tifffile==2021.11.2
    - timm==0.4.12
    - tomli==1.2.2
    - tqdm==4.62.3
    - traja==0.2.8
    - tzdata==2021.5
    - tzlocal==4.1
    - urllib3==1.26.7
    - werkzeug==2.0.2
    - yacs==0.1.8
    - yapf==0.32.0
    - zipp==3.6.0

我还通过conda安装了ffmpy。

如果有人能帮助我,我将非常感激。

python ffmpeg
2个回答
1
投票

我通过重新安装ffmpeg解决了这个问题。 首先,我考虑到bin目录下的ffmpeg和conda ffmpeg有冲突,所以我先通过

删除了bin目录下的ffmpeg
$ sudo apt-get remove ffmpeg libav-tools
$ sudo apt-get autoremove ffmpeg

此时CUDA和nvidia驱动也被抹掉,必须重新安装。

然后重新启动计算机。

之后,我执行创建2D动画地图代码,但出现了同样的错误。

所以我最后删除了conda ffmpeg和pip ffmpy并重新安装了,(此时torchvision也被删除了,我不得不重新安装)

$ conda uninstall ffmpeg
$ pip uninstall ffmpy
$ conda install -c pytorch torchvision

问题就解决了! ffmpeg 工作正常。 我也不知道到底是什么问题。


0
投票

您安装的 ffmepg 程序似乎不兼容。重新安装你的 ffmpeg:

$ conda uninstall ffmpeg
$ conda install conda-forge::ffmpeg

应该可以。如果没有,尽管不太可能,请尝试使用 homebrew 重新安装 ffmpeg。

$brew uninstall ffmpeg
$brew install ffmpeg
© www.soinside.com 2019 - 2024. All rights reserved.