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



当我尝试通过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 env在下面。

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。

如果有人能帮助我,我将不胜感激。

我通过重新安装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工作正常。我也不知道到底是什么问题。

最新更新