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 | ffmpeg -i raw_footage.mp4 -vcodec mjpeg -q:v 2 -acodec pcm_s16be -q:a 0 -f mov footage_mjpeg.mov |
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...
1 | // For Resolve Studio, add this line. It doesn't degrade footage quality in any way: |
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 | $ffmpeg -hwaccels |
如果有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 | #!/bin/bash |
需要修改所选择的文件,则在for所在那一行修改末尾处选取文件的语法即可,需要添加其他参数则按照命令格式在ffmpeg所在行修改即可。之后执行脚本即可。
https://superuser.com/questions/1236275/how-can-i-use-crf-encoding-with-nvenc-in-ffmpeg/1236387
自己电脑转码实例
1 | 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 |
gpu硬件解码
10bit 转码,因为1060 帕斯卡系列显卡有些特性不支持,需要添加-pix_fmt xxxx进行转码
1 | -c:v -preset:v p7 -tune:v hq -rc:v vbr -cq:v 19 -b:v 0 -profile:v high #gpu 编码参数,需要调节19到需要的 |
1 | ffmpeg -h encoder=h264_nvenc #查看支持的选项 |
cpu编码参考:
1 | ffmpeg -i input -c:v libx264 -preset slow -crf 22 -c:a copy output.mkv |
https://trac.ffmpeg.org/wiki/Encode/H.264
https://blog.csdn.net/qq26983255/article/details/94590018