ffmpeg转换mp4或者其他格式到davinci_Resolve能够识别的文件格式

Catalogue
  1. 1. 硬件加速转码
  2. 2. 视频转gif
  3. 3. 使用ffmpeg批量转码(使用bash脚本实现)
  4. 4. 参考资料

xxxx

达芬奇linux免费版无法使用H264,H265解码器,也无法使用AAC音频解码器,否则导入的文件无法播放和编辑或者没有声音。

需要使用ffmpeg进行转换

This video tutorial explains how to import and make use of MP4 / H264 video files in Davinci Resolve on Linux. ▼ Commands to use on the terminal: Encode in MJPEG:

1
2
ffmpeg -i raw_footage.mp4 -vcodec mjpeg -q:v 2 -acodec pcm_s16be -q:a 0 -f mov footage_mjpeg.mov 
# -i输入文件,-vcodec 视频编码 -acodec 音频编码

Encode back to H264:

1
ffmpeg -i final_cut.mov -c:v libx264 -preset ultrafast -crf 0 final_video.mp4 

fmpeg wiki: https://trac.ffmpeg.org/wiki/Encode/H...

https://passthroughpo.st/painless-linux-video-production-part-3-organization-and-workflow/#:~:text=Auto%2DTranscode%20Your%20Footage

1
2
3
4
5
6
7
8
9
10
// For Resolve Studio, add this line. It doesn't degrade footage quality in any way:

/storage/Ingestion IN_CLOSE_WRITE /usr/bin/ffmpeg -i $@/$# -c:v copy -c:a pcm_s16be /storage/Footage/$#.mov
ffmpeg -i $@/$# -c:v copy -c:a pcm_s16be $#.mov
#只转换音频编码到pcm,视频不转换

// For The free version of Resolve. This will convert your files to ProRes, and should not degrade quality much:

/storage/Ingestion IN_CLOSE_WRITE /usr/bin/ffmpeg -i $@/$# -c:v prores_ks -profile:v 3 -c:a pcm_s16be /storage/Footage/$#.mov
ffmpeg -i $@/$# -c:v prores_ks -profile:v 3 -c:a pcm_s16be $#.mov

ffmpeg 压缩参考

https://www.youtube.com/watch?v=bxy-4xwvpBo

https://blog.ayahuasec.top/blog/index.php/archives/19/

硬件加速转码

一些老的视频格式(比如.avi格式的视频文件)可能占用较大的空间,而使用H.264编码的后缀为.mp4的文件可以在基本保持视频质量的情况下使用更小的容量保存视频。但是ffmpeg默认使用软件编码,这会非常吃CPU性能,使得转码的速度非常慢。在有独立显卡的设备上,可以使用显卡的编码器进行视频编码,这可以大大提高视频转码的速度。
使用-hwaccels参数可以查看当前ffmpeg版本所支持的硬件加速功能。

1
2
3
4
5
6
7
8
$ffmpeg -hwaccels
Hardware acceleration methods:
cuda
dxva2
qsv
d3d11va
opencl
vulkan

如果有cuda或者cuvid,则该版本支持调用Nvidia的显卡的硬件加速功能。调用Nvidia显卡使用硬件编码器的例子如下:

1
$ffmpeg -hwaccel cuvid -i source.avi -c:v h264_nvenc output.mp4

如果该Nvidia GPU支持H265编码(HEVC),以下例子调用Nvidia显卡使用硬件解码器读取H264的视频,并使用硬件编码器转码为H265:

1
$ffmpeg -hwaccel cuvid -c:v h264_cuvid -i source.mkv -c:v hevc_nvenc output.mkv

如果有qsv则说明该版本ffmpeg支持Intel GPU加速。调用Intel集显使用硬件解码(H264)和硬件编码(H264)的例子如下:

1
$ffmpeg -hwaccel qsv -c:v hevc_qsv -i source.avi -c:v h264_qsv output.mp4

如果需要进行视频压制,可以使用-vf参数并附加需要的视频参数。以上述例子为例,要求目标视频为1080p、60fps:

1
$ffmpeg -hwaccel qsv -c:v hevc_qsv -i source.avi -vf 'vpp_qsv=framerate=60,scale_qsv=w=1920:h=1080' -c:v h264_qsv output.mp4

关于ffmpeg硬件加速的更多用法可以参考https://trac.ffmpeg.org/wiki/Hardware/QuickSync和https://docs.nvidia.com/video-technologies/video-codec-sdk/ffmpeg-with-nvidia-gpu/

视频转gif

ffmpeg支持gif格式,直接指定输出格式为gif即可。但由于gif本身不对数据进行压缩,空间利用率很低,有时受到文件大小限制,需要在视频转换时对原始视频进行等比例缩放或降低帧率。
该参数指定方法也可以用于视频格式互转。
以下例子将source.avi转换为分辨率为640x480的、帧数为24的gif图片。

1
$ffmpeg -i source.avi -s 640x480 -r 24 output.gif

以下例子将source.avi转换为分辨率为基于原始分辨率等比例缩放到1/4(长和宽均为1/2)的gif图片。

1
$ffmpeg -i source.avi -vf scale=iw/2:ih/2 output.gif

使用ffmpeg批量转码(使用bash脚本实现)

一个将当前目录下的所有.flv格式的视频的音频提取为mp3的bash脚本例子如下:

1
2
3
4
5
6
#!/bin/bash
for i in *.flv
do
echo "File $i selected"
ffmpeg -i "$i" "$i.mp3"
done

需要修改所选择的文件,则在for所在那一行修改末尾处选取文件的语法即可,需要添加其他参数则按照命令格式在ffmpeg所在行修改即可。之后执行脚本即可。

https://superuser.com/questions/1236275/how-can-i-use-crf-encoding-with-nvenc-in-ffmpeg/1236387

自己电脑转码实例

1
2
ffmpeg -i 中島みゆき\ ライヴ中岛美雪洛杉矶SONY摄影棚现场演唱(中日字幕).mp4  -c:v h264_nvenc -preset:v p7 -tune:v hq -rc:v vbr -cq:v 19 -b:v 0 -profile:v high  test2.mkv
ffmpeg -i 原视频.MP4 -c:v h264_nvenc -pix_fmt yuv420p -tune:v hq -rc:v vbr -cq:v 30 -b:v 0 -profile:v high amber.mp4

gpu硬件解码

10bit 转码,因为1060 帕斯卡系列显卡有些特性不支持,需要添加-pix_fmt xxxx进行转码

1
2
3
4
-c:v  -preset:v p7 -tune:v hq -rc:v vbr -cq:v 19 -b:v 0 -profile:v high #gpu 编码参数,需要调节19到需要的

ffmpeg -i 原视频.MP4 -c:v h264_nvenc -pix_fmt yuv420p -tune:v hq -rc:v vbr -cq:v 30 -b:v 0 -profile:v high amber.mp4
$ ffmpeg -i 原视频.MP4 -pix_fmt p010le -c:v hevc_nvenc -profile:v main10 -cq 21 amber3.mkv #可以调节-cq参数0-50
1
ffmpeg -h encoder=h264_nvenc #查看支持的选项

cpu编码参考:

1
2
ffmpeg -i input -c:v libx264 -preset slow -crf 22 -c:a copy output.mkv  
ffmpeg -i video -c:v libx264 -tune film -preset slow -crf 22 -x264opts fast_pskip=0 -c:a libmp3lame -aq 4 output.mkv

https://superuser.com/questions/1614571/understanding-pixel-format-and-profile-when-encoding-10-bit-video-in-ffmpeg-with

https://trac.ffmpeg.org/wiki/Encode/H.264

https://blog.csdn.net/qq26983255/article/details/94590018

参考资料