【发布时间】:2020-12-24 23:48:29
【问题描述】:
我在 Windows 10 上使用 FFMPEG 已经有一段时间了。为了帮助我完成工作,我有几个 DOS 批处理文件,它们接受参数并执行诸如从头开始剪切、模糊区域、静音音频等任务。
我通常拍摄大型视频,使用 Avidemux 提取我喜欢的部分,使用 FFMPEG 对某些部分进行剪切/应用过滤器,使用 FFMPEG 将它们连接起来,然后再次编码以消除我的任何错误(或抖动等)目标播放器,即在 Android TV(TCL 品牌)上运行的 Kodi 18.xx。
我已经为我制作了几年的视频做了类似的过程,但这个视频似乎超出了我的控制范围。我已经使用 Avidemux 2.7.2 截断了视频。视频已在关键帧处剪切。如果我采用一个未编码的文件,它可以在我的 Android TV 上完美运行。如果我使用 FFMPEG 对其进行编码,它会在我的 Android TV 上播放时开始抖动。
视频在我的电脑上运行的 VLC 播放器上总是可以正常播放。
一些可能有用的信息。如果需要,我可以附上详细的框架信息。
ffmpeg version 4.3 Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 9.3.1 (GCC) 20200621
configuration: --disable-static --enable-shared --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libsrt --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libgsm --disable-w32threads --enable-libmfx --enable-ffnvcodec --enable-cuda-llvm --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf
libavutil 56. 51.100 / 56. 51.100
libavcodec 58. 91.100 / 58. 91.100
libavformat 58. 45.100 / 58. 45.100
libavdevice 58. 10.100 / 58. 10.100
libavfilter 7. 85.100 / 7. 85.100
libswscale 5. 7.100 / 5. 7.100
libswresample 3. 7.100 / 3. 7.100
libpostproc 55. 7.100 / 55. 7.100
显示源文件的信息。编解码器是hevc,我认为FFMPEG没有默认支持?
ffmpeg -i _p007_cut_start.mp4 -hide_banner
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '_p007_cut_start.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2mp41
encoder : Lavf58.20.100
Duration: 00:00:08.51, start: 0.006000, bitrate: 5501 kb/s
Stream #0:0(und): Video: hevc (Main 10) (hev1 / 0x31766568), yuv420p10le(tv, bt709), 1920x816 [SAR 1:1 DAR 40:17], 5091 kb/s, 23.98 fps, 23.98 tbr, 24390 tbn, 23.98 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, 5.1, fltp, 401 kb/s (default)
Metadata:
handler_name : SoundHandler
显示已编码文件的信息:
ffmpeg -i p007_done2.mp4 -hide_banner
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'p007_done2.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.45.100
Duration: 00:00:08.53, start: 0.000000, bitrate: 3092 kb/s
Stream #0:0(und): Video: h264 (High 10) (avc1 / 0x31637661), yuv420p10le, 1920x816 [SAR 1:1 DAR 40:17], 2743 kb/s, 23.98 fps, 23.98 tbr, 24390 tbn, 47.95 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, 5.1, fltp, 345 kb/s (default)
Metadata:
handler_name : SoundHandler
如果有人能指出我哪里出错了,我将不胜感激。
用于执行编码的命令如下(仅在libx264和lib265之间交换了库):
ffmpeg -i in.mp4 -map 0:v -c:v libx264 -video_track_timescale 24390 -crf 23 -map 0:a -c:a aac -copyts -vsync 0 -async 0 -movflags +faststart out.mp4
附:我的知识更多地基于反复试验,除了让我走到这一步的原因之外,我不太了解视频格式(和概念)。
问候, AK
【问题讨论】:
-
源是 10 位的,因此 ffmpeg 已转换为 10 位 H.264,您的播放器可能无法正常运行。通过添加
-pix_fmt yuv420p编码为 x264 8 位 -
感谢您的帮助。
标签: video ffmpeg video-encoding