# 交叉编译FFmpeg-avs2-avs3_可下载EXE Cross-compiling ffmpeg with AVS2 and AVS3 enabled
**Repository Path**: wwwlib/ffmpeg-windows-build-helpers-AVS2
## Basic Information
- **Project Name**: 交叉编译FFmpeg-avs2-avs3_可下载EXE Cross-compiling ffmpeg with AVS2 and AVS3 enabled
- **Description**: ffmpeg启用国标AVS/AVS2/AVS3
- **Primary Language**: Unknown
- **License**: GPL-3.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 2
- **Created**: 2021-10-20
- **Last Updated**: 2024-04-26
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
ffmpeg启用国标AVS2及AVS3编码
下载Windows_X64运行文件:
(https://gitee.com/zhengtianbo/ffmpeg-windows-build-helpers-AVS2/releases)
AVS2与libx265转码mp4对比测试
前提:相同视频,现有源码,ffmpeg缺省参数,即:
ffmpeg -i x.mp4 -vcodec avs2 x_avs2.mkv
ffmpeg -i x.mp4 -vcodec libx265 x_x265.mkv
速度:本人机器上AVS2远超libx265,是其近3.5倍。
文件:AVS2比libx265至少小近10%。
画质:主观评价两者画质相近。
参数speed_level调整画质:
```
ffmpeg -i 篮球测试视频一.mp4 -vcodec avs2 -speed_level 4 -acodec copy 篮球测试视频一_AVS2.mkv
```
speed_level越大画质越高但编码越慢.
自建ffmpeg步骤:
若已有ubuntu Linux,跳过前两步。
1. 在Windows 10启用Linux子系统,从微软商店搜索并安装ubuntu。
2. 在Windows运行ubuntu,设置Linu用户及口令。
4. 复制编译批文件到本地。
$ git clone https://gitee.com/zhengtianbo/ffmpeg-windows-build-helpers-AVS2.git
5. 编译ffmpeg。
$ sudo bash -c 'echo 0 > /proc/sys/fs/binfmt_misc/WSLInterop'
$ cd ffmpeg-windows-build-helpers
$ ./cross_compile_ffmpeg_u.sh
选3即Win64 (64-bit only).
若缺文件如编译工具,先按提示安装所需文件,如sudo apt update等等,再试。
注意:需重复多次运行cross_compile_ffmpeg_u.sh
若编译libsndfile出错,先试如下命令:
$ sudo dpkg -r --force-depends "libgc1c2" # remove old libgc
$ git clone git://github.com/ivmai/bdwgc.git
$ cd bdwgc
$ ./autogen.sh
$ ./configure --prefix=/usr && make -j # its default is the wrong directory? huh?
$ sudo make install
切换ffmpeg版本
库中脚本cross_compile_ffmpeg_u.sh所用ffmpeg版本为f901d75bf18c866933f90c052fb990736aee7c47, 匹配补丁文件Updatedavs2andaddedavs3codecs-f901d75bf18c866933f90c052fb990736aee7c47.patch. 若要用其他ffmpeg版本, 参考以下步骤:
1 同时修改cross_compile_ffmpeg_u.sh中的build_ffmpeg(), 如下:
```
build_ffmpeg() {
......
#TODO allow using local source directory
if [[ -z $ffmpeg_source_dir ]]; then
#Offical
do_git_checkout $ffmpeg_git_checkout $output_dir $ffmpeg_git_checkout_version || exit 1 #开启此句,下载最新版
#For AVS2+AVS3 ffmpeg:533d6030ca3e64c87aeb9d04917b716aa8341385 match the patch file (533d603_avs2-avs3.patch)
#do_git_checkout $ffmpeg_git_checkout $output_dir 533d6030ca3e64c87aeb9d04917b716aa8341385 || exit 1 #屏蔽AVS2/AVS3补丁对应版本
else
output_dir="${ffmpeg_source_dir}"
postpend_prefix="${output_dir}"
fi
if [[ $1 == "shared" ]]; then
postpend_configure_opts="--enable-shared --disable-static --prefix=${postpend_prefix}"
else
postpend_configure_opts="--enable-static --disable-shared --prefix=${postpend_prefix}"
fi
cd $output_dir
#apply_patch file://$patch_dir/frei0r_load-shared-libraries-dynamically.diff
#For AVS2+AVS3 ffmpeg:533d6030ca3e64c87aeb9d04917b716aa8341385
#git apply $patch_dir/ffmpeg-533d603_avs2-avs3.patch #屏蔽AVS2/AVS3补丁
.......
```
即屏蔽下载ffmpeg版本533d6030ca3e64c87aeb9d04917b716aa8341385及使用补丁的两句, 开启最新ffmpeg版本下载.
2 参照该补丁文件Updatedavs2andaddedavs3codecs-f901d75bf18c866933f90c052fb990736aee7c47.patch自行逐个修改和增加源文件. 也可开启以上提到的"git apply"补丁语句后运行cross_compile_ffmpeg_u.sh, 记下不成功文件再手工修改.
也可使用已合并源码.下载:
[已合并AVS2及AVS3的ffmpeg源码](https://gitee.com/zhengtianbo/ffmpeg-windows-build-helpers-AVS2/releases), 展开至某目录如ffmpeg-windows-build-helpers/sandbox/win64/ffmpeg_git_shared
在cross_compile_ffmpeg_u.sh设定ffmpeg_source_dir=$(pwd)/sandbox/win64/ffmpeg_git_shared
可能cross_compile_ffmpeg_u.sh及源文件还有一些地方需要调整, 如注释下载ffmpeg的语句和头文件目录等等.
更新AVS2/AVS3接口文件
AVS2接口文件来源:目前ffmpeg包含avs2接口文件, 新版在https://gitee.com/pkuvcl/FFmpegAVS2/tree/4.0_avs2_test/.
AVS3接口文件来源:目前ffmpeg无avs3接口文件, 来源https://github.com/uavs3/uavs3e_ffmpeg_interface.