谢谢大家的不负责任,我认为会有一点错误但我不明白在哪里,我试着把所有的步骤都带上!
在我写的 bash 下也是在 stackoverflow 用户的帮助下:
#!/bin/bash
# ENCODING FOR MPEG DASH
echo "ENCODE DASH-READY PROCESS"
echo -n "Insert input file name (es: input.mp4) and press [ENTER]: "
read name
DUR="$(ffmpeg -i $name 2>&1 | grep "Duration"| cut -d ' ' -f 4 | sed s/,// | sed 's@\..*@@g' | awk '{ split($1, A, ":"); split(A[3], B, "."); print 3600*A[1] + 60*A[2] + B[1] }')"
FPS="$(ffmpeg -i $name 2>&1 | sed -n "s/.*, \(.*\) fp.*/\1/p")"
FPSC=$( echo "($FPS+0.5)/1" | bc )
eval $(ffprobe -v error -of flat=s=_ -select_streams v:0 -show_entries stream=height,width $name)
size=${streams_stream_0_height}
GOP="$((FPSC*2))"
DURM="$((DUR%2))"
FDUR="$(($DUR-$DURM))"
# :no-open-gop=1:crf=16
# -c:a copy
# -vf "scale=-1:1080”
ffmpeg -y -i $name -i logo.png -c:a aac -b:a 384k -ar 48000 -ac 2 -async 1 -c:v libx264 -x264opts keyint=$GOP:min-keyint=$GOP:no-scenecut -bf 0 -s hd1080 -r $FPSC -b:v 4800k -maxrate 4800k -bufsize 3000k -profile:v main -t $FDUR -filter_complex "[0:v][1:v]overlay=main_w-overlay_w-10:10" format-1080.mp4
ffmpeg -y -i format-1080.mp4 -c:a aac -b:a 128k -ar 48000 -ac 2 -async 1 -c:v libx264 -x264opts keyint=$GOP:min-keyint=$GOP:no-scenecut -bf 0 -s 640x360 -r $FPSC -b:v 800k -maxrate 800k -bufsize 500k -profile:v main -t $FDUR format-360.mp4
#clear
echo duration in seconds $FDUR
echo fps $FPSC
echo height resolution $size
echo I-frames GOP $GOP
#MP4Box -info TRACK_ID format.mp4 2>&1 | grep GOP
echo "format-1080.mp4 ready"
echo "format-360.mp4 ready"
echo "ENCODE COMPLETED"
它准备了两个表示,第二个是从第一个创建的。
正如我所说,我希望这个脚本能够处理更多类型的视频:如果输入视频没有所需的规格(例如:gop,分辨率 HD 1920 x 1080),编码必须强制它们生成另一个适应集高清版,这是为了避免非常规的分辨率,比如影院范围或一切都不是 1920 x 1080 来生成高清版的精细小版。
现在事实变得不清楚:
如果我使用ffmpeg -i format-1080.mp4
我知道分辨率是 1920 x 1080
但是如果我检查文件信息(请注意,我此时在 osx 上尝试)它说 1993 x 1080,与我尝试破折号时说的 MP4Box 相同:
[DASH] Files have non-proportional track layouts (1993x1080 vs 664x360) but sample size and aspect ratio match, assuming precision issue
我知道如果第一个视频输入是 1920 x 1080,第二个是 640 x 360 一切正常。
我的 ffmpeg 版本是 3.4.1
实验的原始视频是:
ffmpeg version 3.4.1 Copyright (c) 2000-2017 the FFmpeg developers
built with Apple LLVM version 9.0.0 (clang-900.0.39.2)
configuration: --prefix=/usr/local/Cellar/ffmpeg/3.4.1 --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-gpl --enable-libmp3lame --enable-libx264 --enable-libxvid --enable-opencl --enable-videotoolbox --disable-lzma
libavutil 55. 78.100 / 55. 78.100
libavcodec 57.107.100 / 57.107.100
libavformat 57. 83.100 / 57. 83.100
libavdevice 57. 10.100 / 57. 10.100
libavfilter 6.107.100 / 6.107.100
libavresample 3. 7. 0 / 3. 7. 0
libswscale 4. 8.100 / 4. 8.100
libswresample 2. 9.100 / 2. 9.100
libpostproc 54. 7.100 / 54. 7.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'total.mp4':
Metadata:
major_brand : isom
minor_version : 1
compatible_brands: isomavc1
creation_time : 2012-08-10T11:02:57.000000Z
Duration: 01:53:31.08, start: 0.000000, bitrate: 2211 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1040 [SAR 1:1 DAR 24:13], 2111 kb/s, 24 fps, 24 tbr, 96 tbn, 48 tbc (default)
Metadata:
creation_time : 2012-08-10T11:02:58.000000Z
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 95 kb/s (default)
Metadata:
creation_time : 2012-08-10T11:13:14.000000Z
handler_name : GPAC ISO Audio Handler
在上面您可以清楚地看到原始分辨率为 1920 x 1040。
当我尝试从原始分辨率添加更多没有比例的区域时似乎是问题,似乎只有当视频必须变得比原始视频更小时,比例校正才能正常工作。
一些想法?
谢谢!
马西莫