# FFmpeg ## 影片編碼 ### -c:v 解碼器/編碼器 ( -c:a 音軌 , -c:s 字幕 ) * h264_cuvid : 使用 nvdia h264 解碼器 * h264_nvenc : 使用 nvdia h264 編碼器 * hevc_cuvid : 使用 nvdia hevc 解碼器 (h265) * hevc_nvenc : 使用 nvdia hevc 編碼器 (h265) * -hwaccel cuda : 使用 nvdia 硬體加速 (有時沒效??) * -hwaccel cuvid : 使用 nvdia 硬體加速 * -hwaccel dxva2 : * -hwaccel vaapi : ``` ffmpeg -c:v h264_cuvid -i 1.mkv -c:v h264_nvenc 1.mp4 ffmpeg -c:v hevc_cuvid -i 1.mkv -c:v hevc_nvenc 1.mp4 ffmpeg -hwaccel cuda -c:v hevc_cuvid -i 1.mkv -c:v hevc_nvenc 1.mp4 ffmpeg -hwaccel dxva2 ffmpeg -hwaccel vaapi ``` ffmpeg 将1080P视频转换成720P ``` ffmpeg -i input.mkv -c copy -c:v libx264 -vf scale=-2:720 output.mkv ``` -vf是-filter:v的简写,-filter指定过滤器,:v是流选择器,表示对视频流应用过滤器。scale=后面的参数是w:h,w和h可以包含一些变量,比如原始的宽高分别为iw和ih。当其中一个是负数时,假设为-n,ffmpeg自动使用另一个值按照原始的宽高比(aspect ratio)计算出该值,并且保证计算出来的值能被n整除。 修改 fps -r 放置位置為指定 輸入/輸出 的檔案的fps -r 20 輸出20fps ```bash= ffmpeg -r 80 -i input output ffmpeg -r 20 -i input output ffmpeg -i input -r 20 output ``` ffmpeg -r 80 -i input output ffmpeg -r 20-i input output ## 燒錄字幕 ### srt/ass/ssa 將字幕燒錄進 1.mkv 影片中 * si=1 : 指定第2個字幕軌 ( 從0開始 ) ``` ffmpeg -i 1.mkv -vf ass=1.ass 1.mp4 ffmpeg -i 1.mkv -vf subtitles=1.srt 1.mp4 ffmpeg -i 1.mkv -vf subtitles=video.mkv:si=1 1.mp4 ``` 可採用將字幕直接燒入影片,並指定字體及其大小與顏色: ``` ffmpeg -i input.mkv -vf "subtitles=subtitle.srt:force_style='FontName=標楷體,Fontsize=24,PrimaryColour=&H0000ff&'" output.mp4 ``` ### sub/idx 这条命令是加载视频文件infile.mp4,infile.idx和infile.sub文件,然后将字幕写进mkv中的metadata中,这样生成的mkv格式视频,可以在播放器中选择显示或者不显示字幕。 ``` ffmpeg -i infile.mp4 -i infile.idx -i infile.sub -map 0:v -map 0:a -c copy -map 1 -c:s:1 dvd_subtitle -metadata:s:s:1 language=ch outfile.mkv ``` 这条命令是加载1.mp4,1.sub,1.idx文件,然后通过滤镜将字幕烧录进视频文件,[0:v]指的第一个加载的视频文件1.MP4,[2:s]指的是加载的1.idx文件,因为索引是2,然后通过overlay=0:H-h将字幕显示在视频下方。 ``` ffmpeg -i 1.mp4 -i 1.sub -i 1.idx -filter_complex "[0:v][2:s]overlay=0:H-h" out.mp4 ``` 这两条命令的差别在于第一个是合并到一个视频文件,这个视频如果进行hls切片的话,播放出来并不会有字幕。而第二个命令的作用是直接烧录进视频文件,这样切片之后还是会有字幕显示。 參考連結: https://trac.ffmpeg.org/wiki/HowToBurnSubtitlesIntoVideo http://c.tieba.baidu.com/p/6038387903 https://moejj.com/ffmpeg-shaolu-subidxsubtitles/ https://askubuntu.com/questions/391122/how-can-i-burn-vobsub-subtitles-using-ffmpeg ## h2 偏移字幕: ``` ffmpeg -itsoffset 2 -i subtitles.srt -c copy subtitles_delayed.srt ``` https://stackoverflow.com/questions/57821502/how-to-delay-subtitles-in-ffmpeg ## 批次處理 ``` For %%i in (*.mkv) do ( ffmpeg -c:v h264_cuvid -i "%%i" -safe 0 -c:v h264_nvenc -vf "subtitles='%%i'" "%%~ni.mp4" ) ``` ``` setlocal ENABLEDELAYEDEXPANSION set /a count=1 For %%i in (*.mkv) do ( ren %%i "!count!.mkv" set /a count=count+1 rem echo %%i "!count!.mkv" ) ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up