我正在使用典型的 ffmpeg 命令来连接两个 mp4 文件:
ffmpeg -y -safe 0 -f concat -i !list.txt -c copy out.mp4
但是,有时我能在两个音轨连接处听到“咔哒”声,因为显然当两个音频样本碰撞时会发生“电平跳跃”。连接时,是否可以在第一个剪辑的末尾有非常短的淡出,在第二个剪辑的开头有非常短的淡入?
我正在使用典型的 ffmpeg 命令来连接两个 mp4 文件:
ffmpeg -y -safe 0 -f concat -i !list.txt -c copy out.mp4
但是,有时我能在两个音轨连接处听到“咔哒”声,因为显然当两个音频样本碰撞时会发生“电平跳跃”。连接时,是否可以在第一个剪辑的末尾有非常短的淡出,在第二个剪辑的开头有非常短的淡入?
我弟弟总是将他的采样率设置为扬声器制造商所支持的最大值。但是,选择默认值通常是有充分理由的,并且默认采样率通常要低一个数量级。
因此,我想确定他没有无意中损坏他的扬声器(或者降低其输出质量,如果你也愿意告诉我的话)。
默认采样pipewire-1.2.7-1.fc41.x86_64
率为 48 KHz。我还没有找到一个 GUI 来尝试确定合适的替代采样率,但当连接 Z200 时,Windows 11 提供了高达 192 KHz 的选项。这让我很惊讶,因为 Logitech 表示他们只能支持高达 88 KHz。
正如所gearspace.com/board/showpost.php?p=8090836
演示的,我读到过,高于制造商预期的采样率可能会损坏驱动器,尽管通常是以渐进的方式:
扬声器故障有两个基本原因:机械和热量。低于扬声器可用范围的频率可能会以这两种方式造成损坏。如上所述,它们可能会导致音圈过度偏移,从而导致分层或开裂,或者它们可能会在音圈中产生过多的电流,从而产生热量,从而导致分层或变形。频率过高通常不会造成问题,但由于锥体运动前端和后端的速率过高,波形被削波也可能导致机械损坏或过热。
它所包含的线索确实很复杂,但却是零散的,而且不是我所理解的。
不管怎样,reddit.com/r/audiophile/comments/1d5awm/comment/c9n1g97
似乎与之相矛盾:
当系统设置为与音频文件不同的采样率时,通过系统的音频会经历采样率转换(通常也称为重新采样)。在此过程中,会根据原始音频流的“目标采样率”计算出新的波形。
举例来说(因为我推测某些方面在不同发言者之间会有所不同):
WHO | 数数 | 模型 | 联系 |
---|---|---|---|
我的兄弟 | 2 | 罗技 Z200 | 通过 2 或 3.5 毫米音频插孔连接至主板。 |
我自己 | 2 | 创意T60 | 通过 TB5 USB-C 连接到我电脑 MB 的 IO 端口。 |
我没有在sound.stackexchange.com
或询问这个问题,music.stackexchange.com
因为superuser.com/help/on-topic
似乎建议超级用户是询问这个问题的最佳场所。
情况:我确实将 h.264 input_original.mkv文件编码为 h.265 output_hevc.mkv
经过漫长的编码过程后,我意识到选择了错误的音频流。
我需要获取新的output_hevc_2.mkv,它将基于来自output_hevc.mkv的视频流副本和来自input_original.mkv 的映射音频流
从技术上来说这可行吗?
我已经看到了这个链接 ffmpeg-adding-re-encoding-audio-stream-on-video-file
这不是同一个问题,因为它将使用来自input_original.mkv的视频流生成新的输出文件。
我正在使用 将一堆(990).ts
文件转换为.mp4
视频文件ffmpeg
。
生成的.mp4
文件在 中可以完美播放,但是当我在Mac 上vlc
播放时,或者更具体地说,在我使用 的视频播放器中,它可以播放约 10 分钟,然后声音会开始跳动,因为每 2 秒就会出现非常短暂的闪烁/暂停。停止视频并从同一点再次播放,让它再次播放约 10 分钟。QuickTime
AVPlayerView
我最初以为是我自己的视频应用程序存在问题,但 QuickTime 也存在同样的问题。
我将所有.ts
文件合并如下:
ffmpeg -y -f concat -safe 0 -i list.txt -c copy video.ts
然后我将其转换成.mp4
这样:
ffmpeg -y -i video.ts -acodec copy -vcodec copy video.mp4
我尝试过的其他事情
指定视频编解码器:
ffmpeg -i video.ts -acodec copy -vcodec libx264 video.mp4
首先转换为.mkv
:
ffmpeg -i video.ts -map 0 -c copy output.mkv
ffmpeg -i video.mkv -acodec copy -vcodec copy video.mp4
转换为m4a
:
ffmpeg -i video.ts -vcodec h264 -c:a aac video.mp4
我注意到当我使用ffprobe
它时,最终视频会报告为29.88 fps
但原始视频.ts
是30 fps
。我不确定这是否是问题所在,所以我尝试强制帧速率保持不变:
ffmpeg -i video.ts -acodec copy -filter:v fps=30 video.mp4
以上所有似乎都没有什么区别。
合并文件的方式可能存在问题.ts
吗?虽然完整版.ts
在 QuickTime 中似乎可以正常播放。我还可以尝试其他方法来合并它们吗?
流详细信息
原始单个 .ts 文件:
Input #0, mpegts, from '162.ts':
Duration: 00:00:05.49, start: 883.612144, bitrate: 873 kb/s
Program 1
Stream #0:0[0x101]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp, 130 kb/s
Stream #0:1[0x100]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p(tv, bt709, progressive), 640x360 [SAR 1:1 DAR 16:9], 30 fps, 30 tbr, 90k tbn
合并.ts
文件:
Input #0, mpegts, from 'video.ts':
Duration: 01:30:21.54, start: 1.400000, bitrate: 690 kb/s
Program 1
Metadata:
service_name : Service01
service_provider: FFmpeg
Stream #0:0[0x100]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p(tv, bt709, progressive), 640x360 [SAR 1:1 DAR 16:9], 30 fps, 30 tbr, 90k tbn
Stream #0:1[0x101]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp, 130 kb/s
转换为.mp4
:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf61.1.100
Duration: 01:30:21.56, start: 0.000000, bitrate: 616 kb/s
Stream #0:0[0x1](und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 640x360 [SAR 1:1 DAR 16:9], 480 kb/s, 29.88 fps, 30 tbr, 90k tbn (default)
Metadata:
handler_name : VideoHandler
vendor_id : [0][0][0][0]
Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 127 kb/s (default)
Metadata:
handler_name : SoundHandler
vendor_id : [0][0][0][0]
转换为fps=30
:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf61.1.100
Duration: 01:30:21.56, start: 0.000000, bitrate: 768 kb/s
Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 640x360 [SAR 1:1 DAR 16:9], 632 kb/s, 30 fps, 30 tbr, 15360 tbn (default)
Metadata:
handler_name : VideoHandler
vendor_id : [0][0][0][0]
encoder : Lavc61.3.100 libx264
Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 127 kb/s (default)
Metadata:
handler_name : SoundHandler
vendor_id : [0][0][0][0]
对 arch 来说仍然很陌生,但是我今天早上运行了完整的系统更新(sudo pacman -Syu
和yay -Syu
),并且从那时起,pwvucontrol 和 pavucontrol 在运行时都只返回以下输出(程序名称和内存地址除外):
MESA-INTEL: warning: ../mesa-24.2.2/src/intel/vulkan/anv_formats.c:763: FINISHME: support YUV colorspace with DRM format modifiers
MESA-INTEL: warning: ../mesa-24.2.2/src/intel/vulkan/anv_formats.c:794: FINISHME: support more multi-planar formats with DRM modifiers
[1] 21948 segmentation fault (core dumped) pwvucontrol
我正在运行 pipewire 和 wireplumber,两者似乎都运行良好,因为我可以正常使用它们,并且通过检查它们的systemctl status
。不确定段错误之前的两行是否重要,但我尽力更新我的图形内容以查看它们是否是罪魁祸首(mesa
和vulkan-intel
),但没有结果。值得注意的是,yay 今天早上坏了(不记得为什么),我通过 重新安装了它https://aur.archlinux.org/yay.git
,这可能与此有关。通过 wayland 运行 hyprland。
任何帮助都将不胜感激,因为虽然一切正常,但我不知道如何在没有 pwvucontrol 的情况下更改蓝牙编解码器,并且我的耳机默认为 SBC,这非常粗糙。
我想使用 ffmpeg 制作一个空白(黑色)视频,其中包含不同语言的音频和字幕。我可以 (1) 制作黑色视频,(2) 为其添加 3 个音轨,但我无法 (3) 为其添加字幕。尽管所有 3 个音频都存在并且可以切换,但没有字幕出现。
(1)我使用以下工具制作了黑色(无声)视频:
ffmpeg -loop 1 -i black.jpg -i silent.mp3 -acodec copy -shortest -vf scale=1280:720 silent.mov
其中 black.jpg 是一张 1280x720 的黑色图像,而 silent.mp3 有 5 分钟的静音时间
(2)我使用以下命令添加了 3 条音轨(意大利语、法语、德语):
ffmpeg -i silent.mov -i ita.mp3 -i fre.mp3 -i ger.mp3 -map 0:v -map 1:a -map 2:a -map 3:a -metadata:s:a:0 language=ita -metadata:s:a:1 language=fra -metadata:s:a:2 language=ger ita-fre-ger.mov
(3)我尝试使用以下方法为每种语言添加字幕:
ffmpeg -i ita-fre-ger.mov -i ita.srt -i fre.srt -i ger.srt -map 0 -map 1 -map 2 -map 3 -c copy -c:s mov_text -metadata:s:s:0 language=ita -metadata:s:s:1 language=fra -metadata:s:s:2 language=ger final.mov
只是最后这条命令不起作用。我该如何添加字幕?我很乐意使用 .mp4 而不是 .mov,但它也不起作用。
更新:感谢@Ricardo Bohner 为我解答。为了完整起见,这里介绍一下我如何将其应用于我的情况,从而一步到位地获得我想要的结果:
ffmpeg -f lavfi -i "color=color=black:s=1280x720" -i ita.srt -i fre.srt -i ger.srt -i ita.mp3 -i fre.mp3 -i ger.mp3 -map 0:v -map 1:s:0 -map 2:s:0 -map 3:s:0 -map 4:a -map 5:a -map 6:a -metadata:s:a:0 language=ita -metadata:s:a:1 language=fra -metadata:s:a:2 language=ger -metadata:s:s:0 language=ita -metadata:s:s:1 language=fra -metadata:s:s:2 language=ger -c:s:0 mov_text -c:s:1 mov_text -c:s:2 mov_text -shortest test.mp4
尝试使用 ffmpeg 将 vob 或 mkv 或 mp4 视频文件转换为原始比特流,ffmpeg -i input.mp4 -map 0:v -c:v copy -bsf:v h264_mp4toannexb raw.h264
但一直出现相同的错误,除了谷歌搜索之外,我对 ffmpeg 一无所知。任何想法,提前谢谢!
ffmpeg version 2024-06-21-git-d45e20c37b-full_build-www.gyan.dev Copyright (c) 2000-2024 the FFmpeg developers
built with gcc 13.2.0 (Rev5, Built by MSYS2 project)
configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-libsnappy --enable-zlib --enable-librist --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-libbluray --enable-libcaca --enable-sdl2 --enable-libaribb24 --enable-libaribcaption --enable-libdav1d --enable-libdavs2 --enable-libopenjpeg --enable-libquirc --enable-libuavs3d --enable-libxevd --enable-libzvbi --enable-libqrencode --enable-librav1e --enable-libsvtav1 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxeve --enable-libxvid --enable-libaom --enable-libjxl --enable-libvpx --enable-mediafoundation --enable-libass --enable-frei0r --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-liblensfun --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-dxva2 --enable-d3d11va --enable-d3d12va --enable-ffnvcodec --enable-libvpl --enable-nvdec --enable-nvenc --enable-vaapi --enable-libshaderc --enable-vulkan --enable-libplacebo --enable-opencl --enable-libcdio --enable-libgme --enable-libmodplug --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libshine --enable-libtheora --enable-libtwolame --enable-libvo-amrwbenc --enable-libcodec2 --enable-libilbc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-ladspa --enable-libbs2b --enable-libflite --enable-libmysofa --enable-librubberband --enable-libsoxr --enable-chromaprint
libavutil 59. 24.103 / 59. 24.103
libavcodec 61. 8.100 / 61. 8.100
libavformat 61. 3.104 / 61. 3.104
libavdevice 61. 2.100 / 61. 2.100
libavfilter 10. 2.102 / 10. 2.102
libswscale 8. 2.100 / 8. 2.100
libswresample 5. 2.100 / 5. 2.100
libpostproc 58. 2.100 / 58. 2.100
Input #0, mpeg, from '4.vob':
Duration: 00:47:01.86, start: 0.060000, bitrate: 7777 kb/s
Stream #0:0[0x1bf]: Data: dvd_nav_packet
Stream #0:1[0x1e0]: Video: mpeg2video (Main), yuv420p(tv, bottom first), 720x480 [SAR 8:9 DAR 4:3], 7000 kb/s, 29.97 fps, 29.97 tbr, 90k tbn
Side data:
cpb: bitrate max/min/avg: 7000000/0/0 buffer size: 1835008 vbv_delay: N/A
Stream #0:2[0x80]: Audio: ac3, 48000 Hz, stereo, fltp, 192 kb/s
Stream #0:3[0x81]: Audio: ac3, 48000 Hz, 5.0(side), fltp, 448 kb/s
[h264_mp4toannexb @ 0000020539e51540] Codec 'mpeg2video' (2) is not supported by the bitstream filter 'h264_mp4toannexb'. Supported codecs are: h264 (27)
[vost#0:0/copy @ 0000020539e77c00] Error initializing bitstream filter: h264_mp4toannexb
Error opening output file raw.h264.
Error opening output files: Invalid argument
我正在使用 ffmpeg 尝试对 mp4 进行下采样,但它只会输出 mkv 文件,而不是 mp4 文件。因此,我有一个 mkv 文件输出。我尝试使用以下命令将其转换为 mp4,但显示错误:
$ ffmpeg -i 输出.mkv -c 复制输出.mp4 [mp4 @ 0x556237e63480] 在流 #1 中找不到编解码器 pcm_s16be 的标签,容器中当前不支持编解码器 无法为输出文件 #0 写入标题(编解码器参数不正确?):参数无效
如何使用 ffmpeg 将其转换为 mp4?mkv 文件的编解码器信息如下:
输入 #0,matroska,webm,来自‘output.mkv’: 元数据: 时间码:21:21:16;29 主要品牌:XAVC 次要版本:16785407 兼容品牌:XAVCmp42iso2 编码器:Lavf59.27.100 时长:00:04:07.75,开始:0.000000,比特率:4244 kb/s 流 #0:0:视频:h264(高)、yuv420p(电视、bt709/bt709/iec61966-2-4、渐进式)、1280x720 [SAR 1:1 DAR 16:9]、29.97 fps、29.97 tbr、1k tbn 元数据: HANDLER_NAME:视频媒体处理程序 供应商 ID:[0][0][0][0] 编码器:Lavc59.37.100 libx264 时长:00:04:07.747000000 流 #0:1:音频:pcm_s16be,48000 Hz,立体声,s16,1536 kb/s(默认) 元数据: HANDLER_NAME :声音媒体处理程序 供应商 ID:[0][0][0][0] 时长:00:04:07.750000000
更新:
请注意,用于创建原始文件的原始下采样命令(从 1080p 到 720p)(导致无法复制的 mkv 文件如下:
$ ffmpeg -i H403.mp4 -filter:v scale=1280:-1 -c:a copy output.mkv
如果有人能建议如何修改此命令以直接生成 720p mp4 文件,我将不胜感激。(请注意,文件大小差异很大:原始 1080p 文件为 1577 Mb,但 720p 文件为 8.8 Mb,几乎小 200 倍)。
我一直在从我的索尼 Digital8 相机的 Hi8 磁带中取出旧摄像机视频。索尼软件创建的 AVI 文件被 ffprobe 检测为:
[avi @ 000001dec87682c0] ODML index invalid
Last message repeated 1 times
Input #0, avi, from '.\20240717154604.avi':
Duration: 01:57:00.11, start: 0.000000, bitrate: 29803 kb/s
Stream #0:0: Video: dvvideo (dvsd / 0x64737664), yuv411p, 720x480 [SAR 8:9 DAR 4:3], 28771 kb/s, 29.97 fps, 29.97 tbr, 29.97 tbn
Stream #0:1: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 32000 Hz, 2 channels, s16, 1024 kb/s
如果我使用以下命令将文件转换为 mpg:-target ntsc-dvd -b:v 9M -q:a 2 -q:v 2 -channel_layout stereo
然后使用以下方法将其转换为 H.265 MP4:-c:v libx265 -crf 27 -preset slow -c:a aac -b:a 128k -ac 2
生成的文件可以在 Windows Media 应用程序中使用,更重要的是,可以在 Plex 中使用。但是,如果我将 DVVideo AVI 直接转换为 H.265,Windows Media 应用程序会告诉我这是一个不受支持的编解码器,而 Plex 认为它正在播放它,但没有视频或音频。
我尝试使用所有这些不同的参数将 AVI 直接转换为 H.265。请注意,我的笔记本电脑同时配有 Intel 和 nVidia 芯片组,因此我尝试了 hevc_qsv 和 hevc_nvenc。
-c:v libx265 -crf 27 -preset slow -c:a aac -b:a 128k -ac 2
-map 0 -c copy -c:v hevc_qsv -c:a aac
-c copy -c:v hevc_nvenc
-c copy -c:v hevc_nvenc -preset slow -level 4.1 -f mp4
-c:v hevc_nvenc -preset slow -level 4.1 -f mp4
每次尝试时,命令行的其余部分都是相同的:ffmpeg.exe -i ".\Input.avi" -ss 00:00:06.966 -to 00:20:04.766 <args from a line above> "X:\Output.mp4"
下面是从 mpeg 转换而来的 mp4 的 ffprobe 输出:
PS X:\> .\ffmpeg\bin\ffprobe.exe -hide_banner '.\Hiner Christmas 1997 - nVidia mpg copy preset slow level 4.1.mp4'
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '.\Hiner Christmas 1997 - nVidia mpg copy preset slow level 4.1.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomdby1iso2mp41
encoder : Lavf60.16.100
Duration: 00:19:58.01, start: 0.000000, bitrate: 2488 kb/s
Stream #0:0[0x1](und): Video: hevc (Main) (hev1 / 0x31766568), yuv420p(tv, progressive), 720x480 [SAR 8:9 DAR 4:3], 2035 kb/s, 29.97 fps, 29.97 tbr, 30k tbn (default)
Metadata:
handler_name : VideoHandler
vendor_id : [0][0][0][0]
encoder : Lavc60.31.102 hevc_nvenc
Stream #0:1[0x2](und): Audio: ac3 (ac-3 / 0x332D6361), 48000 Hz, stereo, fltp, 448 kb/s (default)
Metadata:
handler_name : SoundHandler
vendor_id : [0][0][0][0]
Side data:
audio service type: main
下面是从 avi 转换而来的 mp4 文件,但它不起作用:
PS X:\> .\ffmpeg\bin\ffprobe.exe -hide_banner '.\Hiner Christmas 1997 - nVidia avi copy preset slow level 4.1.mp4'
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '.\Hiner Christmas 1997 - nVidia avi copy preset slow level 4.1.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2mp41
encoder : Lavf60.16.100
Duration: 00:19:57.81, start: 0.000000, bitrate: 3064 kb/s
Stream #0:0[0x1](und): Video: hevc (Rext) (hev1 / 0x31766568), yuv444p(tv, bottom coded first (swapped)), 720x480 [SAR 8:9 DAR 4:3], 2033 kb/s, 29.97 fps, 29.97 tbr, 30k tbn (default)
Metadata:
handler_name : VideoHandler
vendor_id : [0][0][0][0]
encoder : Lavc60.31.102 hevc_nvenc
Stream #0:1[0x2](und): Audio: pcm_s16le (ipcm / 0x6D637069), 32000 Hz, stereo, s16, 1024 kb/s (default)
Metadata:
handler_name : SoundHandler
vendor_id : [0][0][0][0]
一个明显的区别是,工作文件的视频是
hevc (Main) (hev1 / 0x31766568), yuv420p(tv, progressive)
,而坏文件的视频是
hevc (Rext) (hev1 / 0x31766568), yuv444p(tv, bottom coded first (swapped))
。
同样,好的音频是
ac3 (ac-3 / 0x332D6361), 48000 Hz, stereo, fltp, 448 kb/s (default)
,坏的音频是
pcm_s16le (ipcm / 0x6D637069), 32000 Hz, stereo, s16, 1024 kb/s (default)
。
我不太了解 ffmpeg 或 Plex,不知道其中哪一个可能是问题或者如何解决它。
请注意,所有文件都可以在 VLC 中播放,因为它可以提取任何内容并播放,但我真的很想弄清楚如何让这些文件在 Plex 上运行,而不必转换为 DVD 兼容 MPEG,然后再转换为 H.265,因为这肯定会在一定程度上降低质量。
我有两台计算机通过声卡相互连接,因此我可以从主计算机听到两台计算机的输入或输出。
我使用Voicemeeter设法在计算机 1 中听到来自计算机 2 的声音,但现在我希望每次我在计算机 1 的麦克风 1 中说话时,它都会听到计算机 2 的麦克风输入。但我找不到合适的解决方案来解决这个问题。
这可能吗?