您尚未登录。

#1 2024-07-14 19:36:32

BreadCat209
K.I.S.S.
注册时间: 2023-09-09
帖子: 203

ffmpeg问题

我使用达芬奇剪辑,这个软件的免费版无法打开我的obs默认输出的mkv的视频编码,我查阅archwiki发现了如下命令

ffmpeg -i input.mp4 -c:v dnxhd -profile:v dnxhr_hq -pix_fmt yuv422p -c:a pcm_s16le -f mov output.mov

这样就可以正常打开这个文件了,但是有个问题:
原文件:91M,目标文件:20G,文件大了至少200倍!
求问有什么比较好的解决方法
.
附:

OBS:
码率:2500Kbps(视频),160(音频)
编码器:软件(x264)
编码器预设:veryfast
音频编码器:aac
录像质量:高质量
中等文件大小
格式:matroska(.mkv)

[mbm@ArchLinux:~]$ sudo rm -rf /*

离线

#2 2024-07-14 19:44:27

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,961
个人网站

Re: ffmpeg问题

你这是达芬奇的问题呀。解决方案取决于达芬奇支持什么样的编码。

离线

#3 2024-07-14 19:53:11

keence
会员
注册时间: 2024-02-20
帖子: 42

Re: ffmpeg问题

mp4呢,这个格式剪辑软件应该都支持吧,ffmpeg转码mp4,或者obs输出改mp4试试

看了下我的obs,默认的mkv应该是h.264+aac编码的吧,那应该可以`ffmpeg -i input.mkv -vcodec copy -acodec copy output.mp4`

最近编辑记录 keence (2024-07-14 20:01:59)

离线

#4 2024-07-14 21:45:45

BreadCat209
K.I.S.S.
注册时间: 2023-09-09
帖子: 203

Re: ffmpeg问题

keence 说:

mp4呢,这个格式剪辑软件应该都支持吧,ffmpeg转码mp4,或者obs输出改mp4试试

看了下我的obs,默认的mkv应该是h.264+aac编码的吧,那应该可以`ffmpeg -i input.mkv -vcodec copy -acodec copy output.mp4`

跟这个后缀没关系,试过输出mp4也不行,obs里没找到达芬奇能识别的编码,我回头试试你的这个


[mbm@ArchLinux:~]$ sudo rm -rf /*

离线

#5 2024-07-14 22:20:41

keence
会员
注册时间: 2024-02-20
帖子: 42

Re: ffmpeg问题

看看输出的mp4格式。
ffmpeg -i xxxx.mp4

找个ai问了下,达芬奇是支持mp4和mkv的,还自带转码功能,我也不知道为啥了

根据wiki,obs里视频用av1编码,音频用mp3或者PCM编码试试

最近编辑记录 keence (2024-07-14 22:51:37)

离线

#6 2024-07-15 14:20:19

BreadCat209
K.I.S.S.
注册时间: 2023-09-09
帖子: 203

Re: ffmpeg问题

keence 说:

看看输出的mp4格式。
ffmpeg -i xxxx.mp4

找个ai问了下,达芬奇是支持mp4和mkv的,还自带转码功能,我也不知道为啥了

根据wiki,obs里视频用av1编码,音频用mp3或者PCM编码试试

其实不是用不了,是没转码之前的文件压根就不显示,媒体夹里只有转过的文件


[mbm@ArchLinux:~]$ sudo rm -rf /*

离线

#7 2024-07-15 18:29:21

BreadCat209
K.I.S.S.
注册时间: 2023-09-09
帖子: 203

Re: ffmpeg问题

keence 说:

看看输出的mp4格式。
ffmpeg -i xxxx.mp4

找个ai问了下,达芬奇是支持mp4和mkv的,还自带转码功能,我也不知道为啥了

根据wiki,obs里视频用av1编码,音频用mp3或者PCM编码试试

emm……没有这几个选项,是有什么包没装吗?


[mbm@ArchLinux:~]$ sudo rm -rf /*

离线

#8 2024-07-15 22:51:37

anlorsp
会员
注册时间: 2021-11-28
帖子: 46

Re: ffmpeg问题

obs的录像编码器好像只有硬件av1,大多数显卡恐怕都不支持av1编码,我知道支持的只有RTX 40系以上显卡和intel的新架构显卡。我这里是有显示硬件(qsv,av1)编码的,你可能是硬件不支持。你可能还是需要用ffmpeg转码。
你用

 ffmpeg --codecs | grep 'av1' 

在输出中找类似

DEV.L. av1                  Alliance for Open Media AV1 (decoders: libdav1d libaom-av1 av1 av1_cuvid av1_qsv) (encoders: libaom-av1 librav1e libsvtav1 av1_nvenc av1_qsv av1_amf av1_vaapi)

这样的片段,然后从encoders里面选一个替换命令中的dnxhd,删除-profile:v dnxhr_hq ,就能实现av1编码了。
比如,我比较喜欢的转码命令:

 ffmpeg -i input.mp4 -c:v libsvtav1 -pix_fmt yuv422p -c:a pcm_s16le output.mp4 

实际上-pix_fmt yuv422p这个选项也不一定需要。
不过转av1这种有损压缩格式会影响视频质量,需尽量减少转码次数。

最近编辑记录 anlorsp (2024-07-15 23:05:06)

离线

#9 2024-07-15 23:05:14

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,961
个人网站

Re: ffmpeg问题

av1 的话,我喜欢的参数是 -rc_mode CQP -qp 32 -preset 6 -svtav1-params tune=0。(qp 值按需调整)

离线

#10 2024-07-18 11:03:42

驿窗
驿窗
所在地: 基础开源研究
注册时间: 2016-06-03
帖子: 928
个人网站

Re: ffmpeg问题

BreadCat209 说:
keence 说:

mp4呢,这个格式剪辑软件应该都支持吧,ffmpeg转码mp4,或者obs输出改mp4试试

看了下我的obs,默认的mkv应该是h.264+aac编码的吧,那应该可以`ffmpeg -i input.mkv -vcodec copy -acodec copy output.mp4`

跟这个后缀没关系,试过输出mp4也不行,obs里没找到达芬奇能识别的编码,我回头试试你的这个

你输出mp4时的命令是什么样的,打上来看一下。如果还是用dnxhd编码器,输出的文件尺寸应该没什么变化。

你的mkv编码格式是x264的,这个x264在DaVinci Resolve支持清单里好像没有,即达芬奇不支持这个格式输入;在obs设置里看一下还有啥其它编码格式能选。

你的文件后缀是.mkv,这个有必要确认一下。mkv格式不适合后期编辑,反而比较适合屏幕录制,因为mkv支持录制暂停后继续录制。在obs的设置里,可以把mkv改成mp4,mp4非常适合后期编辑,但可能不支持录制暂停后继续录制。二者权衡一下,折衷方案可以考虑"分片mp4",据说即方便后期编辑,又支持录制暂停,但我没试过。

mp4是封装格式,不是视频编码格式,仅指定mp4输出而不修改视频编码的话,文件只是换了个后缀名而已,里子没变化,所以文件大小通常也不会有变化。

你命令中的dnxhd应该是导致目标文件尺寸过大的主要原因,这是dnxhd编码格式的特点: obs录制的mkv, 视频x264编码,码率是2500Kbps, 即2.5M; 而dnxhd编码的码率很可能到100M以上。 dnxhd是可以被达芬奇免费版 支持的,如果必须 用达芬奇,就查一下免费版达芬奇除了支持dnxhd编码输入,还支持其它什么编码输入,找有没有压缩率大的。或者,可以考虑用开源的工具,比如blender、kdenlive、shotcut什么的,这些工具应该都支持x264输入。

不过,很多视频剪辑通常建议使用dnxhd编码输入,因为视频质量损失最小。剪辑过程用代理处理,输出时编码用h264/h265之类的压缩。

(mp4文件表示封装成mp4,mp4文件内部的视频编码格式才能决定文件的大小,mp4封装本身不能决定文件大小,mkv也一样。原文件只有91MB,应该是因为使用了x264编码的原因。)

有一个尝试可以看看:
在你原来那条命令的yuv422p后面加上 "-b:v 100M" 这个参数,100这个值可以修改,比如减小到60,它会影响输出视频的文件体积,但也会明显导致视频质量下降,质量太差就调高到150或更高:

ffmpeg -i input.mp4 -c:v dnxhd -profile:v dnxhr_hq -pix_fmt yuv422p -b:v 100M -c:a pcm_s16le -f mov output.mov

再或者改一下-profile:v后面的参数:

ffmpeg -i input.mp4 -c:v dnxhd -profile:v dnxhr_lb -pix_fmt yuv422p -c:a pcm_s16le -f mov output.mov

最近编辑记录 驿窗 (2024-07-18 12:17:00)


开源/Linux大众化,从驿窗开始~

离线

#11 2024-07-18 17:57:58

BreadCat209
K.I.S.S.
注册时间: 2023-09-09
帖子: 203

Re: ffmpeg问题

驿窗 说:
BreadCat209 说:
keence 说:

mp4呢,这个格式剪辑软件应该都支持吧,ffmpeg转码mp4,或者obs输出改mp4试试

看了下我的obs,默认的mkv应该是h.264+aac编码的吧,那应该可以`ffmpeg -i input.mkv -vcodec copy -acodec copy output.mp4`

跟这个后缀没关系,试过输出mp4也不行,obs里没找到达芬奇能识别的编码,我回头试试你的这个

你输出mp4时的命令是什么样的,打上来看一下。如果还是用dnxhd编码器,输出的文件尺寸应该没什么变化。

你的mkv编码格式是x264的,这个x264在DaVinci Resolve支持清单里好像没有,即达芬奇不支持这个格式输入;在obs设置里看一下还有啥其它编码格式能选。

你的文件后缀是.mkv,这个有必要确认一下。mkv格式不适合后期编辑,反而比较适合屏幕录制,因为mkv支持录制暂停后继续录制。在obs的设置里,可以把mkv改成mp4,mp4非常适合后期编辑,但可能不支持录制暂停后继续录制。二者权衡一下,折衷方案可以考虑"分片mp4",据说即方便后期编辑,又支持录制暂停,但我没试过。

mp4是封装格式,不是视频编码格式,仅指定mp4输出而不修改视频编码的话,文件只是换了个后缀名而已,里子没变化,所以文件大小通常也不会有变化。

你命令中的dnxhd应该是导致目标文件尺寸过大的主要原因,这是dnxhd编码格式的特点: obs录制的mkv, 视频x264编码,码率是2500Kbps, 即2.5M; 而dnxhd编码的码率很可能到100M以上。 dnxhd是可以被达芬奇免费版 支持的,如果必须 用达芬奇,就查一下免费版达芬奇除了支持dnxhd编码输入,还支持其它什么编码输入,找有没有压缩率大的。或者,可以考虑用开源的工具,比如blender、kdenlive、shotcut什么的,这些工具应该都支持x264输入。

不过,很多视频剪辑通常建议使用dnxhd编码输入,因为视频质量损失最小。剪辑过程用代理处理,输出时编码用h264/h265之类的压缩。

(mp4文件表示封装成mp4,mp4文件内部的视频编码格式才能决定文件的大小,mp4封装本身不能决定文件大小,mkv也一样。原文件只有91MB,应该是因为使用了x264编码的原因。)

有一个尝试可以看看:
在你原来那条命令的yuv422p后面加上 "-b:v 100M" 这个参数,100这个值可以修改,比如减小到60,它会影响输出视频的文件体积,但也会明显导致视频质量下降,质量太差就调高到150或更高:

ffmpeg -i input.mp4 -c:v dnxhd -profile:v dnxhr_hq -pix_fmt yuv422p -b:v 100M -c:a pcm_s16le -f mov output.mov

再或者改一下-profile:v后面的参数:

ffmpeg -i input.mp4 -c:v dnxhd -profile:v dnxhr_lb -pix_fmt yuv422p -c:a pcm_s16le -f mov output.mov

比原来小了,但是从96M到5.8G还是大了些(两种方法都是这个大小)

❯ ll
Permissions Size User Date Modified Name
.rw-r--r--   96M mbm  14 7月  19:21  '2024-07-14 19-16-04.mkv'
.rw-r--r--  5.8G mbm  18 7月  17:35  output.mov
.rw-r--r--  5.8G mbm  18 7月  17:55  output1.mov

[mbm@ArchLinux:~]$ sudo rm -rf /*

离线

#12 2024-07-18 18:18:22

BreadCat209
K.I.S.S.
注册时间: 2023-09-09
帖子: 203

Re: ffmpeg问题

anlorsp 说:

obs的录像编码器好像只有硬件av1,大多数显卡恐怕都不支持av1编码,我知道支持的只有RTX 40系以上显卡和intel的新架构显卡。我这里是有显示硬件(qsv,av1)编码的,你可能是硬件不支持。你可能还是需要用ffmpeg转码。
你用

 ffmpeg --codecs | grep 'av1' 

在输出中找类似

DEV.L. av1                  Alliance for Open Media AV1 (decoders: libdav1d libaom-av1 av1 av1_cuvid av1_qsv) (encoders: libaom-av1 librav1e libsvtav1 av1_nvenc av1_qsv av1_amf av1_vaapi)

这样的片段,然后从encoders里面选一个替换命令中的dnxhd,删除-profile:v dnxhr_hq ,就能实现av1编码了。
比如,我比较喜欢的转码命令:

 ffmpeg -i input.mp4 -c:v libsvtav1 -pix_fmt yuv422p -c:a pcm_s16le output.mp4 

实际上-pix_fmt yuv422p这个选项也不一定需要。
不过转av1这种有损压缩格式会影响视频质量,需尽量减少转码次数。

它提示没有这个选项……

❯ ffmpeg --codecs | grep 'av1'
ffmpeg version n7.0.1 Copyright (c) 2000-2024 the FFmpeg developers
  built with gcc 14.1.1 (GCC) 20240522
  configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-amf --enable-avisynth --enable-cuda-llvm --enable-lto --enable-fontconfig --enable-frei0r --enable-gmp --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libdav1d --enable-libdrm --enable-libdvdnav --enable-libdvdread --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libharfbuzz --enable-libiec61883 --enable-libjack --enable-libjxl --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libplacebo --enable-libpulse --enable-librav1e --enable-librsvg --enable-librubberband --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpl --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-libzimg --enable-mbedtls --enable-nvdec --enable-nvenc --enable-opencl --enable-opengl --enable-shared --enable-vapoursynth --enable-version3 --enable-vulkan
  libavutil      59.  8.100 / 59.  8.100
  libavcodec     61.  3.100 / 61.  3.100
  libavformat    61.  1.100 / 61.  1.100
  libavdevice    61.  1.100 / 61.  1.100
  libavfilter    10.  1.100 / 10.  1.100
  libswscale      8.  1.100 /  8.  1.100
  libswresample   5.  1.100 /  5.  1.100
  libpostproc    58.  1.100 / 58.  1.100
Unrecognized option '-codecs'.
Error splitting the argument list: Option not found

不过你那个可以用,96M转码后156M


[mbm@ArchLinux:~]$ sudo rm -rf /*

离线

#13 2024-07-18 18:25:18

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,961
个人网站

Re: ffmpeg问题

多了一个 -。

离线

页脚